Zurück zu den Updates
New releaseSep 22, 2026

PrivescCheck v2026.09.21-1

Skript zur Aufzählung von Privilegieneskalation für Windows

Teilen

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.

Screenshot eines von PrivescCheck generierten Roh-Textberichts

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!

Screenshot eines von PrivescCheck generierten HTML-Berichts

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

Kategorien