From ce21d135b034c5b7f87774615c80c318da56fe1e Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 17 Jul 2025 22:10:10 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/135-pentesting-msrpc.md'] t --- .../135-pentesting-msrpc.md | 83 +++++++++++++++---- 1 file changed, 68 insertions(+), 15 deletions(-) diff --git a/src/network-services-pentesting/135-pentesting-msrpc.md b/src/network-services-pentesting/135-pentesting-msrpc.md index d7ffd95dc..3ac27ceda 100644 --- a/src/network-services-pentesting/135-pentesting-msrpc.md +++ b/src/network-services-pentesting/135-pentesting-msrpc.md @@ -18,7 +18,7 @@ Iniciran od strane klijentske aplikacije, MSRPC proces uključuje pozivanje loka ## **Identifikacija izloženih RPC usluga** -Izloženost RPC usluga 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 usluga, označenih **IFID** vrednostima, otkrivajući detalje usluge i komunikacione veze: +Izloženost RPC usluga 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 usluga, označenih **IFID** vrednostima, otkrivajući detalje o usluzi i komunikacionim vezama: ``` D:\rpctools> rpcdump [-p port] **IFID**: 5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc version 1.0 @@ -26,7 +26,7 @@ Annotation: Messenger Service UUID: 00000000-0000-0000-0000-000000000000 Binding: ncadg_ip_udp:[1028] ``` -Pristup RPC locator servisu je omogućen kroz specifične protokole: ncacn_ip_tcp i ncadg_ip_udp za pristup preko porta 135, ncacn_np za SMB konekcije, i ncacn_http za web-baziranu RPC komunikaciju. Sledeće komande ilustruju korišćenje Metasploit modula za audiranje i interakciju sa MSRPC servisima, prvenstveno fokusirajući se na port 135: +Pristup RPC lokator servisu je omogućen kroz specifične protokole: ncacn_ip_tcp i ncadg_ip_udp za pristup preko porta 135, ncacn_np za SMB konekcije, i ncacn_http za web-baziranu RPC komunikaciju. Sledeće komande ilustruju korišćenje Metasploit modula za audiranje i interakciju sa MSRPC servisima, prvenstveno fokusirajući se na port 135: ```bash use auxiliary/scanner/dcerpc/endpoint_mapper use auxiliary/scanner/dcerpc/hidden @@ -67,7 +67,7 @@ Sve opcije osim `tcp_dcerpc_auditor` su posebno dizajnirane za ciljanje MSRPC na Korišćenjem [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver), dolazi iz [Airbus istraživanja](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/) moguće je zloupotrebiti _**ServerAlive2**_ metodu unutar _**IOXIDResolver**_ interfejsa. -Ova metoda je korišćena za dobijanje informacija o interfejsu kao **IPv6** adresa sa HTB kutije _APT_. Pogledajte [ovde](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) za 0xdf APT izveštaj, uključuje alternativnu metodu koristeći rpcmap.py iz [Impacket](https://github.com/SecureAuthCorp/impacket/) sa _stringbinding_ (vidi iznad). +Ova metoda je korišćena za dobijanje informacija o interfejsu kao **IPv6** adresa iz HTB kutije _APT_. Pogledajte [ovde](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) za 0xdf APT izveštaj, uključuje alternativnu metodu koristeći rpcmap.py iz [Impacket](https://github.com/SecureAuthCorp/impacket/) sa _stringbinding_ (vidi iznad). ### Izvršavanje RCE sa validnim kredencijalima @@ -83,9 +83,65 @@ Moguće je izvršiti daljinski kod na mašini, ako su dostupni kredencijali vali **rpcdump.exe** iz [rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools) može interagovati sa ovim portom. +## Automatsko Fuzzing MSRPC Interfejsa + +MS-RPC interfejsi izlažu veliku i često nedokumentovanu površinu napada. Open-source [MS-RPC-Fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer) PowerShell modul se oslanja na `NtObjectManager` Jamesa Forshawa da *dinamički* kreira RPC klijentske stubove iz metapodataka interfejsa koji su već prisutni u Windows binarnim datotekama. Kada stub postoji, modul može bombardovati svaku proceduru mutiranim ulazima i zabeležiti ishod, omogućavajući **reproducibilno, masovno fuzzing RPC krajnjih tačaka bez pisanja jedne linije IDL**. + +### 1. Inventar interfejsa +```powershell +# 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 procedure prototipe** za svaki interfejs koji naiđe i sačuvati ih u `rpcServerData.json`. + +### 2. Pokrenite fuzzer +```powershell +'.\output\rpcServerData.json' | +Invoke-RpcFuzzer -OutPath .\output ` +-MinStrLen 100 -MaxStrLen 1000 ` +-MinIntSize 9999 -MaxIntSize 99999 +``` +Relevant options: + +* `-MinStrLen` / `-MaxStrLen` – opseg veličine za generisane stringove +* `-MinIntSize` / `-MaxIntSize` – opseg vrednosti za mutirane cele brojeve (korisno za testiranje prelivanja) +* `-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 dostupne puteve) + +Fuzzer implementira 2 strategije: + +1. **Default fuzzer** – nasumične primitivne vrednosti + podrazumevane instance za složene tipove +2. **Sorted fuzzer** – redosled svestan zavisnosti (vidi `docs/Procedure dependency design.md`) + +Svaki poziv se zapisuje atomarno u `log.txt`; nakon pada, **poslednja linija odmah govori koji je postupak izazvao problem**. Rezultat svakog poziva je takođe kategorizovan u tri JSON datoteke: + +* `allowed.json` – poziv je uspeo i vratio podatke +* `denied.json` – server je odgovorio sa *Access Denied* +* `error.json` – bilo koja druga greška / pad + +### 3. Visualise with Neo4j +```powershell +'.\output\allowed.json' | +Import-DataToNeo4j -Neo4jHost 192.168.56.10:7474 -Neo4jUsername neo4j +``` +`Import-DataToNeo4j` konvertuje JSON artefakte u graf strukturu gde: + +* RPC serveri, interfejsi i procedure su **čvorovi** +* Interakcije (`ALLOWED`, `DENIED`, `ERROR`) su **odnosi** + +Cypher upiti se mogu koristiti za brzo prepoznavanje opasnih procedura ili za ponavljanje tačnog lanca poziva koji je prethodio padu. + +⚠️ Fuzzer je *destruktivan*: očekujte padove usluga i čak BSOD-ove – uvek ga pokrećite u izolovanom VM snimku. + + ### Automatizovana enumeracija interfejsa i dinamička generacija klijenta (NtObjectManager) -PowerShell guru **James Forshaw** je izložio većinu Windows RPC internih funkcija unutar open-source *NtObjectManager* modula. Koristeći ga možete pretvoriti bilo koji RPC server DLL / EXE u **klijent stub** sa punim funkcijama za nekoliko sekundi – bez IDL, MIDL ili ručnog unmarshalling-a. +PowerShell guru **James Forshaw** je otkrio većinu Windows RPC internih funkcija unutar open-source *NtObjectManager* modula. Koristeći ga, možete pretvoriti bilo koju RPC server DLL / EXE u **klijent stub** sa punim funkcijama za nekoliko sekundi – bez IDL, MIDL ili ručnog unmarshalling-a. ```powershell # Install the module once Install-Module NtObjectManager -Force @@ -121,22 +177,20 @@ Connect-RpcClient $client -stringbinding 'ncacn_np:127.0.0.1[\\pipe\\efsrpc]' ` $ctx = New-Object Marshal.NdrContextHandle $client.EfsRpcOpenFileRaw([ref]$ctx, "\\\127.0.0.1\test", 0) ``` -Autentifikacija (Kerberos / NTLM) i nivoi enkripcije (`PacketIntegrity`, `PacketPrivacy`, …) mogu se direktno obezbediti putem `Connect-RpcClient` cmdleta – idealno za **obići sigurnosne deskriptore** koji štite visoko privilegovane imenovane cevi. +Autentifikacija (Kerberos / NTLM) i nivoi enkripcije (`PacketIntegrity`, `PacketPrivacy`, …) mogu se direktno obezbediti putem `Connect-RpcClient` cmdleta – idealno za **obići sigurnosne deskriptore** koji štite cevi sa visokim privilegijama. ---- +### Fuzzing RPC-a sa svesti o kontekstu (MS-RPC-Fuzzer) -### Fuzzing sa svesti o kontekstu RPC (MS-RPC-Fuzzer) - -Staticko znanje o interfejsu je odlično, ali ono što zaista želite je **fuzzing vođen pokrivenošću** koji razume *kontekstualne handle-ove* i složene lance parametara. Open-source projekat **MS-RPC-Fuzzer** automatski obezbeđuje upravo taj radni tok: +Staticko poznavanje interfejsa je odlično, ali ono što zaista želite je **fuzzing vođen pokrivenošću** koji razume *kontekstualne handle-ove* i složene lance parametara. Open-source projekat **MS-RPC-Fuzzer** automatski obezbeđuje upravo taj radni tok: 1. Enumerisati svaki interfejs/proceduru koju izvozi ciljni binarni fajl (`Get-RpcServer`). 2. Generisati dinamičke klijente za svaki interfejs (`Format-RpcClient`). 3. Randomizovati ulazne parametre (dužina širokih stringova, opsezi celih brojeva, enumeracije) uz poštovanje originalnog **NDR tipa**. -4. Pratiti *kontekstualne handle-ove* koje vraća jedan poziv kako bi se automatski hranili sledeći postupci. -5. Izvršiti pozive velike zapremine protiv odabranog transporta (ALPC, TCP, HTTP ili imenovana cev). +4. Pratiti *kontekstualne handle-ove* koje vraća jedan poziv kako bi se automatski hranili prateći postupci. +5. Izvršiti pozive velikog obima protiv odabranog transporta (ALPC, TCP, HTTP ili imenovana cev). 6. Zapisati izlazne statuse / greške / vremenske limite i izvesti **Neo4j** import fajl za vizualizaciju *interfejs → procedura → parametar* odnosa i klastera rušenja. -Primer izvršavanja (cilj imenovane cevi): +Primer izvršavanja (cilj sa imenovanom cevi): ```powershell Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM ` -MinLen 1 -MaxLen 0x400 ` @@ -145,18 +199,17 @@ Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM ` ``` Jedno pisanje van granica ili neočekivana izuzetak će odmah biti prikazani sa tačnim opnum + fuzzed payload koji ga je izazvao – savršena polazna tačka za stabilan proof-of-concept exploit. -> ⚠️ Mnogi RPC servisi se izvršavaju u procesima koji rade kao **NT AUTHORITY\SYSTEM**. Svaki problem sa bezbednošću memorije ovde obično se prevodi u lokalno eskalaciju privilegija ili (kada je izložen preko SMB/135) *daljinsko izvršavanje koda*. +> ⚠️ Mnogi RPC servisi se izvršavaju u procesima koji rade kao **NT AUTHORITY\SYSTEM**. Svaki problem sa bezbednošću memorije ovde obično se prevodi u lokalno eskaliranje privilegija ili (kada je izložen preko SMB/135) *daljinsko izvršavanje koda*. ---- ## Reference - [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/) +- [MS-RPC-Fuzzer (GitHub)](https://github.com/warpnet/MS-RPC-Fuzzer) {{#include ../banners/hacktricks-training.md}}