diff --git a/src/network-services-pentesting/135-pentesting-msrpc.md b/src/network-services-pentesting/135-pentesting-msrpc.md index d3f1540e8..a8eb406e0 100644 --- a/src/network-services-pentesting/135-pentesting-msrpc.md +++ b/src/network-services-pentesting/135-pentesting-msrpc.md @@ -2,11 +2,11 @@ {{#include ../banners/hacktricks-training.md}} -## Βασικές Πληροφορίες +## Basic Information -Το πρωτόκολλο Microsoft Remote Procedure Call (MSRPC), ένα μοντέλο πελάτη-διακομιστή που επιτρέπει σε ένα πρόγραμμα να ζητήσει μια υπηρεσία από ένα πρόγραμμα που βρίσκεται σε άλλο υπολογιστή χωρίς να κατανοεί τις λεπτομέρειες του δικτύου, προήλθε αρχικά από λογισμικό ανοιχτού κώδικα και αργότερα αναπτύχθηκε και κατοχυρώθηκε με πνευματικά δικαιώματα από τη Microsoft. +Το πρωτόκολλο Microsoft Remote Procedure Call (MSRPC), ένα μοντέλο client-server που επιτρέπει σε ένα πρόγραμμα να ζητήσει μια υπηρεσία από ένα πρόγραμμα που βρίσκεται σε άλλο υπολογιστή χωρίς να κατανοεί τις λεπτομέρειες του δικτύου, προήλθε αρχικά από λογισμικό ανοιχτού κώδικα και αργότερα αναπτύχθηκε και κατοχυρώθηκε με πνευματικά δικαιώματα από τη Microsoft. -Ο χάρτης σημείων τερματισμού RPC μπορεί να προσπελαστεί μέσω TCP και UDP θύρας 135, SMB σε TCP 139 και 445 (με μια κενή ή αυθεντικοποιημένη συνεδρία), και ως υπηρεσία ιστού σε TCP θύρα 593. +Ο χάρτης σημείων RPC μπορεί να προσπελαστεί μέσω TCP και UDP θύρας 135, SMB σε TCP 139 και 445 (με μια κενή ή αυθεντικοποιημένη συνεδρία), και ως υπηρεσία ιστού σε TCP θύρα 593. ``` 135/tcp open msrpc Microsoft Windows RPC ``` @@ -34,7 +34,7 @@ use auxiliary/scanner/dcerpc/management use auxiliary/scanner/dcerpc/tcp_dcerpc_auditor rpcdump.py -p 135 ``` -Όλες οι επιλογές εκτός από `tcp_dcerpc_auditor` έχουν σχεδιαστεί ειδικά για στοχοποίηση του MSRPC στην πόρτα 135. +Όλες οι επιλογές εκτός από `tcp_dcerpc_auditor` έχουν σχεδιαστεί ειδικά για να στοχεύουν το MSRPC στην πόρτα 135. #### Σημαντικά διεπαφές RPC @@ -46,7 +46,7 @@ rpcdump.py -p 135 - **Περιγραφή**: Διεπαφή Υπηρεσιών Καταλόγου LSA (DS), χρησιμοποιείται για την καταμέτρηση τομέων και σχέσεων εμπιστοσύνης. - **IFID**: 12345778-1234-abcd-ef00-0123456789ac - **Named Pipe**: `\pipe\samr` -- **Περιγραφή**: Διεπαφή LSA SAMR, χρησιμοποιείται για την πρόσβαση σε δημόσια στοιχεία της βάσης δεδομένων SAM (π.χ., ονόματα χρηστών) και για την παραβίαση κωδικών πρόσβασης χρηστών ανεξαρτήτως πολιτικής κλειδώματος λογαριασμού. +- **Περιγραφή**: Διεπαφή LSA SAMR, χρησιμοποιείται για την πρόσβαση σε δημόσια στοιχεία βάσης δεδομένων SAM (π.χ. ονόματα χρηστών) και την εκτέλεση brute-force στους κωδικούς πρόσβασης χρηστών ανεξαρτήτως πολιτικής κλειδώματος λογαριασμού. - **IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b - **Named Pipe**: `\pipe\atsvc` - **Περιγραφή**: Προγραμματιστής εργασιών, χρησιμοποιείται για την απομακρυσμένη εκτέλεση εντολών. @@ -55,13 +55,13 @@ rpcdump.py -p 135 - **Περιγραφή**: Υπηρεσία απομακρυσμένου μητρώου, χρησιμοποιείται για την πρόσβαση και τροποποίηση του μητρώου συστήματος. - **IFID**: 367abb81-9844-35f1-ad32-98f038001003 - **Named Pipe**: `\pipe\svcctl` -- **Περιγραφή**: Διαχειριστής ελέγχου υπηρεσιών και υπηρεσίες διακομιστή, χρησιμοποιούνται για την απομακρυσμένη εκκίνηση και διακοπή υπηρεσιών και την εκτέλεση εντολών. +- **Περιγραφή**: Διαχειριστής ελέγχου υπηρεσιών και υπηρεσίες διακομιστή, χρησιμοποιείται για την απομακρυσμένη εκκίνηση και διακοπή υπηρεσιών και την εκτέλεση εντολών. - **IFID**: 4b324fc8-1670-01d3-1278-5a47bf6ee188 - **Named Pipe**: `\pipe\srvsvc` -- **Περιγραφή**: Διαχειριστής ελέγχου υπηρεσιών και υπηρεσίες διακομιστή, χρησιμοποιούνται για την απομακρυσμένη εκκίνηση και διακοπή υπηρεσιών και την εκτέλεση εντολών. +- **Περιγραφή**: Διαχειριστής ελέγχου υπηρεσιών και υπηρεσίες διακομιστή, χρησιμοποιείται για την απομακρυσμένη εκκίνηση και διακοπή υπηρεσιών και την εκτέλεση εντολών. - **IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57 - **Named Pipe**: `\pipe\epmapper` -- **Περιγραφή**: Διεπαφή DCOM, χρησιμοποιείται για την παραβίαση κωδικών πρόσβασης και τη συλλογή πληροφοριών μέσω WM. +- **Περιγραφή**: Διεπαφή DCOM, χρησιμοποιείται για την εκτέλεση brute-force στους κωδικούς πρόσβασης και τη συλλογή πληροφοριών μέσω WM. ### Αναγνώριση διευθύνσεων IP @@ -83,8 +83,78 @@ rpcdump.py -p 135 Το **rpcdump.exe** από [rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools) μπορεί να αλληλεπιδράσει με αυτή την πόρτα. +### Αυτοματοποιημένη Καταμέτρηση Διεπαφών & Δυναμική Δημιουργία Πελάτη (NtObjectManager) + +Ο ειδικός PowerShell **James Forshaw** αποκάλυψε τα περισσότερα από τα εσωτερικά RPC των Windows μέσα στο ανοιχτού κώδικα *NtObjectManager* module. Χρησιμοποιώντας το μπορείτε να μετατρέψετε οποιοδήποτε RPC server DLL / EXE σε ένα **πλήρως λειτουργικό client stub** σε δευτερόλεπτα – χωρίς IDL, MIDL ή χειροκίνητο unmarshalling. +```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 * +``` +Τυπική έξοδος εκθέτει τους τύπους παραμέτρων ακριβώς όπως εμφανίζονται στο **MIDL** (π.χ. `FC_C_WSTRING`, `FC_LONG`, `FC_BIND_CONTEXT`). + +Μόλις γνωρίζετε τη διεπαφή μπορείτε να **δημιουργήσετε έναν έτοιμο προς μεταγλώττιση πελάτη C#**: +```powershell +# Reverse the MS-EFSR (EfsRpc*) interface into C# +Format-RpcClient $rpcinterfaces[0] -Namespace MS_EFSR -OutputPath .\MS_EFSR.cs +``` +Μέσα στο παραγόμενο stub θα βρείτε μεθόδους όπως: +```csharp +public int EfsRpcOpenFileRaw(out Marshal.NdrContextHandle ctx, string FileName, int Flags) { +// marshals parameters & calls opnum 0 +} +``` +Ο βοηθός PowerShell `Get-RpcClient` μπορεί να δημιουργήσει ένα **διαδραστικό αντικείμενο πελάτη** ώστε να μπορείτε να καλέσετε τη διαδικασία αμέσως: +```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) +``` +Authentication (Kerberos / NTLM) και επίπεδα κρυπτογράφησης (`PacketIntegrity`, `PacketPrivacy`, …) μπορούν να παρέχονται απευθείας μέσω του `Connect-RpcClient` cmdlet – ιδανικό για **παράκαμψη των Security Descriptors** που προστατεύουν τις ονομασμένες σωλήνες υψηλής προνομιακής πρόσβασης. + +--- + +### Context-Aware RPC Fuzzing (MS-RPC-Fuzzer) + +Η στατική γνώση διεπαφής είναι καλή, αλλά αυτό που πραγματικά θέλετε είναι **fuzzing καθοδηγούμενο από κάλυψη** που κατανοεί *context handles* και σύνθετες αλυσίδες παραμέτρων. Το ανοιχτού κώδικα **MS-RPC-Fuzzer** έργο αυτοματοποιεί ακριβώς αυτή τη ροή εργασίας: + +1. Καταγράψτε κάθε διεπαφή/διαδικασία που εξάγεται από το στοχοθετημένο δυαδικό (`Get-RpcServer`). +2. Δημιουργήστε δυναμικούς πελάτες για κάθε διεπαφή (`Format-RpcClient`). +3. Τυχαία παραμετροποιήστε τις εισόδους (μήκος ευρέων συμβολοσειρών, εύρη ακέραιων, enums) ενώ σέβεστε τον αρχικό **τύπο NDR**. +4. Παρακολουθήστε τα *context handles* που επιστρέφονται από μία κλήση για να τροφοδοτήσετε αυτόματα τις επόμενες διαδικασίες. +5. Εκτελέστε κλήσεις υψηλού όγκου κατά της επιλεγμένης μεταφοράς (ALPC, TCP, HTTP ή ονομασμένη σωλήνα). +6. Καταγράψτε τις καταστάσεις εξόδου / σφαλμάτων / χρονικών ορίων και εξάγετε ένα αρχείο εισαγωγής **Neo4j** για να οπτικοποιήσετε τις σχέσεις *διεπαφή → διαδικασία → παράμετρος* και τις ομάδες κρασάρισμα. + +Παράδειγμα εκτέλεσης (στόχος ονομασμένης σωλήνας): +```powershell +Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM ` +-MinLen 1 -MaxLen 0x400 ` +-Iterations 100000 ` +-OutDir .\results +``` +Μια μοναδική εγγραφή εκτός ορίων ή απροσδόκητη εξαίρεση θα εμφανιστεί αμέσως με το ακριβές opnum + το fuzzed payload που την προκάλεσε – τέλεια αφετηρία για μια σταθερή απόδειξη έννοιας εκμετάλλευσης. + +> ⚠️ Πολλές υπηρεσίες RPC εκτελούνται σε διαδικασίες που τρέχουν ως **NT AUTHORITY\SYSTEM**. Οποιοδήποτε πρόβλημα ασφάλειας μνήμης εδώ συνήθως μεταφράζεται σε τοπική κλιμάκωση προνομίων ή (όταν εκτίθεται μέσω SMB/135) *εκτέλεση απομακρυσμένου κώδικα*. + +--- + ## Αναφορές +- [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/)