
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 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 übersprungen, um die Erzeugung falscher Ergebnisse zu vermeiden.
## Schnellstart
Laden Sie das Skript hier herunter: [PrivescCheck.ps1](https://github.com/itm4n/PrivescCheck/releases/latest/download/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
```bat
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Report TXT,HTML"
```
### Anwendungsfall 2: Umfangreiche Bewertung
```bat
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report TXT,HTML"
```
### Anwendungsfall 3: Umfassende Bewertung
```bat
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report ALL"
```
## Detaillierte Verwendung
```txt
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 für den Ausgabebericht 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. Normalerweise 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 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` 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
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 Kontext eines Konfigurationsaudits relevant sind.
## Tipps & Tricks
### PowerShell-Ausführungsrichtlinie
Standardmäßig ist die PowerShell-[Ausführungsrichtlinie](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies) 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.
```powershell
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.
```powershell
Get-Content .\PrivescCheck.ps1 | Out-String | Invoke-Expression
```
### PowerShell Version 2
Eine gängige Methode zur Umgehung des [Constrained Language Mode](https://devblogs.microsoft.com/powershell/powershell-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](https://support.microsoft.com/en-us/topic/powershell-2-0-removal-from-windows-fe6d1edc-2ed2-4c33-b297-afe82a64200a)), 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.
```console
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](https://www.offensive-security.com/metasploit-unleashed/msfconsole-commands/)). 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.
```console
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 die Offline-Nutzung 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.
```bat
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.
```bat
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.
```bat
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewSeed"
```
## Credits
- Wortliste - [CBHue/PyFuscation](https://github.com/CBHue/PyFuscation)
- Liste bekannter anfälliger Treiber - [https://www.loldrivers.io/](https://www.loldrivers.io/)