
PrivescCheck v2026.09.21-1
Skript zur Aufzählung von Privilegieneskalation für Windows
PrivescCheck
Identifizieren Sie schnell gängige Windows-Schwachstellen und Konfigurationsprobleme, die nicht unbedingt von öffentlichen Sicherheitsstandards abgedeckt werden, und sammeln Sie nützliche 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 übersprungen, um die Generierung falscher Ergebnisse zu vermeiden.
Schnellstart
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.
Anwendungsfall 1: Schnelle Bewertung
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Report TXT,HTML"
Anwendungsfall 2: Umfangreiche Bewertung
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report TXT,HTML"
Anwendungsfall 3: Umfassende Bewertung
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report ALL"
Detaillierte Verwendung
Invoke-PrivescCheck [-Extended] [-Audit] [-Risky] [-Report <FORMAT>[,...]]
[-FilePath <PREFIX>] [-Silent] [-Force]
-Extended
Alle "erweiterten" Prüfungen in den Scan einbeziehen.
-Audit
Alle "Audit"-Prüfungen in den Scan einbeziehen.
-Risky
Alle "riskanten" Prüfungen in den Scan einbeziehen. Dies sind Prüfungen,
die aufgrund ihres Verhaltens wahrscheinlich aktive EDR-Gegenmaßnahmen
auslösen.
-Report <FORMAT>[,...]
Geben Sie die Dateiformate für den Ausgabebericht an (TXT, HTML, CSV, XML). Verwenden Sie den Alias
'ALL', um alle Berichtsdateien zu generieren. Standardmäßig wird der Ausgabedateiname
automatisch generiert. Verwenden Sie die Option '-FilePath', um einen
explizit anzugeben.
-FilePath <PREFIX>
Geben Sie den Dateinamen oder das Verzeichnis des Ausgabeberichts an. Die Dateierweiterung
wird automatisch angehängt. Wenn ein Verzeichnispfad angegeben wird, wird der
Dateiname zur Laufzeit automatisch generiert.
-Silent
Terminalausgabe unterdrücken. Dies kann nützlich sein, wenn Sie das
Skript als Teil einer Batchdatei ausführen möchten, beispielsweise in einer geplanten Aufgabe.
-Force
Ausführung erzwingen und Warnungen ignorieren. Typischerweise stoppt das Skript, wenn
es mit Administratorrechten ausgeführt wird. Verwenden Sie diese Option, um
es trotzdem auszuführen.
Berichtsdateiformate
Berichtsdateiformat > TXT
Verwenden Sie die Option -Report TXT, um einen Roh-Textbericht zu generieren. Die Ausgabe ähnelt der Terminalausgabe, enthält jedoch nur ASCII-Zeichen für eine bessere Kompatibilität mit Texteditoren.

Berichtsdateiformat > HTML
Verwenden Sie die Option -Report HTML, um einen HTML-Bericht zu generieren. Die Ausgabedatei kann in einem Webbrowser geöffnet werden. Es ist keine Internetverbindung erforderlich, da keine externen Abhängigkeiten bestehen. Sie ist bequemer für die Visualisierung der Daten als der Roh-Textbericht. Darüber hinaus bietet sie Sortier- und Filterfunktionen!

