mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/135-pentesting-msrpc.md'] t
This commit is contained in:
parent
2c0f63a396
commit
bab9e26453
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user