From dff8b5c34c6d0c56d3792e0a678ab4b7e024e42c Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 17 Jul 2025 22:10:23 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/135-pentesting-msrpc.md'] t --- .../135-pentesting-msrpc.md | 106 +++++++++++++----- 1 file changed, 79 insertions(+), 27 deletions(-) diff --git a/src/network-services-pentesting/135-pentesting-msrpc.md b/src/network-services-pentesting/135-pentesting-msrpc.md index e4af28c0d..27654ea32 100644 --- a/src/network-services-pentesting/135-pentesting-msrpc.md +++ b/src/network-services-pentesting/135-pentesting-msrpc.md @@ -12,7 +12,7 @@ ``` ## Як працює MSRPC? -Ініційований клієнтським додатком, процес MSRPC включає виклик локальної процедури-стуба, яка взаємодіє з бібліотекою виконання клієнта для підготовки та передачі запиту на сервер. Це включає перетворення параметрів у стандартний формат представлення даних мережі. Вибір транспортного протоколу визначається бібліотекою виконання, якщо сервер віддалений, що забезпечує доставку RPC через мережевий стек. +Ініційований клієнтським додатком, процес MSRPC включає виклик локальної стуб-процедури, яка взаємодіє з бібліотекою виконання клієнта для підготовки та передачі запиту на сервер. Це включає перетворення параметрів у стандартний формат представлення даних мережі. Вибір транспортного протоколу визначається бібліотекою виконання, якщо сервер віддалений, що забезпечує доставку RPC через мережевий стек. ![https://0xffsec.com/handbook/images/msrpc.png](https://0xffsec.com/handbook/images/msrpc.png) @@ -40,34 +40,34 @@ rpcdump.py -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 -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}}