Translated ['src/network-services-pentesting/135-pentesting-msrpc.md'] t

This commit is contained in:
Translator 2025-07-17 22:10:10 +00:00
parent d972aceff2
commit ce21d135b0

View File

@ -18,7 +18,7 @@ Iniciran od strane klijentske aplikacije, MSRPC proces uključuje pozivanje loka
## **Identifikacija izloženih RPC usluga** ## **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] <IP> D:\rpctools> rpcdump [-p port] <IP>
**IFID**: 5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc version 1.0 **IFID**: 5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc version 1.0
@ -26,7 +26,7 @@ Annotation: Messenger Service
UUID: 00000000-0000-0000-0000-000000000000 UUID: 00000000-0000-0000-0000-000000000000
Binding: ncadg_ip_udp:<IP>[1028] Binding: ncadg_ip_udp:<IP>[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 ```bash
use auxiliary/scanner/dcerpc/endpoint_mapper use auxiliary/scanner/dcerpc/endpoint_mapper
use auxiliary/scanner/dcerpc/hidden 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. 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 ### 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. **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) ### 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 ```powershell
# Install the module once # Install the module once
Install-Module NtObjectManager -Force 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 $ctx = New-Object Marshal.NdrContextHandle
$client.EfsRpcOpenFileRaw([ref]$ctx, "\\\127.0.0.1\test", 0) $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 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:
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:
1. Enumerisati svaki interfejs/proceduru koju izvozi ciljni binarni fajl (`Get-RpcServer`). 1. Enumerisati svaki interfejs/proceduru koju izvozi ciljni binarni fajl (`Get-RpcServer`).
2. Generisati dinamičke klijente za svaki interfejs (`Format-RpcClient`). 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**. 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. 4. Pratiti *kontekstualne handle-ove* koje vraća jedan poziv kako bi se automatski hranili prateći postupci.
5. Izvršiti pozive velike zapremine protiv odabranog transporta (ALPC, TCP, HTTP ili imenovana cev). 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. 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 ```powershell
Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM ` Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
-MinLen 1 -MaxLen 0x400 ` -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. 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 ## Reference
- [Automating MS-RPC vulnerability research (2025, Incendium.rocks)](https://www.incendium.rocks/posts/Automating-MS-RPC-Vulnerability-Research/) - [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) - [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) - [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-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://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/) - [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}} {{#include ../banners/hacktricks-training.md}}