关于Windows RPC挖掘的那些事
字数 1925 2025-08-29 08:32:30
Windows RPC挖掘与本地提权技术研究
0x01 前言
本文深入探讨通过Windows RPC机制挖掘本地提权漏洞的技术方法。研究发现,除了常见的BypassUAC和内核漏洞利用外,Windows RPC接口中存在多个可实现本地提权的攻击面。本文将详细介绍如何通过RPC Fuzz技术发现这些漏洞,并实现从普通用户到SYSTEM权限的提升。
0x02 RPC Fuzz方法论
RPC基础概念
RPC(远程过程调用)是Windows中重要的IPC机制之一,用于进程间通信。DCE/RPC是Windows的RPC实现,用于本地或远程机器上的进程交互。RPC服务器中的漏洞可能导致DoS、RCE或LPE(本地权限提升)。
工具选择与配置
RpcView工具
-
功能:枚举系统中的RPC服务器,反编译IDL接口
-
下载:https://github.com/silverf0x/RpcView
-
符号配置:
- 使用Windows SDK中的symchk.exe下载符号表:
cd "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\" symchk /s srv*c:\SYMBOLS*https://msdl.microsoft.com/download/symbols C:\Windows\System32\*.dll - 在RpcView中配置符号路径:Options > Configure Symbols
- 使用Windows SDK中的symchk.exe下载符号表:
-
界面解析:
- 左侧:RPC服务器列表
- 右侧:接口详细信息(含解析后的函数名)
0x03 RPC通信原理与PetitPotam实现
RPC通信基础
- IDL文件:定义接口的UUID、版本和函数原型
- ACF文件:描述接口特性(非必需)
- MIDL编译:生成客户端和服务端存根代码
- 协议类型:
ncacn_np:通过SMB封装(命名管道)ncacn_ip_tcp:直接TCP通信
RPC服务端实现关键API
RpcServerUseProtseqEp // 指定协议和端点
RpcServerRegisterIfEx // 注册接口
RpcServerListen // 开始监听调用
RPC客户端实现关键API
RpcStringBindingCompose // 生成绑定字符串
RpcBindingFromStringBinding // 创建绑定句柄
PetitPotam利用分析
-
EFSRPC协议:
- 接口UUID:
c681d488-d850-11d0-8c52-00c04fd90f7e - 端点:
\pipe\lsarpc - 关键函数:
EfsRpcOpenFileRaw
- 接口UUID:
-
利用原理:
- 通过UNC路径欺骗lsass.exe访问恶意管道
- 利用格式:
\\127.0.0.1/pipe/attacker\C$\test - 需要
SecurityImpersonation权限
-
修复情况:
- CVE-2021-36942修复后无法再利用UNC欺骗
0x04 DiagTrack服务提权技术
服务分析
- 服务名称:诊断跟踪服务(DiagTrack)
- 默认状态:自动运行
- 可利用RPC接口:
UtcApi_StartCustomTraceUtcApi_SnapCustomTrace
利用步骤
- 构造RPC客户端调用接口
- 通过参数传递恶意UNC路径
- 服务进程访问攻击者控制的命名管道
- 模拟令牌创建SYSTEM权限进程
限制条件
- 仅能从管理员提权至SYSTEM
- 服务用户无法调用相关RPC接口
0x05 AzureAttestService服务提权
服务特征
- 关联组件:SQL Server 2019默认安装
- RPC接口:
- UUID:
78224520-4978-4616-8075-3d514ad9896f - 端点:
AzureAttestService - 协议:
ncalrpc
- UUID:
利用方法
- 反编译生成IDL接口定义
- 构造RPC客户端调用
Proc0函数 - 通过字符串参数传递恶意UNC路径
- 服务进程访问攻击者管道
- 模拟令牌实现提权
适用场景
- 安装SQL Server 2019的环境
- 服务账户(如SQL Server服务账户)提权
0x06 总结与防御建议
技术总结
-
RPC接口Fuzz是发现本地提权漏洞的有效方法
-
关键挖掘点:
- 特权进程暴露的RPC接口
- 接受文件/路径参数的函数
- 缺乏严格身份验证的接口
-
利用条件:
- 需要
SecurityImpersonation权限 - 可通过服务账户提权至SYSTEM
- 需要
防御建议
- 禁用不必要的RPC服务
- 及时安装安全更新(如KB5005408修复PetitPotam)
- 限制服务账户权限
- 监控命名管道异常访问
研究资源
- RpcView工具:https://github.com/silverf0x/RpcView
- 符号链接测试工具:https://github.com/googleprojectzero/symboliclink-testing-tools
- 参考实现:
- https://github.com/crisprss/magicAzureAttestService
- https://github.com/crisprss/PetitPotam
通过系统化的RPC接口分析和Fuzz技术,研究人员可发现更多潜在的本地提权漏洞,提升Windows系统安全性。