diff --git a/src/network-services-pentesting/135-pentesting-msrpc.md b/src/network-services-pentesting/135-pentesting-msrpc.md index 6d0640087..7c6dcaf95 100644 --- a/src/network-services-pentesting/135-pentesting-msrpc.md +++ b/src/network-services-pentesting/135-pentesting-msrpc.md @@ -18,7 +18,7 @@ Initiiert durch die Client-Anwendung, umfasst der MSRPC-Prozess den Aufruf einer ## **Identifizierung exponierter RPC-Dienste** -Die Exposition von RPC-Diensten über TCP, UDP, HTTP und SMB kann durch Abfragen des RPC-Standortdienstes und einzelner Endpunkte bestimmt werden. Tools wie rpcdump erleichtern die Identifizierung einzigartiger RPC-Dienste, die durch **IFID**-Werte gekennzeichnet sind und Details zu den Diensten und Kommunikationsbindungen offenbaren: +Die Exposition von RPC-Diensten über TCP, UDP, HTTP und SMB kann durch Abfragen des RPC-Lokalisierungsdienstes und einzelner Endpunkte bestimmt werden. Tools wie rpcdump erleichtern die Identifizierung einzigartiger RPC-Dienste, die durch **IFID**-Werte gekennzeichnet sind und Dienstdetails sowie Kommunikationsbindungen offenbaren: ``` D:\rpctools> rpcdump [-p port] **IFID**: 5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc version 1.0 @@ -39,39 +39,39 @@ Alle Optionen außer `tcp_dcerpc_auditor` sind speziell für das Targeting von M #### Bemerkenswerte RPC-Schnittstellen - **IFID**: 12345778-1234-abcd-ef00-0123456789ab -- **Benannte Pipe**: `\pipe\lsarpc` +- **Named Pipe**: `\pipe\lsarpc` - **Beschreibung**: LSA-Schnittstelle, verwendet zur Auflistung von Benutzern. - **IFID**: 3919286a-b10c-11d0-9ba8-00c04fd92ef5 -- **Benannte Pipe**: `\pipe\lsarpc` -- **Beschreibung**: LSA-Verzeichnisdienste (DS) Schnittstelle, verwendet zur Auflistung von Domänen und Vertrauensbeziehungen. +- **Named Pipe**: `\pipe\lsarpc` +- **Beschreibung**: LSA Directory Services (DS) Schnittstelle, verwendet zur Auflistung von Domänen und Vertrauensbeziehungen. - **IFID**: 12345778-1234-abcd-ef00-0123456789ac -- **Benannte Pipe**: `\pipe\samr` +- **Named Pipe**: `\pipe\samr` - **Beschreibung**: LSA SAMR-Schnittstelle, verwendet zum Zugriff auf öffentliche SAM-Datenbankelemente (z. B. Benutzernamen) und zum Brute-Forcen von Benutzerpasswörtern unabhängig von der Kontosperrpolitik. - **IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b -- **Benannte Pipe**: `\pipe\atsvc` +- **Named Pipe**: `\pipe\atsvc` - **Beschreibung**: Aufgabenplaner, verwendet zum Remote-Ausführen von Befehlen. - **IFID**: 338cd001-2244-31f1-aaaa-900038001003 -- **Benannte Pipe**: `\pipe\winreg` -- **Beschreibung**: Remote-Registry-Dienst, verwendet zum Zugriff auf und zur Modifikation der Systemregistrierung. +- **Named Pipe**: `\pipe\winreg` +- **Beschreibung**: Remote-Registry-Dienst, verwendet zum Zugreifen auf und Ändern der Systemregistrierung. - **IFID**: 367abb81-9844-35f1-ad32-98f038001003 -- **Benannte Pipe**: `\pipe\svcctl` -- **Beschreibung**: Dienststeuerungsmanager und Serverdienste, verwendet zum Remote-Starten und Stoppen von Diensten und zum Ausführen von Befehlen. +- **Named Pipe**: `\pipe\svcctl` +- **Beschreibung**: Dienststeuerungsmanager und Serverdienste, verwendet zum Remote-Starten und Stoppen von Diensten und Ausführen von Befehlen. - **IFID**: 4b324fc8-1670-01d3-1278-5a47bf6ee188 -- **Benannte Pipe**: `\pipe\srvsvc` -- **Beschreibung**: Dienststeuerungsmanager und Serverdienste, verwendet zum Remote-Starten und Stoppen von Diensten und zum Ausführen von Befehlen. +- **Named Pipe**: `\pipe\srvsvc` +- **Beschreibung**: Dienststeuerungsmanager und Serverdienste, verwendet zum Remote-Starten und Stoppen von Diensten und Ausführen von Befehlen. - **IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57 -- **Benannte Pipe**: `\pipe\epmapper` +- **Named Pipe**: `\pipe\epmapper` - **Beschreibung**: DCOM-Schnittstelle, verwendet für Brute-Force-Passwortknacken und Informationssammlung über WM. ### Identifizierung von IP-Adressen Mit [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver), stammt von [Airbus research](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/), ist es möglich, die _**ServerAlive2**_-Methode innerhalb der _**IOXIDResolver**_-Schnittstelle auszunutzen. -Diese Methode wurde verwendet, um Schnittstelleninformationen wie **IPv6**-Adressen von der HTB-Box _APT_ zu erhalten. Siehe [hier](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) für den 0xdf APT-Bericht, der eine alternative Methode mit rpcmap.py von [Impacket](https://github.com/SecureAuthCorp/impacket/) mit _stringbinding_ (siehe oben) enthält. +Diese Methode wurde verwendet, um Schnittstelleninformationen als **IPv6**-Adresse von der HTB-Box _APT_ zu erhalten. Siehe [hier](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) für den 0xdf APT-Bericht, der eine alternative Methode mit rpcmap.py von [Impacket](https://github.com/SecureAuthCorp/impacket/) mit _stringbinding_ (siehe oben) enthält. ### Ausführen eines RCE mit gültigen Anmeldeinformationen -Es ist möglich, Remote-Code auf einer Maschine 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. +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** @@ -83,8 +83,78 @@ Es ist möglich, Remote-Code auf einer Maschine auszuführen, wenn die Anmeldein 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) + +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. +```powershell +# Install the module once +Install-Module NtObjectManager -Force + +# Parse every RPC interface exported by the target binary +$rpcinterfaces = Get-RpcServer "C:\Windows\System32\efssvc.dll" +$rpcinterfaces | Format-Table Name,Uuid,Version,Procedures + +# Inspect a single procedure (opnum 0) +$rpcinterfaces[0].Procedures[0] | Format-List * +``` +Typische Ausgaben zeigen die Parametertypen genau so, wie sie in **MIDL** erscheinen (z.B. `FC_C_WSTRING`, `FC_LONG`, `FC_BIND_CONTEXT`). + +Sobald Sie die Schnittstelle kennen, können Sie **einen bereit zum Kompilieren C#-Client generieren**: +```powershell +# Reverse the MS-EFSR (EfsRpc*) interface into C# +Format-RpcClient $rpcinterfaces[0] -Namespace MS_EFSR -OutputPath .\MS_EFSR.cs +``` +Innerhalb des erzeugten Stubs finden Sie Methoden wie: +```csharp +public int EfsRpcOpenFileRaw(out Marshal.NdrContextHandle ctx, string FileName, int Flags) { +// marshals parameters & calls opnum 0 +} +``` +Der PowerShell-Helfer `Get-RpcClient` kann ein **interaktives Client-Objekt** erstellen, sodass Sie das Verfahren sofort aufrufen können: +```powershell +$client = Get-RpcClient $rpcinterfaces[0] +Connect-RpcClient $client -stringbinding 'ncacn_np:127.0.0.1[\\pipe\\efsrpc]' ` +-AuthenticationLevel PacketPrivacy ` +-AuthenticationType WinNT # NTLM auth + +# Invoke the procedure → returns an authenticated context handle +$ctx = New-Object Marshal.NdrContextHandle +$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. +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. + +Beispielausführung (benannte Pipe-Ziel): +```powershell +Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM ` +-MinLen 1 -MaxLen 0x400 ` +-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. + +> ⚠️ 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/)