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
							
								
									ef8ef802d6
								
							
						
					
					
						commit
						dff8b5c34c
					
				@ -12,7 +12,7 @@
 | 
			
		||||
```
 | 
			
		||||
## Як працює MSRPC?
 | 
			
		||||
 | 
			
		||||
Ініційований клієнтським додатком, процес MSRPC включає виклик локальної процедури-стуба, яка взаємодіє з бібліотекою виконання клієнта для підготовки та передачі запиту на сервер. Це включає перетворення параметрів у стандартний формат представлення даних мережі. Вибір транспортного протоколу визначається бібліотекою виконання, якщо сервер віддалений, що забезпечує доставку RPC через мережевий стек.
 | 
			
		||||
Ініційований клієнтським додатком, процес MSRPC включає виклик локальної стуб-процедури, яка взаємодіє з бібліотекою виконання клієнта для підготовки та передачі запиту на сервер. Це включає перетворення параметрів у стандартний формат представлення даних мережі. Вибір транспортного протоколу визначається бібліотекою виконання, якщо сервер віддалений, що забезпечує доставку RPC через мережевий стек.
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
@ -40,34 +40,34 @@ rpcdump.py <IP> -p 135
 | 
			
		||||
 | 
			
		||||
- **IFID**: 12345778-1234-abcd-ef00-0123456789ab
 | 
			
		||||
- **Named Pipe**: `\pipe\lsarpc`
 | 
			
		||||
- **Description**: Інтерфейс LSA, використовується для перерахунку користувачів.
 | 
			
		||||
- **Опис**: Інтерфейс LSA, використовується для перерахунку користувачів.
 | 
			
		||||
- **IFID**: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
 | 
			
		||||
- **Named Pipe**: `\pipe\lsarpc`
 | 
			
		||||
- **Description**: Інтерфейс LSA Directory Services (DS), використовується для перерахунку доменів і довірчих відносин.
 | 
			
		||||
- **Опис**: Інтерфейс LSA Directory Services (DS), використовується для перерахунку доменів і довірчих відносин.
 | 
			
		||||
- **IFID**: 12345778-1234-abcd-ef00-0123456789ac
 | 
			
		||||
- **Named Pipe**: `\pipe\samr`
 | 
			
		||||
- **Description**: Інтерфейс LSA SAMR, використовується для доступу до елементів публічної бази даних SAM (наприклад, імена користувачів) і брутфорсу паролів користувачів незалежно від політики блокування облікових записів.
 | 
			
		||||
- **Опис**: Інтерфейс LSA SAMR, використовується для доступу до елементів публічної бази даних SAM (наприклад, імена користувачів) і брутфорсу паролів користувачів незалежно від політики блокування облікових записів.
 | 
			
		||||
- **IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b
 | 
			
		||||
- **Named Pipe**: `\pipe\atsvc`
 | 
			
		||||
- **Description**: Планувальник завдань, використовується для віддаленого виконання команд.
 | 
			
		||||
- **Опис**: Планувальник завдань, використовується для віддаленого виконання команд.
 | 
			
		||||
- **IFID**: 338cd001-2244-31f1-aaaa-900038001003
 | 
			
		||||
- **Named Pipe**: `\pipe\winreg`
 | 
			
		||||
- **Description**: Служба віддаленого реєстру, використовується для доступу та зміни системного реєстру.
 | 
			
		||||
- **Опис**: Служба віддаленого реєстру, використовується для доступу та зміни системного реєстру.
 | 
			
		||||
- **IFID**: 367abb81-9844-35f1-ad32-98f038001003
 | 
			
		||||
- **Named Pipe**: `\pipe\svcctl`
 | 
			
		||||
- **Description**: Менеджер контролю служб і серверні служби, використовується для віддаленого запуску та зупинки служб і виконання команд.
 | 
			
		||||
- **Опис**: Менеджер контролю служб і серверні служби, використовується для віддаленого запуску та зупинки служб і виконання команд.
 | 
			
		||||
- **IFID**: 4b324fc8-1670-01d3-1278-5a47bf6ee188
 | 
			
		||||
- **Named Pipe**: `\pipe\srvsvc`
 | 
			
		||||
- **Description**: Менеджер контролю служб і серверні служби, використовується для віддаленого запуску та зупинки служб і виконання команд.
 | 
			
		||||
- **Опис**: Менеджер контролю служб і серверні служби, використовується для віддаленого запуску та зупинки служб і виконання команд.
 | 
			
		||||
- **IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
 | 
			
		||||
- **Named Pipe**: `\pipe\epmapper`
 | 
			
		||||
- **Description**: Інтерфейс DCOM, використовується для брутфорсу паролів і збору інформації через WM.
 | 
			
		||||
- **Опис**: Інтерфейс DCOM, використовується для брутфорсу паролів і збору інформації через WM.
 | 
			
		||||
 | 
			
		||||
### Визначення IP-адрес
 | 
			
		||||
 | 
			
		||||
Використовуючи [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**_.
 | 
			
		||||
Використовуючи [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**_.
 | 
			
		||||
 | 
			
		||||
Цей метод використовувався для отримання інформації про інтерфейс у вигляді **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_ (див. вище).
 | 
			
		||||
 | 
			
		||||
### Виконання RCE з дійсними обліковими даними
 | 
			
		||||
 | 
			
		||||
@ -83,9 +83,65 @@ rpcdump.py <IP> -p 135
 | 
			
		||||
 | 
			
		||||
**rpcdump.exe** з [rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools) може взаємодіяти з цим портом.
 | 
			
		||||
 | 
			
		||||
### Автоматизоване перерахування інтерфейсів та динамічна генерація клієнтів (NtObjectManager)
 | 
			
		||||
## Автоматизоване фуззингування інтерфейсів MSRPC
 | 
			
		||||
 | 
			
		||||
Гуру PowerShell **James Forshaw** розкрив більшість внутрішніх RPC Windows у відкритому модулі *NtObjectManager*. Використовуючи його, ви можете перетворити будь-який RPC сервер DLL / EXE на **повнофункціональний клієнтський шаблон** за лічені секунди – без IDL, MIDL або ручного розпакування.
 | 
			
		||||
Інтерфейси MS-RPC відкривають великий і часто не задокументований вектор атаки. Відкритий модуль PowerShell [MS-RPC-Fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer) базується на `NtObjectManager` Джеймса Форшоу, щоб *динамічно* створювати RPC клієнтські стуби з метаданих інтерфейсу, які вже присутні в Windows бінарниках. Як тільки стуб існує, модуль може обстрілювати кожну процедуру з мутаційованими вхідними даними та реєструвати результати, що робить **відтворюване, масштабне фуззингування RPC кінцевих точок можливим без написання жодного рядка IDL**.
 | 
			
		||||
 | 
			
		||||
### 1. Інвентаризація інтерфейсів
 | 
			
		||||
```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` витягне UUID, версію, рядки зв'язку (named-pipe / TCP / HTTP) та **повні прототипи процедур** для кожного інтерфейсу, з яким він зіткнеться, і зберігатиме їх у `rpcServerData.json`.
 | 
			
		||||
 | 
			
		||||
### 2. Запустіть фузер
 | 
			
		||||
```powershell
 | 
			
		||||