Berichtsdateiformat > CSV oder XML
Verwenden Sie die Option -Report CSV oder -Report XML, um einen CSV- oder XML-Bericht zu generieren. Die Ausgabedatei soll die Auswertung der Ergebnisse durch automatisierte Reporting-Tools erleichtern.
[!NOTE] Obwohl das Ausgabeformat (noch) nicht dokumentiert ist, können Sie es leicht herausfinden, indem Sie die Struktur einer bereits generierten Datei analysieren. Sie können den
Id-Wert jeder Prüfung als eindeutigen Bezeichner verwenden.
Prüfungstypen
Prüfungstyp > Base
Prüfungen vom Typ Base werden immer ausgeführt, es sei denn, das Skript wird als Administrator ausgeführt. Sie dienen hauptsächlich der Identifizierung von Privilegieneskalations-Schwachstellen oder anderen wichtigen Problemen.
Prüfungstyp > Extended
Prüfungen vom Typ Extended können nur ausgeführt werden, wenn die Option -Extended auf der Kommandozeile angegeben wird. Sie dienen hauptsächlich der Bereitstellung zusätzlicher Informationen, die für die Exploit-Entwicklung oder Post-Exploitation nützlich sein könnten.
Prüfungstyp > Audit
Prüfungen vom Typ Audit können nur ausgeführt werden, wenn die Option -Audit auf der Kommandozeile angegeben wird. Sie dienen hauptsächlich der Bereitstellung von Informationen, die im Kontext eines Konfigurationsaudits relevant sind.
Tipps & Tricks
PowerShell-Ausführungsrichtlinie
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 (nicht signierten) Skripten, können jedoch im aktuellen Bereich wie folgt außer Kraft gesetzt 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
PowerShell Version 2
Eine gängige Methode zur Umgehung des Constrained Language Mode besteht in der Verwendung von PSv2, da dieser Schutz nicht implementiert ist. Daher fließt ein erheblicher Teil des Entwicklungsaufwands in die Aufrechterhaltung dieser Retro-Kompatibilität.
[!NOTE] Obwohl PowerShell Version 2
standardmäßig auf neueren Windows-Versionen noch aktiviert ist(PowerShell 2.0 removal from Windows), kann es ohne das .Net Framework Version 2.0 nicht ausgeführt werden, was eine manuelle Installation erfordert.
Metasploit-Timeout
Wenn Sie dieses Skript innerhalb einer Meterpreter-Sitzung ausführen, erhalten Sie wahrscheinlich einen "Timeout"-Fehler. Dies liegt daran, dass Metasploit einen Standard-Timeout-Wert von 15 Sekunden verwendet, was 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, einen anderen Timeout-Wert über die Option -t des Befehls sessions festzulegen (Dokumentation). Im folgenden Beispiel wird ein Timeout von 2 Minuten für die Sitzung mit der ID 1 festgelegt, aber Sie möchten möglicherweise einen noch höheren Wert festlegen.
msf6 exploit(multi/handler) > sessions -t 120 -i 1
[*] Starting interaction with 1...
meterpreter > powershell_execute "Invoke-PrivescCheck"
Build
Aktualisieren der Daten
Einige der Prüfungen basieren auf Online-Daten (z. B. LOL-Treiberdatenbank), aber das Skript ist für den Offline-Betrieb vorgesehen. Um dieses Problem zu lösen, sind die Daten in das Skript eingebettet und müssen daher regelmäßig aktualisiert werden. Dieser Prozess ist im offiziellen Release vollständig automatisiert, aber wenn Sie das Skript lokal erstellen möchten, können Sie dies optional manuell tun.
powershell -ep bypass ". .\build\Build.ps1; Update-LolDriverFile"
Erstellen des Skripts
Das Erstellen des Skripts ist so einfach wie das Ausführen des folgenden Befehls. Die Ausgabedatei wird im Ordner .\dist\ gespeichert.
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck"
Das Build-Skript verwendet einen Pseudozufallszahlengenerator mit einem zufällig generierten Seed, um einen Variablennamen für jedes Modul auszuwählen. Wenn Sie reproduzierbare Ergebnisse über Builds hinweg generieren möchten, können Sie den zuvor generierten Seed wiederverwenden, indem Sie die Option -NoNewSeed verwenden.
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewSeed"
Das Build-Skript verwendet AES-Verschlüsselung mit einem zufällig generierten Schlüssel, um den Inhalt jedes Moduls zu verschleiern. Wenn Sie reproduzierbare Ergebnisse über Builds hinweg generieren möchten, können Sie den zuvor generierten Schlüssel wiederverwenden, indem Sie die Option -NoNewKey verwenden.
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewKey"
Danksagungen
- Wortliste - CBHue/PyFuscation
- Liste bekannter anfälliger Treiber - https://www.loldrivers.io/