From 0e312beacdcbef9cca3c261218da5d0c76e47619 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 16 Jul 2025 20:09:52 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/135-pentesting-msrpc.md'] t --- .../135-pentesting-msrpc.md | 76 ++++++++++++++++++- 1 file changed, 73 insertions(+), 3 deletions(-) diff --git a/src/network-services-pentesting/135-pentesting-msrpc.md b/src/network-services-pentesting/135-pentesting-msrpc.md index e593d046b..9f9a11e24 100644 --- a/src/network-services-pentesting/135-pentesting-msrpc.md +++ b/src/network-services-pentesting/135-pentesting-msrpc.md @@ -46,7 +46,7 @@ Tutte le opzioni tranne `tcp_dcerpc_auditor` sono specificamente progettate per - **Descrizione**: interfaccia LSA Directory Services (DS), utilizzata per enumerare domini e relazioni di fiducia. - **IFID**: 12345778-1234-abcd-ef00-0123456789ac - **Named Pipe**: `\pipe\samr` -- **Descrizione**: interfaccia LSA SAMR, utilizzata per accedere agli elementi del database SAM pubblici (ad es., nomi utente) e per forzare le password degli utenti indipendentemente dalla politica di blocco dell'account. +- **Descrizione**: interfaccia LSA SAMR, utilizzata per accedere agli elementi del database SAM pubblico (ad es., nomi utente) e forzare le password degli utenti indipendentemente dalla politica di blocco degli account. - **IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b - **Named Pipe**: `\pipe\atsvc` - **Descrizione**: pianificatore di attività, utilizzato per eseguire comandi da remoto. @@ -61,13 +61,13 @@ Tutte le opzioni tranne `tcp_dcerpc_auditor` sono specificamente progettate per - **Descrizione**: gestore di controllo dei servizi e servizi server, utilizzati per avviare e fermare servizi da remoto ed eseguire comandi. - **IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57 - **Named Pipe**: `\pipe\epmapper` -- **Descrizione**: interfaccia DCOM, utilizzata per la forzatura delle password e la raccolta di informazioni tramite WM. +- **Descrizione**: interfaccia DCOM, utilizzata per il brute-force delle password e la raccolta di informazioni tramite WM. ### Identificazione degli indirizzi IP Utilizzando [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver), proveniente da [Airbus research](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/), è possibile abusare del metodo _**ServerAlive2**_ all'interno dell'interfaccia _**IOXIDResolver**_. -Questo metodo è stato utilizzato per ottenere informazioni sull'interfaccia come indirizzo **IPv6** dalla macchina HTB _APT_. Vedi [qui](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) per il writeup di 0xdf APT, che include un metodo alternativo utilizzando rpcmap.py da [Impacket](https://github.com/SecureAuthCorp/impacket/) con _stringbinding_ (vedi sopra). +Questo metodo è stato utilizzato per ottenere informazioni sull'interfaccia come indirizzo **IPv6** dalla macchina HTB _APT_. Vedi [qui](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) per il writeup di 0xdf APT, include un metodo alternativo utilizzando rpcmap.py da [Impacket](https://github.com/SecureAuthCorp/impacket/) con _stringbinding_ (vedi sopra). ### Esecuzione di un RCE con credenziali valide @@ -83,8 +83,78 @@ Questo metodo è stato utilizzato per ottenere informazioni sull'interfaccia com Il **rpcdump.exe** da [rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools) può interagire con questa porta. +### Enumerazione automatizzata delle interfacce e generazione dinamica del client (NtObjectManager) + +Il guru di PowerShell **James Forshaw** ha esposto la maggior parte degli interni di Windows RPC all'interno del modulo open-source *NtObjectManager*. Utilizzandolo, puoi trasformare qualsiasi DLL / EXE del server RPC in uno **stub client completo** in pochi secondi – senza IDL, MIDL o unmarshalling manuale richiesto. +```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 * +``` +L'output tipico espone i tipi di parametro esattamente come appaiono in **MIDL** (ad es. `FC_C_WSTRING`, `FC_LONG`, `FC_BIND_CONTEXT`). + +Una volta che conosci l'interfaccia, puoi **generare un client C# pronto per la compilazione**: +```powershell +# Reverse the MS-EFSR (EfsRpc*) interface into C# +Format-RpcClient $rpcinterfaces[0] -Namespace MS_EFSR -OutputPath .\MS_EFSR.cs +``` +All'interno dello stub prodotto troverai metodi come: +```csharp +public int EfsRpcOpenFileRaw(out Marshal.NdrContextHandle ctx, string FileName, int Flags) { +// marshals parameters & calls opnum 0 +} +``` +Il helper PowerShell `Get-RpcClient` può creare un **oggetto client interattivo** in modo da poter chiamare immediatamente la procedura: +```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) +``` +Autenticazione (Kerberos / NTLM) e livelli di crittografia (`PacketIntegrity`, `PacketPrivacy`, …) possono essere forniti direttamente tramite il cmdlet `Connect-RpcClient` – ideale per **bypassare i Descrittori di Sicurezza** che proteggono i named pipe ad alta privilegio. + +--- + +### Fuzzing RPC Consapevole del Contesto (MS-RPC-Fuzzer) + +La conoscenza statica dell'interfaccia è ottima, ma ciò che desideri davvero è il **fuzzing guidato dalla copertura** che comprende i *context handles* e le catene di parametri complesse. Il progetto open-source **MS-RPC-Fuzzer** automatizza esattamente quel flusso di lavoro: + +1. Enumerare ogni interfaccia/procedura esportata dal binario target (`Get-RpcServer`). +2. Generare client dinamici per ogni interfaccia (`Format-RpcClient`). +3. Randomizzare i parametri di input (lunghezza delle stringhe ampie, intervalli interi, enum) rispettando il **tipo NDR** originale. +4. Tracciare i *context handles* restituiti da una chiamata per alimentare automaticamente le procedure successive. +5. Eseguire chiamate ad alto volume contro il trasporto scelto (ALPC, TCP, HTTP o named pipe). +6. Registrare stati di uscita / errori / timeout ed esportare un file di importazione **Neo4j** per visualizzare le relazioni *interfaccia → procedura → parametro* e i cluster di crash. + +Esempio di esecuzione (target named-pipe): +```powershell +Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM ` +-MinLen 1 -MaxLen 0x400 ` +-Iterations 100000 ` +-OutDir .\results +``` +Un singolo write out-of-bounds o un'eccezione inaspettata verrà visualizzato immediatamente con l'esatto opnum + payload fuzzed che l'ha attivato – punto di partenza perfetto per un exploit proof-of-concept stabile. + +> ⚠️ Molti servizi RPC vengono eseguiti in processi che girano come **NT AUTHORITY\SYSTEM**. Qualsiasi problema di sicurezza della memoria qui di solito si traduce in un'elevazione di privilegi locale o (quando esposto su SMB/135) *esecuzione di codice remoto*. + +--- + ## Riferimenti +- [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/)