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
4b887014fd
commit
a77d13eb43
@ -6,19 +6,19 @@
|
|||||||
|
|
||||||
Протокол Microsoft Remote Procedure Call (MSRPC), клієнт-серверна модель, що дозволяє програмі запитувати послугу у програми, розташованої на іншому комп'ютері, не розуміючи специфіки мережі, спочатку був отриманий з програмного забезпечення з відкритим кодом, а пізніше розроблений і захищений авторським правом компанією Microsoft.
|
Протокол Microsoft Remote Procedure Call (MSRPC), клієнт-серверна модель, що дозволяє програмі запитувати послугу у програми, розташованої на іншому комп'ютері, не розуміючи специфіки мережі, спочатку був отриманий з програмного забезпечення з відкритим кодом, а пізніше розроблений і захищений авторським правом компанією Microsoft.
|
||||||
|
|
||||||
Картографічний кінцевий пункт RPC можна отримати через TCP і UDP порт 135, SMB на TCP 139 і 445 (з нульовою або автентифікованою сесією), а також як веб-сервіс на TCP порту 593.
|
Картографічний кінцевий пункт RPC можна отримати через TCP і UDP порт 135, SMB на TCP 139 і 445 (з нульовою або автентифікованою сесією), а також як веб-сервіс на TCP порті 593.
|
||||||
```
|
```
|
||||||
135/tcp open msrpc Microsoft Windows RPC
|
135/tcp open msrpc Microsoft Windows RPC
|
||||||
```
|
```
|
||||||
## Як працює MSRPC?
|
## Як працює MSRPC?
|
||||||
|
|
||||||
Ініційований клієнтським додатком, процес MSRPC включає виклик локальної стуб-процедури, яка потім взаємодіє з бібліотекою виконання клієнта для підготовки та передачі запиту на сервер. Це включає перетворення параметрів у стандартний формат представлення даних мережі. Вибір транспортного протоколу визначається бібліотекою виконання, якщо сервер віддалений, що забезпечує доставку RPC через мережевий стек.
|
Ініційований клієнтським додатком, процес MSRPC включає виклик локальної процедури-стуба, яка взаємодіє з бібліотекою виконання клієнта для підготовки та передачі запиту на сервер. Це включає перетворення параметрів у стандартний формат представлення даних мережі. Вибір транспортного протоколу визначається бібліотекою виконання, якщо сервер віддалений, що забезпечує доставку RPC через мережевий стек.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## **Визначення відкритих RPC-сервісів**
|
## **Визначення відкритих RPC-сервісів**
|
||||||
|
|
||||||
Відкритість RPC-сервісів через TCP, UDP, HTTP та SMB можна визначити, запитуючи службу локатора RPC та окремі кінцеві точки. Інструменти, такі як rpcdump, полегшують ідентифікацію унікальних RPC-сервісів, позначених значеннями **IFID**, що розкриває деталі сервісу та зв'язки комунікації:
|
Відкритість RPC-сервісів через TCP, UDP, HTTP та SMB може бути визначена шляхом запиту до служби локатора RPC та окремих кінцевих точок. Інструменти, такі як rpcdump, полегшують ідентифікацію унікальних RPC-сервісів, позначених значеннями **IFID**, що розкриває деталі сервісу та зв'язки комунікації:
|
||||||
```
|
```
|
||||||
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
|
||||||
@ -40,32 +40,32 @@ rpcdump.py <IP> -p 135
|
|||||||
|
|
||||||
- **IFID**: 12345778-1234-abcd-ef00-0123456789ab
|
- **IFID**: 12345778-1234-abcd-ef00-0123456789ab
|
||||||
- **Named Pipe**: `\pipe\lsarpc`
|
- **Named Pipe**: `\pipe\lsarpc`
|
||||||
- **Опис**: Інтерфейс LSA, використовується для перерахунку користувачів.
|
- **Description**: Інтерфейс LSA, використовується для перерахунку користувачів.
|
||||||
- **IFID**: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
|
- **IFID**: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
|
||||||
- **Named Pipe**: `\pipe\lsarpc`
|
- **Named Pipe**: `\pipe\lsarpc`
|
||||||
- **Опис**: Інтерфейс LSA Directory Services (DS), використовується для перерахунку доменів і довірчих відносин.
|
- **Description**: Інтерфейс LSA Directory Services (DS), використовується для перерахунку доменів і довірчих відносин.
|
||||||
- **IFID**: 12345778-1234-abcd-ef00-0123456789ac
|
- **IFID**: 12345778-1234-abcd-ef00-0123456789ac
|
||||||
- **Named Pipe**: `\pipe\samr`
|
- **Named Pipe**: `\pipe\samr`
|
||||||
- **Опис**: Інтерфейс LSA SAMR, використовується для доступу до елементів публічної бази даних SAM (наприклад, імена користувачів) і брутфорсу паролів користувачів незалежно від політики блокування облікових записів.
|
- **Description**: Інтерфейс LSA SAMR, використовується для доступу до елементів публічної бази даних SAM (наприклад, імена користувачів) і брутфорсу паролів користувачів незалежно від політики блокування облікових записів.
|
||||||
- **IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b
|
- **IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b
|
||||||
- **Named Pipe**: `\pipe\atsvc`
|
- **Named Pipe**: `\pipe\atsvc`
|
||||||
- **Опис**: Планувальник завдань, використовується для віддаленого виконання команд.
|
- **Description**: Планувальник завдань, використовується для віддаленого виконання команд.
|
||||||
- **IFID**: 338cd001-2244-31f1-aaaa-900038001003
|
- **IFID**: 338cd001-2244-31f1-aaaa-900038001003
|
||||||
- **Named Pipe**: `\pipe\winreg`
|
- **Named Pipe**: `\pipe\winreg`
|
||||||
- **Опис**: Служба віддаленого реєстру, використовується для доступу та зміни системного реєстру.
|
- **Description**: Служба віддаленого реєстру, використовується для доступу та зміни системного реєстру.
|
||||||
- **IFID**: 367abb81-9844-35f1-ad32-98f038001003
|
- **IFID**: 367abb81-9844-35f1-ad32-98f038001003
|
||||||
- **Named Pipe**: `\pipe\svcctl`
|
- **Named Pipe**: `\pipe\svcctl`
|
||||||
- **Опис**: Менеджер контролю служб і серверні служби, використовується для віддаленого запуску та зупинки служб і виконання команд.
|
- **Description**: Менеджер контролю служб і серверні служби, використовується для віддаленого запуску та зупинки служб і виконання команд.
|
||||||
- **IFID**: 4b324fc8-1670-01d3-1278-5a47bf6ee188
|
- **IFID**: 4b324fc8-1670-01d3-1278-5a47bf6ee188
|
||||||
- **Named Pipe**: `\pipe\srvsvc`
|
- **Named Pipe**: `\pipe\srvsvc`
|
||||||
- **Опис**: Менеджер контролю служб і серверні служби, використовується для віддаленого запуску та зупинки служб і виконання команд.
|
- **Description**: Менеджер контролю служб і серверні служби, використовується для віддаленого запуску та зупинки служб і виконання команд.
|
||||||
- **IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
|
- **IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
|
||||||
- **Named Pipe**: `\pipe\epmapper`
|
- **Named Pipe**: `\pipe\epmapper`
|
||||||
- **Опис**: Інтерфейс DCOM, використовується для брутфорсу паролів і збору інформації через WM.
|
- **Description**: Інтерфейс DCOM, використовується для брутфорсу паролів і збору інформації через WM.
|
||||||
|
|
||||||
### Визначення IP-адрес
|
### Визначення IP-адрес
|
||||||
|
|
||||||
Використовуючи [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver), що походить з [дослідження Airbus](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/), можливо зловживати методом _**ServerAlive2**_ всередині інтерфейсу _**IOXIDResolver**_.
|
Використовуючи [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver), що походить з [Airbus research](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/), можливо зловживати методом _**ServerAlive2**_ всередині інтерфейсу _**IOXIDResolver**_.
|
||||||
|
|
||||||
Цей метод використовувався для отримання інформації про інтерфейс у вигляді **IPv6** адреси з HTB боксу _APT_. Дивіться [тут](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) для опису 0xdf APT, він включає альтернативний метод, використовуючи rpcmap.py з [Impacket](https://github.com/SecureAuthCorp/impacket/) з _stringbinding_ (див. вище).
|
Цей метод використовувався для отримання інформації про інтерфейс у вигляді **IPv6** адреси з HTB боксу _APT_. Дивіться [тут](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) для опису 0xdf APT, він включає альтернативний метод, використовуючи rpcmap.py з [Impacket](https://github.com/SecureAuthCorp/impacket/) з _stringbinding_ (див. вище).
|
||||||
|
|
||||||
@ -83,7 +83,78 @@ rpcdump.py <IP> -p 135
|
|||||||
|
|
||||||
**rpcdump.exe** з [rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools) може взаємодіяти з цим портом.
|
**rpcdump.exe** з [rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools) може взаємодіяти з цим портом.
|
||||||
|
|
||||||
## Посилання
|
### Автоматизоване перерахування інтерфейсів та динамічна генерація клієнтів (NtObjectManager)
|
||||||
|
|
||||||
|
Гуру PowerShell **James Forshaw** розкрив більшість внутрішніх RPC Windows у відкритому модулі *NtObjectManager*. Використовуючи його, ви можете перетворити будь-який RPC сервер DLL / EXE на **повнофункціональний клієнтський шаблон** за лічені секунди – без IDL, MIDL або ручного розпакування.
|
||||||
|
```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 *
|
||||||
|
```
|
||||||
|
Типовий вихід показує типи параметрів точно так, як вони з'являються в **MIDL** (наприклад, `FC_C_WSTRING`, `FC_LONG`, `FC_BIND_CONTEXT`).
|
||||||
|
|
||||||
|
Якщо ви знаєте інтерфейс, ви можете **згенерувати готовий до компіляції C# клієнт**:
|
||||||
|
```powershell
|
||||||
|
# Reverse the MS-EFSR (EfsRpc*) interface into C#
|
||||||
|
Format-RpcClient $rpcinterfaces[0] -Namespace MS_EFSR -OutputPath .\MS_EFSR.cs
|
||||||
|
```
|
||||||
|
Всередині створеного стуба ви знайдете методи, такі як:
|
||||||
|
```csharp
|
||||||
|
public int EfsRpcOpenFileRaw(out Marshal.NdrContextHandle ctx, string FileName, int Flags) {
|
||||||
|
// marshals parameters & calls opnum 0
|
||||||
|
}
|
||||||
|
```
|
||||||
|
PowerShell допоміжний засіб `Get-RpcClient` може створити **інтерактивний об'єкт клієнта**, щоб ви могли викликати процедуру негайно:
|
||||||
|
```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)
|
||||||
|
```
|
||||||
|
Аутентифікація (Kerberos / NTLM) та рівні шифрування (`PacketIntegrity`, `PacketPrivacy`, …) можуть бути надані безпосередньо через cmdlet `Connect-RpcClient` – ідеально для **обходу дескрипторів безпеки**, які захищають канали з високими привілеями.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Контекстно-орієнтоване Fuzzing RPC (MS-RPC-Fuzzer)
|
||||||
|
|
||||||
|
Статичні знання про інтерфейси чудові, але те, що вам дійсно потрібно, це **fuzzing з покриттям**, який розуміє *контекстні дескриптори* та складні ланцюги параметрів. Відкритий проект **MS-RPC-Fuzzer** автоматизує саме цей робочий процес:
|
||||||
|
|
||||||
|
1. Перерахувати кожен інтерфейс/процедуру, експортовану цільовим бінарним файлом (`Get-RpcServer`).
|
||||||
|
2. Генерувати динамічні клієнти для кожного інтерфейсу (`Format-RpcClient`).
|
||||||
|
3. Випадковим чином змінювати вхідні параметри (довжина широких рядків, діапазони цілих чисел, перерахування), дотримуючись оригінального **NDR типу**.
|
||||||
|
4. Відстежувати *контекстні дескриптори*, повернуті одним викликом, щоб автоматично подавати їх у наступні процедури.
|
||||||
|
5. Виконувати виклики з високим обсягом проти обраного транспорту (ALPC, TCP, HTTP або іменований канал).
|
||||||
|
6. Логувати статуси виходу / помилки / тайм-аути та експортувати файл імпорту **Neo4j** для візуалізації відносин *інтерфейс → процедура → параметр* та кластерів аварій.
|
||||||
|
|
||||||
|
Приклад виконання (цільовий іменований канал):
|
||||||
|
```powershell
|
||||||
|
Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
|
||||||
|
-MinLen 1 -MaxLen 0x400 `
|
||||||
|
-Iterations 100000 `
|
||||||
|
-OutDir .\results
|
||||||
|
```
|
||||||
|
Один єдиний запис за межами меж або несподіване виключення буде відображено негайно з точним opnum + спотвореним корисним навантаженням, яке його викликало – ідеальна відправна точка для стабільного експлуатаційного доказу концепції.
|
||||||
|
|
||||||
|
> ⚠️ Багато RPC-сервісів виконуються в процесах, що працюють під **NT AUTHORITY\SYSTEM**. Будь-яка проблема з безпекою пам'яті тут зазвичай призводить до підвищення локальних привілеїв або (коли відкрито через SMB/135) *віддаленого виконання коду*.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [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-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/)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user