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
							
								
									fd033218a3
								
							
						
					
					
						commit
						82846fc2a9
					
				@ -34,7 +34,7 @@ use auxiliary/scanner/dcerpc/management
 | 
			
		||||
use auxiliary/scanner/dcerpc/tcp_dcerpc_auditor
 | 
			
		||||
rpcdump.py <IP> -p 135
 | 
			
		||||
```
 | 
			
		||||
所有选项除了 `tcp_dcerpc_auditor` 都是专门针对端口 135 上的 MSRPC 进行攻击的。
 | 
			
		||||
所有选项除了 `tcp_dcerpc_auditor` 都是专门针对端口 135 上的 MSRPC 进行攻击设计的。
 | 
			
		||||
 | 
			
		||||
#### 显著的 RPC 接口
 | 
			
		||||
 | 
			
		||||
@ -81,11 +81,66 @@ rpcdump.py <IP> -p 135
 | 
			
		||||
 | 
			
		||||
## 端口 593
 | 
			
		||||
 | 
			
		||||
来自 [rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools) 的 **rpcdump.exe** 可以与此端口交互。
 | 
			
		||||
来自 [rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools) 的 **rpcdump.exe** 可以与此端口进行交互。
 | 
			
		||||
 | 
			
		||||
## MSRPC 接口的自动模糊测试
 | 
			
		||||
 | 
			
		||||
MS-RPC 接口暴露了一个大型且通常未记录的攻击面。开源的 [MS-RPC-Fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer) PowerShell 模块基于 James Forshaw 的 `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、版本、绑定字符串(命名管道 / 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` – 以尊重 **参数依赖性** 的顺序执行过程,以便一个调用的输出可以作为下一个调用的输入(显著增加可达路径)
 | 
			
		||||
 | 
			
		||||
模糊测试器实现了两种策略:
 | 
			
		||||
 | 
			
		||||
1. **默认模糊测试器** – 随机原始值 + 复杂类型的默认实例
 | 
			
		||||
2. **排序模糊测试器**  – 依赖感知排序(见 `docs/Procedure dependency design.md`)
 | 
			
		||||
 | 
			
		||||
每个调用都以原子方式写入 `log.txt`;在崩溃后,**最后一行立即告诉您有问题的过程**。每个调用的结果也被分类到三个 JSON 文件中:
 | 
			
		||||
 | 
			
		||||
* `allowed.json` – 调用成功并返回数据
 | 
			
		||||
* `denied.json`  – 服务器响应 *访问被拒绝*
 | 
			
		||||
* `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 查询快速发现危险的过程或重放导致崩溃的确切调用链。
 | 
			
		||||
 | 
			
		||||
⚠️  模糊测试器是 *破坏性的*:预期服务崩溃甚至蓝屏 – 始终在隔离的虚拟机快照中运行。
 | 
			
		||||
 | 
			
		||||
### 自动化接口枚举与动态客户端生成 (NtObjectManager)
 | 
			
		||||
 | 
			
		||||
PowerShell 大师 **James Forshaw** 在开源的 *NtObjectManager* 模块中暴露了大多数 Windows RPC 内部结构。使用它,您可以在几秒钟内将任何 RPC 服务器 DLL / EXE 转换为 **功能齐全的客户端存根**,无需 IDL、MIDL 或手动反序列化。
 | 
			
		||||
PowerShell 大师 **James Forshaw** 揭示了大多数 Windows RPC 内部结构,位于开源的 *NtObjectManager* 模块中。使用它,您可以在几秒钟内将任何 RPC 服务器 DLL / EXE 转换为 **功能齐全的客户端存根** – 无需 IDL、MIDL 或手动反序列化。
 | 
			
		||||
```powershell
 | 
			
		||||
# Install the module once
 | 
			
		||||
Install-Module NtObjectManager -Force
 | 
			
		||||
@ -121,20 +176,18 @@ Connect-RpcClient $client -stringbinding 'ncacn_np:127.0.0.1[\\pipe\\efsrpc]' `
 | 
			
		||||
$ctx = New-Object Marshal.NdrContextHandle
 | 
			
		||||
$client.EfsRpcOpenFileRaw([ref]$ctx, "\\\127.0.0.1\test", 0)
 | 
			
		||||
```
 | 
			
		||||
身份验证(Kerberos / NTLM)和加密级别(`PacketIntegrity`,`PacketPrivacy`,…)可以通过 `Connect-RpcClient` cmdlet 直接提供 – 这对于 **绕过保护高权限命名管道的安全描述符** 理想。
 | 
			
		||||
认证(Kerberos / NTLM)和加密级别(`PacketIntegrity`,`PacketPrivacy`,…)可以通过 `Connect-RpcClient` cmdlet 直接提供 – 这对于**绕过保护高权限命名管道的安全描述符**非常理想。
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
### 上下文感知的 RPC 模糊测试 (MS-RPC-Fuzzer)
 | 
			
		||||
 | 
			
		||||
### 上下文感知 RPC 模糊测试 (MS-RPC-Fuzzer)
 | 
			
		||||
 | 
			
		||||
静态接口知识很好,但你真正想要的是 **覆盖引导模糊测试**,它理解 *上下文句柄* 和复杂的参数链。开源的 **MS-RPC-Fuzzer** 项目正是自动化了这个工作流程:
 | 
			
		||||
静态接口知识很好,但你真正想要的是**覆盖引导模糊测试**,它理解*上下文句柄*和复杂的参数链。开源的**MS-RPC-Fuzzer**项目正是自动化了这个工作流程:
 | 
			
		||||
 | 
			
		||||
1. 枚举目标二进制文件导出的每个接口/过程(`Get-RpcServer`)。
 | 
			
		||||
2. 为每个接口生成动态客户端(`Format-RpcClient`)。
 | 
			
		||||
3. 随机化输入参数(宽字符串长度、整数范围、枚举),同时尊重原始 **NDR 类型**。
 | 
			
		||||
4. 跟踪一个调用返回的 *上下文句柄*,以自动提供后续过程。
 | 
			
		||||
3. 随机化输入参数(宽字符串长度、整数范围、枚举),同时尊重原始**NDR 类型**。
 | 
			
		||||
4. 跟踪一个调用返回的*上下文句柄*,以自动提供后续过程。
 | 
			
		||||
5. 对所选传输(ALPC、TCP、HTTP 或命名管道)发起高频调用。
 | 
			
		||||
6. 记录退出状态/故障/超时,并导出 **Neo4j** 导入文件以可视化 *接口 → 过程 → 参数* 关系和崩溃集群。
 | 
			
		||||
6. 记录退出状态/故障/超时,并导出**Neo4j**导入文件,以可视化*接口 → 过程 → 参数*关系和崩溃集群。
 | 
			
		||||
 | 
			
		||||
示例运行(命名管道目标):
 | 
			
		||||
```powershell
 | 
			
		||||
@ -143,20 +196,18 @@ Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
 | 
			
		||||
-Iterations 100000 `
 | 
			
		||||
-OutDir .\results
 | 
			
		||||
```
 | 
			
		||||
一个单一的越界写入或意外异常将立即显示出触发它的确切 opnum + 模糊负载——这是一个稳定的概念验证利用的完美起点。
 | 
			
		||||
一个单一的越界写入或意外异常将立即显示出触发它的确切 opnum + 模糊负载——这是一个稳定的概念验证漏洞利用的完美起点。
 | 
			
		||||
 | 
			
		||||
> ⚠️  许多 RPC 服务在以 **NT AUTHORITY\SYSTEM** 身份运行的进程中执行。这里的任何内存安全问题通常会转化为本地特权提升或(当通过 SMB/135 暴露时)*远程代码执行*。
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
> ⚠️  许多 RPC 服务在以 **NT AUTHORITY\SYSTEM** 身份运行的进程中执行。这里的任何内存安全问题通常会导致本地特权提升或(当通过 SMB/135 暴露时)*远程代码执行*。
 | 
			
		||||
 | 
			
		||||
## 参考文献
 | 
			
		||||
 | 
			
		||||
- [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}}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user