mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/135-pentesting-msrpc.md'] t
This commit is contained in:
parent
4d025e6f60
commit
004e78ed09
@ -6,7 +6,7 @@
|
||||
|
||||
Protokół Microsoft Remote Procedure Call (MSRPC), model klient-serwer umożliwiający programowi żądanie usługi od programu znajdującego się na innym komputerze bez zrozumienia specyfiki sieci, początkowo pochodził z oprogramowania open-source, a później został opracowany i objęty prawem autorskim przez Microsoft.
|
||||
|
||||
Mapper punktów końcowych RPC można uzyskać za pomocą portu TCP i UDP 135, SMB na TCP 139 i 445 (z sesją null lub uwierzytelnioną) oraz jako usługę internetową na porcie TCP 593.
|
||||
Mapper punktów końcowych RPC można uzyskać za pomocą portu TCP i UDP 135, SMB na TCP 139 i 445 (z sesją null lub uwierzytelnioną) oraz jako usługa internetowa na porcie TCP 593.
|
||||
```
|
||||
135/tcp open msrpc Microsoft Windows RPC
|
||||
```
|
||||
@ -18,7 +18,7 @@ Inicjowany przez aplikację kliencką, proces MSRPC polega na wywołaniu lokalne
|
||||
|
||||
## **Identyfikacja wystawionych usług RPC**
|
||||
|
||||
Wystawienie usług RPC przez TCP, UDP, HTTP i SMB można określić, zapytując usługę lokalizatora RPC oraz poszczególne punkty końcowe. Narzędzia takie jak rpcdump ułatwiają identyfikację unikalnych usług RPC, oznaczonych wartościami **IFID**, ujawniając szczegóły usługi i powiązania komunikacyjne:
|
||||
Ekspozycję usług RPC przez TCP, UDP, HTTP i SMB można określić, zapytując usługę lokalizatora RPC oraz poszczególne punkty końcowe. Narzędzia takie jak rpcdump ułatwiają identyfikację unikalnych usług RPC, oznaczonych wartościami **IFID**, ujawniając szczegóły usługi i powiązania komunikacyjne:
|
||||
```
|
||||
D:\rpctools> rpcdump [-p port] <IP>
|
||||
**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:<IP>[1028]
|
||||
```
|
||||
Dostęp do usługi lokalizatora RPC jest włączony przez określone protokoły: ncacn_ip_tcp i ncadg_ip_udp do dostępu przez port 135, ncacn_np dla połączeń SMB oraz ncacn_http dla komunikacji RPC opartej na sieci web. Poniższe polecenia ilustrują wykorzystanie modułów Metasploit do audytowania i interakcji z usługami MSRPC, koncentrując się głównie na porcie 135:
|
||||
Dostęp do usługi lokalizatora RPC jest włączony za pomocą określonych protokołów: ncacn_ip_tcp i ncadg_ip_udp do dostępu przez port 135, ncacn_np dla połączeń SMB oraz ncacn_http dla komunikacji RPC opartej na sieci web. Poniższe polecenia ilustrują wykorzystanie modułów Metasploit do audytowania i interakcji z usługami MSRPC, koncentrując się głównie na porcie 135:
|
||||
```bash
|
||||
use auxiliary/scanner/dcerpc/endpoint_mapper
|
||||
use auxiliary/scanner/dcerpc/hidden
|
||||
@ -52,7 +52,7 @@ Wszystkie opcje z wyjątkiem `tcp_dcerpc_auditor` są specjalnie zaprojektowane
|
||||
- **Opis**: Harmonogram zadań, używany do zdalnego wykonywania poleceń.
|
||||
- **IFID**: 338cd001-2244-31f1-aaaa-900038001003
|
||||
- **Named Pipe**: `\pipe\winreg`
|
||||
- **Opis**: Usługa rejestru zdalnego, używana do uzyskiwania dostępu i modyfikacji rejestru systemowego.
|
||||
- **Opis**: Usługa rejestru zdalnego, używana do uzyskiwania dostępu i modyfikowania rejestru systemowego.
|
||||
- **IFID**: 367abb81-9844-35f1-ad32-98f038001003
|
||||
- **Named Pipe**: `\pipe\svcctl`
|
||||
- **Opis**: Menedżer kontroli usług i usługi serwera, używany do zdalnego uruchamiania i zatrzymywania usług oraz wykonywania poleceń.
|
||||
@ -67,7 +67,7 @@ Wszystkie opcje z wyjątkiem `tcp_dcerpc_auditor` są specjalnie zaprojektowane
|
||||
|
||||
Używając [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver), pochodzącego z [badania Airbus](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/), możliwe jest nadużycie metody _**ServerAlive2**_ wewnątrz interfejsu _**IOXIDResolver**_.
|
||||
|
||||
Metoda ta była używana do uzyskiwania informacji o interfejsie jako adresie **IPv6** z maszyny HTB _APT_. Zobacz [tutaj](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) dla opisu 0xdf APT, zawiera alternatywną metodę używającą rpcmap.py z [Impacket](https://github.com/SecureAuthCorp/impacket/) z _stringbinding_ (patrz powyżej).
|
||||
Metoda ta była używana do uzyskiwania informacji o interfejsie jako adresie **IPv6** z maszyny HTB _APT_. Zobacz [tutaj](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) dla opisu 0xdf APT, który zawiera alternatywną metodę używającą rpcmap.py z [Impacket](https://github.com/SecureAuthCorp/impacket/) z _stringbinding_ (patrz powyżej).
|
||||
|
||||
### Wykonywanie RCE z ważnymi poświadczeniami
|
||||
|
||||
@ -83,9 +83,65 @@ Możliwe jest wykonanie zdalnego kodu na maszynie, jeśli dostępne są poświad
|
||||
|
||||
**rpcdump.exe** z [rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools) może współdziałać z tym portem.
|
||||
|
||||
### Zautomatyzowana enumeracja interfejsów i dynamiczne generowanie klientów (NtObjectManager)
|
||||
## Zautomatyzowane fuzzowanie interfejsów MSRPC
|
||||
|
||||
Guru PowerShell **James Forshaw** ujawnił większość wewnętrznych elementów Windows RPC w otwartym module *NtObjectManager*. Używając go, możesz w kilka sekund przekształcić dowolny serwer RPC DLL / EXE w **w pełni funkcjonalny stub klienta** – bez potrzeby IDL, MIDL ani ręcznego unmarshalling.
|
||||
Interfejsy MS-RPC ujawniają dużą i często niedokumentowaną powierzchnię ataku. Otwarty moduł PowerShell [MS-RPC-Fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer) oparty na `NtObjectManager` Jamesa Forshawa, *dynamicznie* tworzy stuby klienta RPC z metadanych interfejsu, które są już obecne w binariach systemu Windows. Gdy stub istnieje, moduł może bombardować każdą procedurę z mutowanymi danymi wejściowymi i rejestrować wyniki, co umożliwia **powtarzalne, dużej skali fuzzowanie punktów końcowych RPC bez pisania ani jednej linii IDL**.
|
||||
|
||||
### 1. Inwentaryzacja interfejsów
|
||||
```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` wyodrębni UUID, wersję, ciągi powiązań (named-pipe / TCP / HTTP) oraz **pełne prototypy procedur** dla każdego interfejsu, z którym się spotka, i zapisze je w `rpcServerData.json`.
|
||||
|
||||
### 2. Uruchom fuzzer
|
||||
```powershell
|
||||
'.\output\rpcServerData.json' |
|
||||
Invoke-RpcFuzzer -OutPath .\output `
|
||||
-MinStrLen 100 -MaxStrLen 1000 `
|
||||
-MinIntSize 9999 -MaxIntSize 99999
|
||||
```
|
||||
Relewantne opcje:
|
||||
|
||||
* `-MinStrLen` / `-MaxStrLen` – zakres rozmiaru dla generowanych ciągów
|
||||
* `-MinIntSize` / `-MaxIntSize` – zakres wartości dla zmutowanych liczb całkowitych (przydatne do testowania przepełnienia)
|
||||
* `-Sorted` – wykonuj procedury w kolejności, która uwzględnia **zależności parametrów**, aby wyniki jednego wywołania mogły służyć jako dane wejściowe dla następnego (dramatycznie zwiększa dostępne ścieżki)
|
||||
|
||||
Fuzzer implementuje 2 strategie:
|
||||
|
||||
1. **Default fuzzer** – losowe wartości prymitywne + domyślne instancje dla typów złożonych
|
||||
2. **Sorted fuzzer** – uporządkowanie z uwzględnieniem zależności (zobacz `docs/Procedure dependency design.md`)
|
||||
|
||||
Każde wywołanie jest zapisywane atomowo do `log.txt`; po awarii **ostatnia linia natychmiast informuje o problematycznej procedurze**. Wynik każdego wywołania jest również klasyfikowany do trzech plików JSON:
|
||||
|
||||
* `allowed.json` – wywołanie zakończone sukcesem i zwrócone dane
|
||||
* `denied.json` – serwer odpowiedział *Access Denied*
|
||||
* `error.json` – inny błąd / awaria
|
||||
|
||||
### 3. Wizualizacja z Neo4j
|
||||
```powershell
|
||||
'.\output\allowed.json' |
|
||||
Import-DataToNeo4j -Neo4jHost 192.168.56.10:7474 -Neo4jUsername neo4j
|
||||
```
|
||||
`Import-DataToNeo4j` konwertuje artefakty JSON na strukturę grafu, gdzie:
|
||||
|
||||
* Serwery RPC, interfejsy i procedury są **węzłami**
|
||||
* Interakcje (`ALLOWED`, `DENIED`, `ERROR`) są **relacjami**
|
||||
|
||||
Zapytania Cypher mogą być następnie używane do szybkiego wykrywania niebezpiecznych procedur lub do odtworzenia dokładnego łańcucha wywołań, który poprzedzał awarię.
|
||||
|
||||
⚠️ Fuzzer jest *destrukcyjny*: spodziewaj się awarii usług, a nawet BSOD – zawsze uruchamiaj go w izolowanym zrzucie VM.
|
||||
|
||||
|
||||
### Zautomatyzowana enumeracja interfejsów i dynamiczna generacja klienta (NtObjectManager)
|
||||
|
||||
Guru PowerShell **James Forshaw** ujawnił większość wewnętrznych elementów RPC Windows w otwartoźródłowym module *NtObjectManager*. Używając go, możesz w kilka sekund przekształcić dowolny DLL / EXE serwera RPC w **w pełni funkcjonalny stub klienta** – bez potrzeby IDL, MIDL czy ręcznego unmarshalling.
|
||||
```powershell
|
||||
# Install the module once
|
||||
Install-Module NtObjectManager -Force
|
||||
@ -121,16 +177,14 @@ 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)
|
||||
```
|
||||
Autoryzacja (Kerberos / NTLM) i poziomy szyfrowania (`PacketIntegrity`, `PacketPrivacy`, …) mogą być dostarczane bezpośrednio za pomocą cmdletu `Connect-RpcClient` – idealne do **omijania deskryptorów zabezpieczeń** chroniących wysokoprzywilejowane nazwane rury.
|
||||
|
||||
---
|
||||
Autoryzacja (Kerberos / NTLM) i poziomy szyfrowania (`PacketIntegrity`, `PacketPrivacy`, …) mogą być dostarczane bezpośrednio za pomocą cmdletu `Connect-RpcClient` – idealne do **omijania deskryptorów zabezpieczeń** chroniących wysokoprywatne nazwane rury.
|
||||
|
||||
### Fuzzing RPC z uwzględnieniem kontekstu (MS-RPC-Fuzzer)
|
||||
|
||||
Statyczna wiedza o interfejsie jest świetna, ale to, czego naprawdę chcesz, to **fuzzing z przewodnictwem pokrycia**, który rozumie *uchwyty kontekstu* i złożone łańcuchy parametrów. Projekt open-source **MS-RPC-Fuzzer** automatyzuje dokładnie ten proces:
|
||||
|
||||
1. Wymień każdy interfejs/procedurę eksportowaną przez docelowy plik binarny (`Get-RpcServer`).
|
||||
2. Generuj dynamiczne klienty dla każdego interfejsu (`Format-RpcClient`).
|
||||
2. Generuj dynamiczne klientów dla każdego interfejsu (`Format-RpcClient`).
|
||||
3. Randomizuj parametry wejściowe (długość szerokich ciągów, zakresy liczb całkowitych, enumy), szanując oryginalny **typ NDR**.
|
||||
4. Śledź *uchwyty kontekstu* zwracane przez jedno wywołanie, aby automatycznie zasilać procedury następcze.
|
||||
5. Wykonuj wywołania o dużej objętości przeciwko wybranemu transportowi (ALPC, TCP, HTTP lub nazwanej rurze).
|
||||
@ -145,18 +199,17 @@ Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
|
||||
```
|
||||
Jedno pisanie poza zakresem lub nieoczekiwany wyjątek zostanie natychmiast ujawniony z dokładnym opnum + zafałszowanym ładunkiem, który go wywołał – idealny punkt wyjścia do stabilnego dowodu koncepcji exploita.
|
||||
|
||||
> ⚠️ Wiele usług RPC działa w procesach uruchamianych jako **NT AUTHORITY\SYSTEM**. Każdy problem z bezpieczeństwem pamięci tutaj zazwyczaj prowadzi do lokalnej eskalacji uprawnień lub (gdy jest udostępniony przez SMB/135) *zdalnego wykonania kodu*.
|
||||
> ⚠️ Wiele usług RPC działa w procesach uruchamianych jako **NT AUTHORITY\SYSTEM**. Każdy problem z bezpieczeństwem pamięci tutaj zazwyczaj przekłada się na lokalne podniesienie uprawnień lub (gdy jest wystawiony przez SMB/135) *zdalne wykonanie kodu*.
|
||||
|
||||
---
|
||||
|
||||
## Odniesienia
|
||||
|
||||
- [Automating MS-RPC vulnerability research (2025, Incendium.rocks)](https://www.incendium.rocks/posts/Automating-MS-RPC-Vulnerability-Research/)
|
||||
- [MS-RPC-Fuzzer – kontekstowy fuzzer RPC](https://github.com/warpnet/MS-RPC-Fuzzer)
|
||||
- [Moduł PowerShell NtObjectManager](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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user