Translated ['src/network-services-pentesting/135-pentesting-msrpc.md'] t

This commit is contained in:
Translator 2025-07-17 22:11:03 +00:00
parent 2c0f63a396
commit bab9e26453

View File

@ -61,7 +61,7 @@ Alle Optionen außer `tcp_dcerpc_auditor` sind speziell für das Targeting von M
- **Beschreibung**: Dienststeuerungsmanager und Serverdienste, verwendet zum Remote-Starten und Stoppen von Diensten und Ausführen von Befehlen.
- **IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
- **Named Pipe**: `\pipe\epmapper`
- **Beschreibung**: DCOM-Schnittstelle, verwendet für Brute-Force-Passwortknacken und Informationssammlung über WM.
- **Beschreibung**: DCOM-Schnittstelle, verwendet für Brute-Force-Passwortangriffe und Informationssammlung über WM.
### Identifizierung von IP-Adressen
@ -73,7 +73,7 @@ Diese Methode wurde verwendet, um Schnittstelleninformationen als **IPv6**-Adres
Es ist möglich, Remote-Code auf einem Rechner auszuführen, wenn die Anmeldeinformationen eines gültigen Benutzers verfügbar sind, indem [dcomexec.py](https://github.com/fortra/impacket/blob/master/examples/dcomexec.py) aus dem Impacket-Framework verwendet wird.
**Denken Sie daran, es mit den verschiedenen verfügbaren Objekten zu versuchen**
**Denken Sie daran, mit den verschiedenen verfügbaren Objekten zu versuchen**
- ShellWindows
- ShellBrowserWindow
@ -83,9 +83,65 @@ Es ist möglich, Remote-Code auf einem Rechner auszuführen, wenn die Anmeldeinf
Das **rpcdump.exe** von [rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools) kann mit diesem Port interagieren.
### Automatisierte Schnittstellenerfassung & dynamische Client-Generierung (NtObjectManager)
## Automatisiertes Fuzzing von MSRPC-Schnittstellen
PowerShell-Guru **James Forshaw** hat die meisten der Windows RPC-Interna im Open-Source-*NtObjectManager*-Modul offengelegt. Mit ihm können Sie jede RPC-Server-DLL / EXE in einen **voll funktionsfähigen Client-Stubs** in Sekunden verwandeln keine IDL, MIDL oder manuelles Unmarshalling erforderlich.
MS-RPC-Schnittstellen bieten eine große und oft undokumentierte Angriffsfläche. Das Open-Source-Modul [MS-RPC-Fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer) für PowerShell baut auf James Forshaws `NtObjectManager` auf, um *dynamisch* RPC-Client-Stubs aus den bereits in Windows-Binärdateien vorhandenen Schnittstellendaten zu erstellen. Sobald ein Stub existiert, kann das Modul jede Prozedur mit mutierten Eingaben bombardieren und das Ergebnis protokollieren, was **reproduzierbares, großflächiges Fuzzing von RPC-Endpunkten ohne das Schreiben einer einzigen Zeile IDL ermöglicht**.
### 1. Inventarisierung der Schnittstellen
```powershell
# Import the module (download / git clone first)
Import-Module .\MS-RPC-Fuzzer.psm1
# Parse a single binary
Get-RpcServerData -Target "C:\Windows\System32\efssvc.dll" -OutPath .\output
# Or crawl the whole %SystemRoot%\System32 directory
Get-RpcServerData -OutPath .\output
```
`Get-RpcServerData` extrahiert die UUID, Version, Bindungsstrings (benannte Pipe / TCP / HTTP) und **vollständige Prozedurprototypen** für jede Schnittstelle, die es findet, und speichert sie in `rpcServerData.json`.
### 2. Führen Sie den Fuzzer aus
```powershell
'.\output\rpcServerData.json' |
Invoke-RpcFuzzer -OutPath .\output `
-MinStrLen 100 -MaxStrLen 1000 `
-MinIntSize 9999 -MaxIntSize 99999
```
Relevante Optionen:
* `-MinStrLen` / `-MaxStrLen` Größenbereich für generierte Strings
* `-MinIntSize` / `-MaxIntSize` Wertebereich für mutierte Ganzzahlen (nützlich für Überlauf-Tests)
* `-Sorted` Verfahren in einer Reihenfolge ausführen, die **Parameterabhängigkeiten** berücksichtigt, sodass die Ausgaben eines Aufrufs als Eingaben des nächsten dienen können (erhöht dramatisch die erreichbaren Pfade)
Der Fuzzer implementiert 2 Strategien:
1. **Default fuzzer** zufällige primitive Werte + Standardinstanzen für komplexe Typen
2. **Sorted fuzzer** abhängigkeitssensible Anordnung (siehe `docs/Procedure dependency design.md`)
Jeder Aufruf wird atomar in `log.txt` geschrieben; nach einem Absturz **zeigt die letzte Zeile sofort das fehlerhafte Verfahren an**. Das Ergebnis jedes Aufrufs wird auch in drei JSON-Dateien kategorisiert:
* `allowed.json` Aufruf erfolgreich und Daten zurückgegeben
* `denied.json` Server antwortete mit *Access Denied*
* `error.json` jeder andere Fehler / Absturz
### 3. Visualisieren mit Neo4j
```powershell
'.\output\allowed.json' |
Import-DataToNeo4j -Neo4jHost 192.168.56.10:7474 -Neo4jUsername neo4j
```
`Import-DataToNeo4j` konvertiert die JSON-Artefakte in eine Graphstruktur, in der:
* RPC-Server, Schnittstellen und Prozeduren **Knoten** sind
* Interaktionen (`ALLOWED`, `DENIED`, `ERROR`) **Beziehungen** sind
Cypher-Abfragen können dann verwendet werden, um gefährliche Prozeduren schnell zu erkennen oder die genaue Kette von Aufrufen, die einem Absturz vorausging, erneut abzuspielen.
⚠️ Der Fuzzer ist *destruktiv*: Erwarten Sie Dienstabstürze und sogar BSODs führen Sie ihn immer in einem isolierten VM-Snapshot aus.
### Automatisierte Schnittstellenerfassung & dynamische Clientgenerierung (NtObjectManager)
PowerShell-Guru **James Forshaw** hat die meisten der Windows RPC-Interna im Open-Source-*NtObjectManager*-Modul offengelegt. Damit können Sie jede RPC-Server-DLL / EXE in einen **voll funktionsfähigen Client-Stubs** in Sekunden verwandeln keine IDL, MIDL oder manuelles Unmarshalling erforderlich.
```powershell
# Install the module once
Install-Module NtObjectManager -Force
@ -123,16 +179,14 @@ $client.EfsRpcOpenFileRaw([ref]$ctx, "\\\127.0.0.1\test", 0)
```
Authentifizierung (Kerberos / NTLM) und Verschlüsselungsstufen (`PacketIntegrity`, `PacketPrivacy`, …) können direkt über das `Connect-RpcClient` Cmdlet bereitgestellt werden ideal zum **Umgehen von Sicherheitsbeschreibungen**, die hochprivilegierte benannte Pipes schützen.
---
### Kontextbewusstes RPC-Fuzzing (MS-RPC-Fuzzer)
Statisches Schnittstellenwissen ist großartig, aber was Sie wirklich wollen, ist **coverage-guided fuzzing**, das *Kontext-Handles* und komplexe Parameterketten versteht. Das Open-Source-Projekt **MS-RPC-Fuzzer** automatisiert genau diesen Workflow:
1. Enumerieren Sie jede Schnittstelle/Prozedur, die von der Ziel-Binärdatei exportiert wird (`Get-RpcServer`).
2. Generieren Sie dynamische Clients für jede Schnittstelle (`Format-RpcClient`).
3. Randomisieren Sie Eingabeparameter (Längen von breiten Zeichenfolgen, Ganzzahlbereiche, Enums), während Sie den ursprünglichen **NDR-Typ** respektieren.
4. Verfolgen Sie *Kontext-Handles*, die von einem Aufruf zurückgegeben werden, um nachfolgende Prozeduren automatisch zu speisen.
3. Randomisieren Sie Eingabeparameter (Länge der breiten Zeichenfolgen, Ganzzahlbereiche, Enums), während Sie den ursprünglichen **NDR-Typ** respektieren.
4. Verfolgen Sie *Kontext-Handles*, die von einem Aufruf zurückgegeben werden, um Folgeprozeduren automatisch zu speisen.
5. Führen Sie hochvolumige Aufrufe gegen den gewählten Transport (ALPC, TCP, HTTP oder benannte Pipe) durch.
6. Protokollieren Sie Exit-Status / Fehler / Zeitüberschreitungen und exportieren Sie eine **Neo4j**-Importdatei, um *Schnittstelle → Prozedur → Parameter* Beziehungen und Absturzcluster zu visualisieren.
@ -143,20 +197,19 @@ Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
-Iterations 100000 `
-OutDir .\results
```
Ein einzelner Out-of-Bounds-Schreibvorgang oder eine unerwartete Ausnahme wird sofort mit der genauen opnum + fuzzed Payload, die sie ausgelöst hat, angezeigt ein perfekter Ausgangspunkt für einen stabilen Proof-of-Concept-Exploit.
Ein einzelner Out-of-Bounds-Schreibvorgang oder eine unerwartete Ausnahme wird sofort mit der genauen opnum + fuzzed Payload, die ihn ausgelöst hat, angezeigt ein perfekter Ausgangspunkt für einen stabilen Proof-of-Concept-Exploit.
> ⚠️ Viele RPC-Dienste werden in Prozessen ausgeführt, die als **NT AUTHORITY\SYSTEM** laufen. Jedes Problem mit der Speichersicherheit hier führt normalerweise zu einer lokalen Privilegieneskalation oder (wenn über SMB/135 exponiert) *Remote Code Execution*.
---
## Referenzen
- [Automating MS-RPC vulnerability research (2025, Incendium.rocks)](https://www.incendium.rocks/posts/Automating-MS-RPC-Vulnerability-Research/)
- [MS-RPC-Fuzzer context-aware RPC fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer)
- [NtObjectManager PowerShell module](https://github.com/googleprojectzero/sandbox-attacksurface-analysis-tools/tree/master/NtObjectManager)
- [https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/)
- [https://www.cyber.airbus.com/the-oxid-resolver-part-2-accessing-a-remote-object-inside-dcom/](https://www.cyber.airbus.com/the-oxid-resolver-part-2-accessing-a-remote-object-inside-dcom/)
- [https://0xffsec.com/handbook/services/msrpc/](https://0xffsec.com/handbook/services/msrpc/)
- [MS-RPC-Fuzzer (GitHub)](https://github.com/warpnet/MS-RPC-Fuzzer)
{{#include ../banners/hacktricks-training.md}}