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
3bbc8e9639
commit
4cf51be28e
@ -12,7 +12,7 @@ RPC uç noktası haritalayıcısına TCP ve UDP port 135, TCP 139 ve 445 üzerin
|
||||
```
|
||||
## MSRPC nasıl çalışır?
|
||||
|
||||
İstemci uygulaması tarafından başlatılan MSRPC süreci, istemci çalışma zamanı kütüphanesi ile etkileşime giren yerel bir stub prosedürünü çağırmayı içerir ve ardından isteği sunucuya hazırlayıp iletmek için kullanılır. Bu, parametrelerin standart Ağ Veri Temsili formatına dönüştürülmesini içerir. Taşıma protokolü seçimi, sunucu uzaktaysa çalışma zamanı kütüphanesi tarafından belirlenir ve RPC'nin ağ yığını üzerinden iletilmesini sağlar.
|
||||
İstemci uygulaması tarafından başlatılan MSRPC süreci, istemci çalışma zamanı kütüphanesi ile etkileşime giren yerel bir stub prosedürünü çağırmayı içerir ve ardından isteği sunucuya hazırlayıp iletir. Bu, parametrelerin standart Ağ Veri Temsili formatına dönüştürülmesini içerir. Taşıma protokolü seçimi, sunucu uzaktaysa çalışma zamanı kütüphanesi tarafından belirlenir ve RPC'nin ağ yığını üzerinden iletilmesini sağlar.
|
||||
|
||||

|
||||
|
||||
@ -34,9 +34,9 @@ use auxiliary/scanner/dcerpc/management
|
||||
use auxiliary/scanner/dcerpc/tcp_dcerpc_auditor
|
||||
rpcdump.py <IP> -p 135
|
||||
```
|
||||
Tüm seçenekler `tcp_dcerpc_auditor` hariç, 135 numaralı portta MSRPC'yi hedef almak için özel olarak tasarlanmıştır.
|
||||
Tüm seçenekler `tcp_dcerpc_auditor` hariç, 135 numaralı porttaki MSRPC'yi hedef almak için özel olarak tasarlanmıştır.
|
||||
|
||||
#### Dikkate Değer RPC arayüzleri
|
||||
#### Dikkate Değer RPC Arayüzleri
|
||||
|
||||
- **IFID**: 12345778-1234-abcd-ef00-0123456789ab
|
||||
- **Named Pipe**: `\pipe\lsarpc`
|
||||
@ -46,13 +46,13 @@ Tüm seçenekler `tcp_dcerpc_auditor` hariç, 135 numaralı portta MSRPC'yi hede
|
||||
- **Açıklama**: Alanları ve güven ilişkilerini listelemek için kullanılan LSA Dizin Hizmetleri (DS) arayüzü.
|
||||
- **IFID**: 12345778-1234-abcd-ef00-0123456789ac
|
||||
- **Named Pipe**: `\pipe\samr`
|
||||
- **Açıklama**: Kamuya açık SAM veritabanı öğelerine (örneğin, kullanıcı adları) erişmek ve kullanıcı şifrelerini hesap kilitleme politikasına bakılmaksızın zorlamak için kullanılan LSA SAMR arayüzü.
|
||||
- **Açıklama**: Kamuya açık SAM veritabanı öğelerine (örneğin, kullanıcı adları) erişmek ve kullanıcı şifrelerini hesap kilitleme politikası gözetmeksizin zorlamak için kullanılan LSA SAMR arayüzü.
|
||||
- **IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b
|
||||
- **Named Pipe**: `\pipe\atsvc`
|
||||
- **Açıklama**: Uzakta komutları yürütmek için kullanılan görev zamanlayıcı.
|
||||
- **IFID**: 338cd001-2244-31f1-aaaa-900038001003
|
||||
- **Named Pipe**: `\pipe\winreg`
|
||||
- **Açıklama**: Sistemin kayıt defterine erişmek ve değiştirmek için kullanılan uzak kayıt defteri hizmeti.
|
||||
- **Açıklama**: Sistem kayıt defterine erişmek ve değiştirmek için kullanılan uzak kayıt defteri hizmeti.
|
||||
- **IFID**: 367abb81-9844-35f1-ad32-98f038001003
|
||||
- **Named Pipe**: `\pipe\svcctl`
|
||||
- **Açıklama**: Uzakta hizmetleri başlatmak ve durdurmak ve komutları yürütmek için kullanılan hizmet kontrol yöneticisi ve sunucu hizmetleri.
|
||||
@ -65,15 +65,15 @@ Tüm seçenekler `tcp_dcerpc_auditor` hariç, 135 numaralı portta MSRPC'yi hede
|
||||
|
||||
### 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/) _**ServerAlive2**_ yöntemini _**IOXIDResolver**_ arayüzü içinde kötüye kullanmak mümkündür.
|
||||
[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 kutusundan **IPv6** adresi gibi arayüz bilgilerini almak için kullanılmıştır _APT_. 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).
|
||||
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).
|
||||
|
||||
### Geçerli kimlik bilgileri ile RCE yürütme
|
||||
|
||||
Geçerli bir kullanıcının kimlik bilgileri mevcutsa, bir makinede uzaktan kod yürütmek mümkündür [dcomexec.py](https://github.com/fortra/impacket/blob/master/examples/dcomexec.py) kullanarak impacket framework'ünden.
|
||||
Geçerli bir kullanıcının kimlik bilgileri mevcutsa, [dcomexec.py](https://github.com/fortra/impacket/blob/master/examples/dcomexec.py) kullanarak bir makinede uzaktan kod yürütmek mümkündür.
|
||||
|
||||
**Farklı mevcut nesnelerle denemeyi unutmayın**
|
||||
**Mevcut farklı nesnelerle denemeyi unutmayın**
|
||||
|
||||
- ShellWindows
|
||||
- ShellBrowserWindow
|
||||
@ -83,8 +83,78 @@ Geçerli bir kullanıcının kimlik bilgileri mevcutsa, bir makinede uzaktan kod
|
||||
|
||||
[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)
|
||||
|
||||
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.
|
||||
```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 *
|
||||
```
|
||||
Tipik çıktı, parametre türlerini **MIDL**'de göründüğü gibi tam olarak açığa çıkarır (örneğin, `FC_C_WSTRING`, `FC_LONG`, `FC_BIND_CONTEXT`).
|
||||
|
||||
Arayüzü bildiğinizde, **derlemeye hazır bir C# istemcisi oluşturabilirsiniz**:
|
||||
```powershell
|
||||
# Reverse the MS-EFSR (EfsRpc*) interface into C#
|
||||
Format-RpcClient $rpcinterfaces[0] -Namespace MS_EFSR -OutputPath .\MS_EFSR.cs
|
||||
```
|
||||
Üretilen stub içinde şu yöntemleri bulacaksınız:
|
||||
```csharp
|
||||
public int EfsRpcOpenFileRaw(out Marshal.NdrContextHandle ctx, string FileName, int Flags) {
|
||||
// marshals parameters & calls opnum 0
|
||||
}
|
||||
```
|
||||
PowerShell yardımcı programı `Get-RpcClient`, **etkileşimli bir istemci nesnesi** oluşturabilir, böylece prosedürü hemen çağırabilirsiniz:
|
||||
```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)
|
||||
```
|
||||
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:
|
||||
|
||||
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`).
|
||||
3. Orijinal **NDR türünü** dikkate alarak giriş parametrelerini rastgele değiştirin (geniş dizeler uzunluğu, tam sayı aralıkları, enumlar).
|
||||
4. Bir çağrıdan dönen *bağlam tutucularını* takip edin ve takip eden prosedürleri otomatik olarak besleyin.
|
||||
5. Seçilen taşıma (ALPC, TCP, HTTP veya adlandırılmış boru) karşısında yüksek hacimli çağrılar yapın.
|
||||
6. Çıkış durumlarını / hataları / zaman aşımını kaydedin ve *arayüz → prosedür → parametre* ilişkilerini ve çökme kümelerini görselleştirmek için bir **Neo4j** içe aktarma dosyası dışa aktarın.
|
||||
|
||||
Örnek çalışma (adlandırılmış boru hedefi):
|
||||
```powershell
|
||||
Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
|
||||
-MinLen 1 -MaxLen 0x400 `
|
||||
-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ç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.
|
||||
|
||||
---
|
||||
|
||||
## 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)
|
||||
|
||||
- [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/)
|
||||
|
Loading…
x
Reference in New Issue
Block a user