关于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工具

  1. 功能:枚举系统中的RPC服务器,反编译IDL接口

  2. 下载:https://github.com/silverf0x/RpcView

  3. 符号配置

    • 使用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
  4. 界面解析

    • 左侧:RPC服务器列表
    • 右侧:接口详细信息(含解析后的函数名)

0x03 RPC通信原理与PetitPotam实现

RPC通信基础

  1. IDL文件:定义接口的UUID、版本和函数原型
  2. ACF文件:描述接口特性(非必需)
  3. MIDL编译:生成客户端和服务端存根代码
  4. 协议类型
    • ncacn_np:通过SMB封装(命名管道)
    • ncacn_ip_tcp:直接TCP通信

RPC服务端实现关键API

RpcServerUseProtseqEp  // 指定协议和端点
RpcServerRegisterIfEx  // 注册接口
RpcServerListen        // 开始监听调用

RPC客户端实现关键API

RpcStringBindingCompose  // 生成绑定字符串
RpcBindingFromStringBinding  // 创建绑定句柄

PetitPotam利用分析

  1. EFSRPC协议

    • 接口UUID:c681d488-d850-11d0-8c52-00c04fd90f7e
    • 端点:\pipe\lsarpc
    • 关键函数:EfsRpcOpenFileRaw
  2. 利用原理

    • 通过UNC路径欺骗lsass.exe访问恶意管道
    • 利用格式:\\127.0.0.1/pipe/attacker\C$\test
    • 需要SecurityImpersonation权限
  3. 修复情况

    • CVE-2021-36942修复后无法再利用UNC欺骗

0x04 DiagTrack服务提权技术

服务分析

  1. 服务名称:诊断跟踪服务(DiagTrack)
  2. 默认状态:自动运行
  3. 可利用RPC接口
    • UtcApi_StartCustomTrace
    • UtcApi_SnapCustomTrace

利用步骤

  1. 构造RPC客户端调用接口
  2. 通过参数传递恶意UNC路径
  3. 服务进程访问攻击者控制的命名管道
  4. 模拟令牌创建SYSTEM权限进程

限制条件

  • 仅能从管理员提权至SYSTEM
  • 服务用户无法调用相关RPC接口

0x05 AzureAttestService服务提权

服务特征

  1. 关联组件:SQL Server 2019默认安装
  2. RPC接口
    • UUID:78224520-4978-4616-8075-3d514ad9896f
    • 端点:AzureAttestService
    • 协议:ncalrpc

利用方法

  1. 反编译生成IDL接口定义
  2. 构造RPC客户端调用Proc0函数
  3. 通过字符串参数传递恶意UNC路径
  4. 服务进程访问攻击者管道
  5. 模拟令牌实现提权

适用场景

  • 安装SQL Server 2019的环境
  • 服务账户(如SQL Server服务账户)提权

0x06 总结与防御建议

技术总结

  1. RPC接口Fuzz是发现本地提权漏洞的有效方法

  2. 关键挖掘点:

    • 特权进程暴露的RPC接口
    • 接受文件/路径参数的函数
    • 缺乏严格身份验证的接口
  3. 利用条件:

    • 需要SecurityImpersonation权限
    • 可通过服务账户提权至SYSTEM

防御建议

  1. 禁用不必要的RPC服务
  2. 及时安装安全更新(如KB5005408修复PetitPotam)
  3. 限制服务账户权限
  4. 监控命名管道异常访问

研究资源

  1. RpcView工具:https://github.com/silverf0x/RpcView
  2. 符号链接测试工具:https://github.com/googleprojectzero/symboliclink-testing-tools
  3. 参考实现:
    • https://github.com/crisprss/magicAzureAttestService
    • https://github.com/crisprss/PetitPotam

通过系统化的RPC接口分析和Fuzz技术,研究人员可发现更多潜在的本地提权漏洞,提升Windows系统安全性。

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下载符号表: 在RpcView中配置符号路径:Options > Configure Symbols 界面解析 : 左侧:RPC服务器列表 右侧:接口详细信息(含解析后的函数名) 0x03 RPC通信原理与PetitPotam实现 RPC通信基础 IDL文件 :定义接口的UUID、版本和函数原型 ACF文件 :描述接口特性(非必需) MIDL编译 :生成客户端和服务端存根代码 协议类型 : ncacn_np :通过SMB封装(命名管道) ncacn_ip_tcp :直接TCP通信 RPC服务端实现关键API RPC客户端实现关键API PetitPotam利用分析 EFSRPC协议 : 接口UUID: c681d488-d850-11d0-8c52-00c04fd90f7e 端点: \pipe\lsarpc 关键函数: EfsRpcOpenFileRaw 利用原理 : 通过UNC路径欺骗lsass.exe访问恶意管道 利用格式: \\127.0.0.1/pipe/attacker\C$\test 需要 SecurityImpersonation 权限 修复情况 : CVE-2021-36942修复后无法再利用UNC欺骗 0x04 DiagTrack服务提权技术 服务分析 服务名称 :诊断跟踪服务(DiagTrack) 默认状态 :自动运行 可利用RPC接口 : UtcApi_StartCustomTrace UtcApi_SnapCustomTrace 利用步骤 构造RPC客户端调用接口 通过参数传递恶意UNC路径 服务进程访问攻击者控制的命名管道 模拟令牌创建SYSTEM权限进程 限制条件 仅能从管理员提权至SYSTEM 服务用户无法调用相关RPC接口 0x05 AzureAttestService服务提权 服务特征 关联组件 :SQL Server 2019默认安装 RPC接口 : UUID: 78224520-4978-4616-8075-3d514ad9896f 端点: AzureAttestService 协议: ncalrpc 利用方法 反编译生成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系统安全性。