'.\output\rpcServerData.json' |
 | 
			
		||||
Invoke-RpcFuzzer -OutPath .\output `
 | 
			
		||||
-MinStrLen 100  -MaxStrLen 1000 `
 | 
			
		||||
-MinIntSize 9999 -MaxIntSize 99999
 | 
			
		||||
```
 | 
			
		||||
Відповідні параметри:
 | 
			
		||||
 | 
			
		||||
* `-MinStrLen` / `-MaxStrLen` – діапазон розміру для згенерованих рядків
 | 
			
		||||
* `-MinIntSize` / `-MaxIntSize` – діапазон значень для змінених цілих чисел (корисно для тестування переповнення)
 | 
			
		||||
* `-Sorted` – виконувати процедури в порядку, що враховує **залежності параметрів**, щоб виходи одного виклику могли слугувати вхідними даними для наступного (значно збільшує досяжні шляхи)
 | 
			
		||||
 | 
			
		||||
Fuzzer реалізує 2 стратегії:
 | 
			
		||||
 | 
			
		||||
1. **Default fuzzer** – випадкові примітивні значення + стандартні екземпляри для складних типів
 | 
			
		||||
2. **Sorted fuzzer**  – порядок, що враховує залежності (див. `docs/Procedure dependency design.md`)
 | 
			
		||||
 | 
			
		||||
Кожен виклик записується атомарно в `log.txt`; після збою **остання стрічка негайно повідомляє про проблемну процедуру**. Результат кожного виклику також категоризується в три JSON файли:
 | 
			
		||||
 | 
			
		||||
* `allowed.json` – виклик успішний і повернув дані
 | 
			
		||||
* `denied.json`  – сервер відповів *Access Denied*
 | 
			
		||||
* `error.json`   – будь-яка інша помилка / збій
 | 
			
		||||
 | 
			
		||||
### 3. Візуалізуйте з Neo4j
 | 
			
		||||
```powershell
 | 
			
		||||
'.\output\allowed.json' |
 | 
			
		||||
Import-DataToNeo4j -Neo4jHost 192.168.56.10:7474 -Neo4jUsername neo4j
 | 
			
		||||
