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

This commit is contained in:
Translator 2025-07-17 22:10:18 +00:00
parent 57862cfc96
commit 974b01a293

View File

@ -4,9 +4,9 @@
## Temel Bilgiler
Microsoft Uzaktan Prosedür Çağrısı (MSRPC) protokolü, bir programın başka bir bilgisayarda bulunan bir programdan hizmet talep etmesini sağlayan bir istemci-sunucu modelidir ve ağın ayrıntılarını anlamadan çalışır. İlk olarak açık kaynak yazılımlarından türetilmiş ve daha sonra Microsoft tarafından geliştirilip telif hakkı alınmıştır.
Microsoft Uzaktan Prosedür Çağrısı (MSRPC) protokolü, bir programın başka bir bilgisayarda bulunan bir programdan hizmet talep etmesini sağlayan bir istemci-sunucu modelidir ve ağın ayrıntılarını anlamadan çalışır. İlk olarak açık kaynak yazılımdan türetilmiş ve daha sonra Microsoft tarafından geliştirilip telif hakkı alınmıştır.
RPC uç noktası haritalayıcısına TCP ve UDP port 135, TCP 139 ve 445 üzerinde SMB (boş veya kimlik doğrulamalı oturum ile) ve TCP port 593 üzerinde bir web hizmeti aracılığıyla erişilebilir.
RPC uç noktası haritalayıcısına TCP ve UDP port 135, SMB üzerinden TCP 139 ve 445 (boş veya kimlik doğrulamalı oturum ile) ve TCP port 593 üzerinden bir web hizmeti olarak erişilebilir.
```
135/tcp open msrpc Microsoft Windows RPC
```
@ -61,13 +61,13 @@ Tüm seçenekler `tcp_dcerpc_auditor` hariç, 135 numaralı porttaki MSRPC'yi he
- **Açıklama**: Uzakta hizmetleri başlatmak ve durdurmak ve komutları yürütmek için kullanılan hizmet kontrol yöneticisi ve sunucu hizmetleri.
- **IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
- **Named Pipe**: `\pipe\epmapper`
- **Açıklama**: WM aracılığıyla şifre kırma ve bilgi toplama için kullanılan DCOM arayüzü.
- **Açıklama**: WM aracılığıyla zorla şifre kırma ve bilgi toplama için kullanılan DCOM arayüzü.
### IP adreslerini belirleme
[https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver) kullanarak, [Airbus araştırmasından](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/) _**IOXIDResolver**_ arayüzü içindeki _**ServerAlive2**_ yöntemini kötüye kullanmak mümkündür.
Bu yöntem, HTB kutusu _APT_ 'den **IPv6** adresi gibi arayüz bilgilerini almak için kullanılmıştır. 0xdf APT yazısı için [buraya](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) bakın, rpcmap.py kullanarak alternatif bir yöntem içerir [Impacket](https://github.com/SecureAuthCorp/impacket/) ile _stringbinding_ (yukarıya bakın).
Bu yöntem, HTB kutusu _APT_ 'den **IPv6** adresi gibi arayüz bilgilerini almak için kullanılmıştır. 0xdf APT yazımı için [buraya](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) bakın, rpcmap.py kullanarak alternatif bir yöntem içermektedir [Impacket](https://github.com/SecureAuthCorp/impacket/) ile _stringbinding_ (yukarıya bakın).
### Geçerli kimlik bilgileri ile RCE yürütme
@ -83,9 +83,65 @@ Geçerli bir kullanıcının kimlik bilgileri mevcutsa, [dcomexec.py](https://gi
[rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools) içindeki **rpcdump.exe** bu port ile etkileşimde bulunabilir.
### Otomatik Arayüz Listeleme & Dinamik İstemci Oluşturma (NtObjectManager)
## MSRPC Arayüzlerinin Otomatik Fuzzing'i
PowerShell uzmanı **James Forshaw**, açık kaynak *NtObjectManager* modülü içinde Windows RPC iç yapılarının çoğunu ortaya çıkardı. Bunu kullanarak, herhangi bir RPC sunucu DLL / EXE'sini saniyeler içinde **tam özellikli bir istemci stub** haline getirebilirsiniz IDL, MIDL veya manuel ayrıştırma gerektirmeden.
MS-RPC arayüzleri, büyük ve genellikle belgelenmemiş bir saldırı yüzeyi sunar. Açık kaynak [MS-RPC-Fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer) PowerShell modülü, James Forshawın `NtObjectManager`'ını kullanarak, Windows ikili dosyalarında zaten mevcut olan arayüz meta verilerinden *dinamik olarak* RPC istemci stub'ları oluşturur. Bir stub mevcut olduğunda, modül her prosedürü değiştirilmiş girdilerle bombardıman edebilir ve sonucu kaydedebilir, bu da **tek bir IDL satırı yazmadan RPC uç noktalarının tekrarlanabilir, büyük ölçekli fuzzing'ini mümkün kılar**.
### 1. Arayüzleri envanterleme
```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`, karşılaştığı her arayüz için UUID, versiyon, bağlama dizgeleri (adlı boru / TCP / HTTP) ve **tam prosedür prototiplerini** çıkaracak ve bunları `rpcServerData.json` dosyasında saklayacaktır.
### 2. Fuzzer'ı çalıştırın
```powershell
'.\output\rpcServerData.json' |
Invoke-RpcFuzzer -OutPath .\output `
-MinStrLen 100 -MaxStrLen 1000 `
-MinIntSize 9999 -MaxIntSize 99999
```
İlgili seçenekler:
* `-MinStrLen` / `-MaxStrLen` üretilen dizelerin boyut aralığı
* `-MinIntSize` / `-MaxIntSize` değiştirilmiş tam sayıların değer aralığı (taşma testi için yararlıdır)
* `-Sorted` bir çağrının çıktılarının bir sonraki çağrının girdileri olarak kullanılabilmesi için **parametre bağımlılıklarını** dikkate alarak prosedürleri bir sırayla yürütme (ulaşılabilir yolları dramatik şekilde artırır)
Fuzzer, 2 strateji uygular:
1. **Varsayılan fuzzer** rastgele ilkel değerler + karmaşık türler için varsayılan örnekler
2. **Sıralı fuzzer** bağımlılık farkındalığına sahip sıralama (bkz. `docs/Procedure dependency design.md`)
Her çağrı atomik olarak `log.txt` dosyasına yazılır; bir çökmeden sonra **son satır hemen hatalı prosedürü bildirir**. Her çağrının sonucu da üç JSON dosyasına kategorize edilir:
* `allowed.json` çağrı başarılı oldu ve veri döndü
* `denied.json` sunucu *Erişim Reddedildi* ile yanıt verdi
* `error.json` başka bir hata / çökme
### 3. Neo4j ile Görselleştir
```powershell
'.\output\allowed.json' |
Import-DataToNeo4j -Neo4jHost 192.168.56.10:7474 -Neo4jUsername neo4j
```
`Import-DataToNeo4j`, JSON artefaktlarını bir grafik yapısına dönüştürür:
* RPC sunucuları, arayüzler ve prosedürler **düğümlerdir**
* Etkileşimler (`ALLOWED`, `DENIED`, `ERROR`) **ilişkilerdir**
Cypher sorguları, tehlikeli prosedürleri hızlıca tespit etmek veya bir çökmeden önceki çağrı zincirini tam olarak yeniden oynatmak için kullanılabilir.
⚠️ Fuzzer *yıkıcıdır*: hizmet çöküşleri ve hatta BSOD'lar bekleyin her zaman izole bir VM anlık görüntüsünde çalıştırın.
### Otomatik Arayüz Sayımı & Dinamik İstemci Üretimi (NtObjectManager)
PowerShell uzmanı **James Forshaw**, açık kaynak *NtObjectManager* modülü içinde Windows RPC iç yapılarının çoğunu ortaya çıkardı. Bunu kullanarak, herhangi bir RPC sunucu DLL / EXE'sini birkaç saniye içinde **tam özellikli bir istemci stub**'a dönüştürebilirsiniz IDL, MIDL veya manuel ayrıştırma gerektirmez.
```powershell
# Install the module once
Install-Module NtObjectManager -Force
@ -123,11 +179,9 @@ $client.EfsRpcOpenFileRaw([ref]$ctx, "\\\127.0.0.1\test", 0)
```
Authentication (Kerberos / NTLM) ve şifreleme seviyeleri (`PacketIntegrity`, `PacketPrivacy`, …) doğrudan `Connect-RpcClient` cmdlet'i aracılığıyla sağlanabilir yüksek ayrıcalıklı adlandırılmış boruları koruyan **Güvenlik Tanımlayıcılarını** atlamak için idealdir.
---
### Bağlam Bilgisine Duyarlı RPC Fuzzing (MS-RPC-Fuzzer)
Statik arayüz bilgisi harika, ancak gerçekten istediğiniz şey, *bağlam tutucularını* ve karmaşık parametre zincirlerini anlayan **kapsam rehberli fuzzing**'dir. Açık kaynak **MS-RPC-Fuzzer** projesi tam olarak bu iş akışını otomatikleştirir:
Statik arayüz bilgisi harika, ancak gerçekten istediğiniz şey **kapsam rehberli fuzzing**'dir; bu, *bağlam tutucularını* ve karmaşık parametre zincirlerini anlar. Açık kaynak **MS-RPC-Fuzzer** projesi tam olarak bu iş akışını otomatikleştirir:
1. Hedef ikili tarafından dışa aktarılan her arayüz/prosedürü listeleyin (`Get-RpcServer`).
2. Her arayüz için dinamik istemciler oluşturun (`Format-RpcClient`).
@ -143,20 +197,19 @@ Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
-Iterations 100000 `
-OutDir .\results
```
Bir tek out-of-bounds yazma veya beklenmedik bir istisna, tetikleyen tam opnum + fuzzed yük ile hemen ortaya çıkacaktır kararlı bir kanıt konsepti istismarı için mükemmel bir başlangıç noktası.
Bir tek out-of-bounds yazma veya beklenmedik bir istisna, tetikleyen tam opnum + fuzzed yük ile hemen ortaya çıkacaktır - kararlı bir kanıt konsepti istismarı için mükemmel bir başlangıç noktası.
> ⚠️ Birçok RPC hizmeti **NT AUTHORITY\SYSTEM** olarak çalışan süreçlerde yürütülmektedir. Buradaki herhangi bir bellek güvenliği sorunu genellikle yerel ayrıcalık yükselmesine veya (SMB/135 üzerinden açıldığında) *uzaktan kod yürütmeye* dönüşmektedir.
> ⚠️ Birçok RPC hizmeti **NT AUTHORITY\SYSTEM** olarak çalışan süreçlerde yürütülmektedir. Buradaki herhangi bir bellek güvenliği sorunu genellikle yerel ayrıcalık yükselmesine veya (SMB/135 üzerinden açıldığında) *uzaktan kod yürütme* ile sonuçlanır.
---
## Referanslar
- [MS-RPC güvenlik açığı araştırmasını otomatikleştirme (2025, Incendium.rocks)](https://www.incendium.rocks/posts/Automating-MS-RPC-Vulnerability-Research/)
- [MS-RPC-Fuzzer bağlam farkındalığına sahip RPC fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer)
- [NtObjectManager PowerShell modülü](https://github.com/googleprojectzero/sandbox-attacksurface-analysis-tools/tree/master/NtObjectManager)
- [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}}