Zurück zu den Updates
New releaseJul 21, 2026

PrivescCheck v2026.07.15-1

Skript zur Aufzählung von Privilegieneskalation für Windows

Teilen

PrivescCheck

Schnelles Identifizieren von häufigen Windows-Schwachstellen 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 bei der Verwendung dieses Tools 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.

🚀 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 (Pentest): Nur grundlegende Prüfungen ausführen

Gibt es einen offensichtlichen Weg, um lokal Privilegien zu erweitern?

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck"

Anwendungsfall 2 (Forschung): Erweiterte Prüfungen ausführen + menschenlesbare Berichte schreiben

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"

Anwendungsfall 3 (Audit): Alle Prüfungen ausführen + alle Berichte schreiben

Gibt es Konfigurationsprobleme, die nicht von gängigen Sicherheitsstandards abgedeckt werden?

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML,CSV,XML"

📖 Detaillierte Verwendung

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 Ausgabeb erichtsdatei(en) angeben. Wenn nicht gesetzt,
        lautet 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 Endpoint-Protection-
        Lösung auslösen. Mit Vorsicht verwenden.

    -Silent
        Terminalausgabe unterdrücken. Dies kann nützlich sein, wenn das Skript
        als Teil einer Batch-Datei ausgeführt werden soll, z. B. in einer
        geplanten Aufgabe.

    -Force
        Ausführung erzwingen und Warnungen ignorieren. Normalerweise stoppt das
        Skript, wenn es mit Administratorrechten ausgeführt wird. Verwenden Sie
        diese Option, um es trotzdem auszuführen.

Berichtsformat > TXT (-Format TXT)

Verwenden Sie die Option -Report <PREFIX> (mit -Format TXT), um anzugeben, dass Sie einen Rohtextbericht erzeugen möchten. Die Ausgabe ähnelt dem, was Sie im Terminal sehen würden, außer dass sie nur ASCII-Zeichen enthält, für eine bessere (Retro-)Kompatibilität mit allen Texteditoren.

Screenshot eines von PrivescCheck erzeugten Rohtextberichts

Berichtsformat > HTML (-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 Visualisierung der Daten bequemer als der Rohtextbericht. Darüber hinaus bietet sie Sortier- und Filterfunktionen!

Screenshot eines von PrivescCheck erzeugten HTML-Berichts

Berichtsformat > CSV (-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 soll das Parsen der Ergebnisse durch automatisierte Berichtswerkzeuge erleichtern.

[!NOTE] Obwohl das Ausgabeformat (noch) nicht dokumentiert ist, können Sie es leicht herausfinden, indem Sie die Struktur einer bereits erzeugten Datei analysieren. Sie können den Id-Wert jeder Prüfung verwenden, um sie eindeutig zu identifizieren.

Prüfungstyp > Basis

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 Schwachstellen zur Privilegienerweiterung oder anderen wichtigen Problemen.

Prüfungstyp > Erweitert (-Extended)

Prüfungen vom Typ Extended können nur ausgeführt werden, wenn die Option -Extended in der Befehlszeile 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 (-Audit)

Prüfungen vom Typ Audit können nur ausgeführt werden, wenn die Option -Audit in der Befehlszeile angegeben wird. Sie dienen hauptsächlich der Bereitstellung von Informationen, die im Rahmen einer Konfigurationsprüfung 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 (unsignierten) Skripten, können jedoch im aktuellen Bereich wie folgt überschrieben werden.

Set-ExecutionPolicy Bypass -Scope Process -Force
. .\PrivescCheck.ps1

Dieser Trick funktioniert jedoch nicht, wenn die Ausführungsrichtlinie über 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 diesen Schutz nicht implementiert. 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 nicht ohne das .Net-Framework Version 2.0 ausgeführt werden, das 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, 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, einen anderen Timeout mit der 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

Daten aktualisieren

Einige der Prüfungen basieren auf Online-Daten (z. B. LOL-Treiberdatenbank), aber das Skript ist für die Offline-Arbeit gedacht. 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"

Skript erstellen

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 erzielen möchten, können Sie den zuvor generierten Seed mit der Option -NoNewSeed wiederverwenden.

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 erzielen möchten, können Sie den zuvor generierten Schlüssel mit der Option -NoNewKey wiederverwenden.

powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewKey"

📑 Danksagungen

Kategorien