
Skript zur Aufzählung von Privilegieneskalation für Windows
Schnelles Identifizieren von häufigen Windows-Sicherheitslücken und Konfigurationsproblemen, die nicht unbedingt von öffentlichen Sicherheitsstandards abgedeckt werden, sowie Sammeln nützlicher Informationen für Exploitation und Post-Exploitation-Aufgaben.
[!IMPORTANT] Ein wichtiger Aspekt, der bei der Verwendung dieses Tools zu beachten ist, ist, dass alle Zugriffskontrollprüfungen im Kontext des aktuellen Benutzers durchgeführt werden. Wenn es daher mit Administratorrechten ausgeführt wird, werden viele Schwachstellenprüfungen tatsächlich übersprungen, um falsche Ergebnisse zu vermeiden.
Laden Sie das Skript hier herunter: PrivescCheck.ps1
[!TIP] Der obige Link kann auch direkt in einem PowerShell-Terminal mit
(New-Object Net.WebClient).DownloadString(...)verwendet werden.
Gibt es eine offensichtliche Möglichkeit, lokale Rechte zu erweitern?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck"
Gibt es zusätzliche Informationen, die für Post-Exploitation oder zum Auffinden von Schwachstellen in Drittanbieter-Software genutzt werden können?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML"
Gibt es Konfigurationsprobleme, die nicht von üblichen Sicherheitsstandards abgedeckt werden?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML,CSV,XML"
Invoke-PrivescCheck [-Extended] [-Audit] [-Experimental] [-Report <PREFIX>]
[-Format <FORMAT>[,...]] [-Risky] [-Silent] [-Force]
-Extended
Alle "erweiterten" Prüfungen in den Scan einbeziehen (siehe README).
-Audit
Alle "Audit"-Prüfungen in den Scan einbeziehen.
-Experimental
Alle "experimentellen" Prüfungen in den Scan einbeziehen. Nur verwenden,
wenn Sie wissen, was Sie tun.
-Report <PREFIX>
Mindestens eine Berichtsdatei erzeugen. Der Ausgabedateiname lautet
standardmäßig "PREFIX.txt". Die Erweiterung wird automatisch basierend
auf dem Berichtsformat angehängt (siehe "-Format <FORMAT>[,...]").
-Format <FORMAT>[,...]
Das Format der Ausgabebeschreibungsdatei(en) angeben. Falls nicht
gesetzt, ist der Standardwert "TXT". Unterstützte Formate sind: "TXT",
"HTML", "CSV" und "XML".
-Risky
Prüfungen einbeziehen, die als "riskant" markiert sind, d. h.
Prüfungen, die wahrscheinlich eine blockierende Aktion einer
Endpunktschutzlösung auslösen. Mit Vorsicht verwenden.
-Silent
Terminalausgabe unterdrücken. Dies kann nützlich sein, wenn das
Skript als Teil einer Batch-Datei, z. B. in einer geplanten Aufgabe,
ausgeführt werden soll.
-Force
Ausführung erzwingen und Warnungen ignorieren. Typischerweise stoppt
das Skript, wenn es mit Administratorrechten ausgeführt wird. Mit
dieser Option wird es dennoch ausgeführt.
-Format TXT)Verwenden Sie die Option -Report <PREFIX> (mit -Format TXT), um anzugeben, dass Sie einen Reintextbericht erzeugen möchten. Die Ausgabe ähnelt dem, was Sie im Terminal sehen würden, mit der Ausnahme, dass sie nur ASCII-Zeichen enthält für eine bessere (Retro-)Kompatibilität mit allen Texteditoren.

-Format HTML)Verwenden Sie die Option -Report <PREFIX> mit -Format HTML, um anzugeben, dass Sie einen HTML-Bericht erzeugen möchten. Die Ausgabedatei kann in einem Webbrowser geöffnet werden. Sie ist für die visuelle Darstellung der Daten bequemer als der Reintextbericht. Zusätzlich bietet sie Sortier- und Filterfunktionen!