```
 | 
			
		||||
`Import-DataToNeo4j` перетворює JSON артефакти в графову структуру, де:
 | 
			
		||||
 | 
			
		||||
* RPC сервери, інтерфейси та процедури є **вузлами**
 | 
			
		||||
* Взаємодії (`ALLOWED`, `DENIED`, `ERROR`) є **відносинами**
 | 
			
		||||
 | 
			
		||||
Запити Cypher можна використовувати для швидкого виявлення небезпечних процедур або для відтворення точної послідовності викликів, які передували збою.
 | 
			
		||||
 | 
			
		||||
⚠️  Fuzzer є *руйнівним*: очікуйте збоїв сервісу та навіть BSOD – завжди запускайте його в ізольованій знімку ВМ.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Автоматизована енумерація інтерфейсів та динамічна генерація клієнтів (NtObjectManager)
 | 
			
		||||
 | 
			
		||||
Гуру PowerShell **James Forshaw** розкрив більшість внутрішніх механізмів Windows RPC у відкритому *модулі NtObjectManager*. Використовуючи його, ви можете перетворити будь-який RPC сервер DLL / EXE на **повнофункціональний клієнтський шаблон** за кілька секунд – без IDL, MIDL або ручного розпакування.
 | 
			
		||||
```powershell
 | 
			
		||||
# Install the module once
 | 
			
		||||
Install-Module NtObjectManager -Force
 | 
			
		||||
@ -123,18 +179,16 @@ $client.EfsRpcOpenFileRaw([ref]$ctx, "\\\127.0.0.1\test", 0)
 | 
			
		||||
```
 | 
			
		||||
Аутентифікація (Kerberos / NTLM) та рівні шифрування (`PacketIntegrity`, `PacketPrivacy`, …) можуть бути надані безпосередньо через cmdlet `Connect-RpcClient` – ідеально для **обходу дескрипторів безпеки**, які захищають канали з високими привілеями.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
### Контекстно-обізнаний RPC Fuzzing (MS-RPC-Fuzzer)
 | 
			
		||||
 | 
			
		||||
### Контекстно-орієнтоване Fuzzing RPC (MS-RPC-Fuzzer)
 | 
			
		||||
 | 
			
		||||
Статичні знання про інтерфейси чудові, але те, що вам дійсно потрібно, це **fuzzing з покриттям**, який розуміє *контекстні дескриптори* та складні ланцюги параметрів. Відкритий проект **MS-RPC-Fuzzer** автоматизує саме цей робочий процес:
 | 
			
		||||
Статичні знання про інтерфейси чудові, але те, що вам дійсно потрібно, це **fuzzing з орієнтацією на покриття**, який розуміє *контекстні дескриптори* та складні ланцюги параметрів. Відкритий проект **MS-RPC-Fuzzer** автоматизує саме цей робочий процес:
 | 
			
		||||
 | 
			
		||||
1. Перерахувати кожен інтерфейс/процедуру, експортовану цільовим бінарним файлом (`Get-RpcServer`).
 | 
			
		||||
2. Генерувати динамічні клієнти для кожного інтерфейсу (`Format-RpcClient`).
 | 
			
		||||
3. Випадковим чином змінювати вхідні параметри (довжина широких рядків, діапазони цілих чисел, перерахування), дотримуючись оригінального **NDR типу**.
 | 
			
		||||
3. Випадковизувати вхідні параметри (довжина широких рядків, діапазони цілих чисел, перерахування), дотримуючись оригінального **NDR типу**.
 | 
			
		||||
4. Відстежувати *контекстні дескриптори*, повернуті одним викликом, щоб автоматично подавати їх у наступні процедури.
 | 
			
		||||
5. Виконувати виклики з високим обсягом проти обраного транспорту (ALPC, TCP, HTTP або іменований канал).
 | 
			
		||||
6. Логувати статуси виходу / помилки / тайм-аути та експортувати файл імпорту **Neo4j** для візуалізації відносин *інтерфейс → процедура → параметр* та кластерів аварій.
 | 
			
		||||
6. Логувати статуси виходу / помилки / тайм-аути та експортувати файл імпорту **Neo4j** для візуалізації відносин *інтерфейс → процедура → параметр* та кластерів збоїв.
 | 
			
		||||
 | 
			
		||||
Приклад виконання (цільовий іменований канал):
 | 
			
		||||
```powershell
 | 
			
		||||
@ -143,21 +197,19 @@ Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
 | 
			
		||||
-Iterations 100000 `
 | 
			
		||||
-OutDir .\results
 | 
			
		||||
```
 | 
			
		||||
Один єдиний запис за межами меж або несподіване виключення буде відображено негайно з точним opnum + спотвореним корисним навантаженням, яке його викликало – ідеальна відправна точка для стабільного експлуатаційного доказу концепції.
 | 
			
		||||
Один запис за межами межі або несподіване виключення буде відображено негайно з точним 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)
 | 
			
		||||
 | 
			
		||||
## Посилання
 | 
			
		||||
 | 
			
		||||
- [Автоматизація дослідження вразливостей MS-RPC (2025, Incendium.rocks)](https://www.incendium.rocks/posts/Automating-MS-RPC-Vulnerability-Research/)
 | 
			
		||||
- [MS-RPC-Fuzzer – контекстно-обізнаний RPC fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer)
 | 
			
		||||
- [Модуль 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