-Format CSV) & XML (-Format XML)Verwenden Sie die Option -Report <PREFIX> mit -Format CSV oder -Format XML, um anzugeben, dass Sie einen CSV- oder XML-Bericht erzeugen möchten. Die Ausgabedatei ist dazu gedacht, das Parsen der Ergebnisse durch automatisierte Berichtswerkzeuge zu erleichtern.
[!NOTE] Obwohl das Ausgabeformat (noch) nicht dokumentiert ist, können Sie es leicht durch Analyse der Struktur einer bereits erstellten Datei herausfinden. Sie können den
Id-Wert jeder Prüfung verwenden, um diese eindeutig zu identifizieren.
Prüfungen vom Typ Base werden immer ausgeführt, es sei denn, das Skript wird als Administrator ausgeführt. Sie sind hauptsächlich zur Identifizierung von Rechteerweiterungs-Schwachstellen oder anderen wichtigen Problemen gedacht.
-Extended)Prüfungen vom Typ Extended können nur ausgeführt werden, wenn die Option -Extended in der Befehlszeile angegeben wird. Sie sind hauptsächlich dazu gedacht, zusätzliche Informationen bereitzustellen, die für die Exploit-Entwicklung oder Post-Exploitation nützlich sein könnten.
-Audit)Prüfungen vom Typ Audit können nur ausgeführt werden, wenn die Option -Audit in der Befehlszeile angegeben wird. Sie sind hauptsächlich dazu gedacht, Informationen bereitzustellen, die im Rahmen einer Konfigurationsprüfung relevant sind.
Standardmäßig ist die PowerShell-Ausführungsrichtlinie auf Clients auf Restricted und auf Servern auf RemoteSigned gesetzt, wenn ein neuer powershell.exe-Prozess gestartet wird. Diese Richtlinien blockieren die Ausführung von (unsignierten) Skripten, können jedoch innerhalb des aktuellen Bereichs wie folgt überschrieben werden.
Set-ExecutionPolicy Bypass -Scope Process -Force
. .\PrivescCheck.ps1
Dieser Trick funktioniert jedoch nicht, wenn die Ausführungsrichtlinie durch eine GPO erzwungen wird. In diesem Fall können Sie das Skript nach dem Start einer neuen PowerShell-Sitzung wie folgt laden.
Get-Content .\PrivescCheck.ps1 | Out-String | Invoke-Expression
Eine gängige Methode, um den Constrained Language Mode zu umgehen, besteht darin, PSv2 zu verwenden, da dieser Schutz nicht implementiert ist. Daher fließt ein erheblicher Teil der Entwicklungsarbeit in die Aufrechterhaltung dieser Retro-Kompatibilität.
[!NOTE] Obwohl PowerShell Version 2
auf neueren Windows-Versionen standardmäßig noch aktiviert ist(Entfernung von PowerShell 2.0 aus Windows), kann es ohne .Net Framework Version 2.0 nicht ausgeführt werden, was eine manuelle Installation erfordert.
Wenn Sie dieses Skript innerhalb einer Meterpreter-Sitzung ausführen, erhalten Sie wahrscheinlich eine "Timeou t"-Fehlermeldung. Dies liegt daran, dass Metasploit einen Standard-Timeout-Wert von 15 Sekunden verwendet, der für eine typische Ausführung des Skripts nicht ausreicht.
meterpreter > load powershell
Loading extension powershell...Success.
meterpreter > powershell_import /local/path/to/PrivescCheck.ps1
[+] File successfully imported. No result was returned.
meterpreter > powershell_execute "Invoke-PrivescCheck"
[-] Error running command powershell_execute: Rex::TimeoutError Operation timed out.
Es ist möglich, dank der Option -t des Befehls sessions einen anderen Timeout festzulegen (Dokumentation). Im folgenden Beispiel wird ein Timeout von 2 Minuten für die Sitzung mit der ID 1 festgelegt, Sie möchten jedoch möglicherweise einen noch höheren Wert einstellen.
msf6 exploit(multi/handler) > sessions -t 120 -i 1
[*] Starting interaction with 1...
meterpreter > powershell_execute "Invoke-PrivescCheck"