UAC-BOF-Bonanza核心原理:PEB伪装加ICMLuaUtil COM接口实现任意文件执行
2026/8/22 14:21:59 网站建设 项目流程

UAC-BOF-Bonanza核心原理:PEB伪装加ICMLuaUtil COM接口实现任意文件执行

【免费下载链接】UAC-BOF-BonanzaCollection of UAC Bypass Techniques Weaponized as BOFs项目地址: https://gitcode.com/gh_mirrors/ua/UAC-BOF-Bonanza

🔐 UAC-BOF-Bonanza 是一个把公开UAC 绕过(UAC Bypass)技术武器化为BOF(Beacon Object File)的开源项目。它的核心原理是:PEB 伪装+ICMLuaUtil 提权 COM 接口,让普通权限进程伪装成explorer.exe,从而通过 COM 以管理员权限执行磁盘上的任意文件。项目一次make即可同时构建 7 种绕过技术的 BOF 与独立可执行文件,并集成进 Havoc C2 框架。

🧩 什么是 UAC 绕过,为什么要做成 BOF?

Windows 的用户账户控制(UAC)把管理员权限拆成"普通令牌"和"提升令牌",即使你是管理员账户,日常进程也默认以低权限运行。UAC 绕过就是想办法拿到提升权限的代码执行,而BOF是 C2(如 Cobalt Strike / Havoc / Sliver)中一种无需落盘 PE 文件的可执行模块,体积小、隐蔽性强。

UAC-BOF-Bonanza 把 7 种公开 UAC 绕过技术统一封装:

技术一句话原理
CmstpElevatedCOMPEB 伪装 + ICMLuaUtil COM 的ShellExec直接执行文件
ColorDataProxyPEB 伪装 + 写注册表 + IColorDataProxy 的LaunchDccw间接触发
EditionUpgradeManager篡改windir注册表 + IEditionUpgradeManager 提权 COM 执行
SilentCleanupWinDir篡改windir注册表 + 启动 SilentCleanup 计划任务
RegistryShellCommand改写ms-settings\Shell\Open\command+ 触发自动提权 EXE
TrustedPathDLLHijack伪造C:\Windows \目录 + DLL 劫持自动提权 EXE
SspiUacBypassSSPI 数据报上下文伪造令牌 + 创建 SYSTEM 服务

所有技术均在Windows 10 (22H2)Windows 11 (23H2)上实测有效。

🎭 PEB 伪装原理:把进程"化妆"成 explorer.exe

这是整个项目最核心的技巧,代码见CmstpElevatedCOM/src/standalone/CmstpElevatedCOM.cpp中的SpoofExplorer()函数。

为什么 COM 提权会检查 PEB?

Windows 有一类"提权 COM 对象",通过特殊 Moniker(如Elevation:Administrator!new:{CLSID})创建。这类对象在激活时会做身份校验:如果调用者是受信任的系统进程(如explorer.execonsent.exe),就静默放行,不弹 UAC 提示框。而它判断"你是谁",依赖的就是进程环境块(PEB,Process Environment Block)中记录的镜像路径和命令行。

伪装三步骤:

  1. 写入假内存:分配一块内存,写入字符串c:\Windows\explorer.exeexplorer.exe
  2. 篡改 PEB 字段:把这些字符串的地址塞进PEB->ProcessParametersImagePathNameCommandLine字段
  3. 同步模块表:通过LdrEnumerateLoadedModules回调,把主模块的FullDllName/BaseDllName一并改掉

关键回调逻辑在LdrEnumModulesCallback(见CmstpElevatedCOM/src/standalone/CmstpElevatedCOM.cpp#L145-L159):找到主模块后直接覆盖其名称,让进程"自报家门"为 explorer.exe。

这样,COM 子系统在检查调用者身份时就会"被骗",认为请求来自可信进程,于是把提权对象交给你,全程不触发 UAC 弹窗

💡 这套 PEB 伪装代码同样被复用在ColorDataProxy/src/standalone/ColorDataProxy.cppEditionUpgradeManager/src/standalone/EditionUpgradeManager.c中——所有"提权 COM"类绕过都依赖它。

⚡ ICMLuaUtil:一个接口直接执行任意文件

ICMLuaUtilcmstp.dll(COM 属性页服务器)中一个未公开文档的 COM 接口,CLSID 为{3E5FC7F9-9A51-4367-9063-A120244FBEC7}。它原本服务于颜色配置工具(Cmstp)的管理员功能。

它的关键能力在方法表(CmstpElevatedCOM/src/standalone/CmstpElevatedCOM.cpp#L20-L108中手工还原的 VTable):

  • ShellExec:以管理员权限执行指定文件——这就是"任意文件执行"的落点
  • SetRegistryStringValue/DeleteRegistryStringValue:以管理员权限读写 HKLM 注册表

完整攻击链只有 3 步:

  1. PEB 伪装为explorer.exe(见上一节)
  2. 通过CoCreateInstanceAsAdminCmstpElevatedCOM/src/standalone/CmstpElevatedCOM.cpp#L116-L139)构造 MonikerElevation:Administrator!new:{3E5FC7F9-...},调用CoGetObject拿到提权的 ICMLuaUtil 对象
  3. 调用ShellExec(lpFile, ...),传入磁盘上任意 EXE 的路径,立即以管理员权限执行

由于校验已被 PEB 伪装绕过,整个过程无任何 UAC 弹窗。

🖼️ ColorDataProxy:不直接执行,而是"借刀杀人"

ColorDataProxy是更曲折的变体,源码在ColorDataProxy/src/standalone/ColorDataProxy.cpp。它不直接调ShellExec,而是利用系统自身的"颜色校准器"机制:

第 1 步:ICMLuaUtil 写注册表

调用提权 ICMLuaUtil 的SetRegistryStringValue,把目标文件路径写入:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\ICM\Calibration DisplayCalibrator = <你的目标 EXE 路径>

第 2 步:ICMLuaUtil 启动校准器

再创建一个提权的IColorDataProxyCOM 对象(CLSID 见ColorDataProxy/src/IColorDataProxy.h),调用其LaunchDccw方法。系统会以管理员权限启动颜色校准组件(DCCW),而组件启动时会自动读取刚才写入的DisplayCalibrator值并执行其中的文件。

第 3 步:清理现场

执行完成后调用DeleteRegistryStringValue删除注册表项,降低被发现的痕迹。

这种"注册表 + 间接触发"的链路比直接ShellExec多一层跳转,行为上更接近正常系统操作。

🗄️ 其他 5 种绕过技术速览

除了两个 COM 技术,项目还包含 5 种不同思路的 UAC 绕过:

1. EditionUpgradeManager —— 篡改 windir + 提权 COM

EditionUpgradeManager/src/standalone/EditionUpgradeManager.c的实现思路:

  1. C:\Users\<用户名>\Downloads\下伪造System32目录,把目标 EXE 复制为Clipup.exe
  2. HKCU\Environment\windir改成这个用户目录(让提权进程"以为"系统根在别处)
  3. PEB 伪装 + 创建提权IEditionUpgradeManagerCOM 对象
  4. 调用AcquireModernLicenseWithPreviousId,系统会去"%windir%\System32"找Clipup.exe执行
  5. 完成后还原 windir、删除伪造文件

2. SilentCleanupWinDir —— windir + 计划任务

SilentCleanupWinDir/src/SilentCleanupWinDirBOF.c同样篡改windir注册表,然后调用schtasks启动系统自带的SilentCleanup计划任务,该任务会去(已被篡改的)windir 下执行被替换的系统文件。

3. RegistryShellCommand —— 注册表命令劫持

RegistryShellCommand/src/standalone/RegistryShellCommand.c的思路:把目标 EXE 写入HKCU\Software\Classes\ms-settings\Shell\Open\command,然后把DelegateExecute置空,再执行自带自动提权的ComputerDefaults.exe。它特意Sleep(10秒)再触发,以规避 Defender 的UACBypassExp.T行为检测。

4. TrustedPathDLLHijack —— 空格目录 + DLL 劫持

TrustedPathDLLHijack/src/standalone/TrustedPathDLLHijack.c利用 Windows 路径解析缺陷:创建带尾随空格的目录C:\Windows \,把ComputerDefaults.exe和你的恶意Secur32.dll复制进去。自动提权的 EXE 按 DLL 搜索顺序会优先加载同目录的假 Secur32.dll,从而以管理员权限加载你的载荷。

5. SspiUacBypass —— 令牌伪造 + SYSTEM 服务

SspiUacBypass/src/standalone/SspiUacBypass.cpp走的是完全不同路线:通过SSPI 数据报上下文伪造一个网络认证令牌,冒充该令牌后调用CreateSvcRpc.cpp中的 RPC 逻辑创建一个SYSTEM 服务,直接拿到系统最高权限。

🛠️ 一键编译与 C2 加载步骤

编译(需要 MinGW 交叉编译器):

在仓库根目录执行make,构建脚本见根目录 [Makefile]。一次构建会生成两类产物:

  • 各技术目录下的bin/*.o—— BOF 目标文件(供 C2 内联执行)
  • 各技术目录下的bin/standalone/*.exe—— 独立可执行文件(可单独测试)

Havoc C2 加载:

根目录的 [Havoc-UACBypass.py] 是集成模块,通过脚本管理器加载后,使用uac-bypass [子命令] (参数)触发:

uac-bypass elevatedcom <目标EXE路径> # ICMLuaUtil COM 绕过 uac-bypass colordataproxy <目标EXE路径> # ColorDataProxy 间接执行 uac-bypass editionupgrade <目标EXE路径> # EditionUpgradeManager 绕过 uac-bypass trustedpath <目标DLL路径> # DLL 劫持绕过 uac-bypass sspidatagram <参数> # SSPI 令牌伪造绕过 uac-bypass registrycommand <目标EXE路径> # 注册表命令劫持 uac-bypass silentcleanup <目标EXE路径> # windir + 计划任务

Sliver C2 加载:

每种技术目录都附带extension.json(如CmstpElevatedCOM/extension.json,参数为file_to_execute),把技术文件夹拷入 Sliver 扩展目录、执行make后用extensions load加载即可。

⚠️ 检测风险与合规提示

项目作者在 OpSec 注意事项中明确提醒:

  • 这 7 种技术全部是公开技术,主流 EDR / SOC 均能检测。例如 Elastic 安全实验室曾发布博客逐一演示了这些绕过手法及其检测策略
  • RegistryShellCommand内置的 10 秒延时就是为了躲开 Defender 行为规则,但这类"时间差"技巧同样会被高级检测覆盖
  • 使用前请先阅读源码,确认符合你的使用场景

📌请务必仅在合法授权的测试环境(如 CTF、红蓝对抗演练、自有安全研究)中使用,未经授权对他人系统实施 UAC 绕过属于违法行为。

📚 关键源码文件速查

文件路径作用
CmstpElevatedCOM/src/standalone/CmstpElevatedCOM.cppPEB 伪装 + ICMLuaUtil ShellExec 完整实现
CmstpElevatedCOM/src/CmstpElevatedCOMBOF.cpp同上技术的 BOF 版本
ColorDataProxy/src/standalone/ColorDataProxy.cpp注册表 + LaunchDccw 间接执行实现
ColorDataProxy/src/ICMLuaUtil.hICMLuaUtil 接口定义
ColorDataProxy/src/IColorDataProxy.hIColorDataProxy 接口定义
EditionUpgradeManager/src/standalone/EditionUpgradeManager.cwindir 篡改 + 提权 COM 实现
RegistryShellCommand/src/standalone/RegistryShellCommand.cms-settings 注册表劫持实现
TrustedPathDLLHijack/src/standalone/TrustedPathDLLHijack.c空格目录 DLL 劫持实现
SspiUacBypass/src/standalone/SspiUacBypass.cppSSPI 令牌伪造实现
SspiUacBypass/src/standalone/CreateSvcRpc.cppSYSTEM 服务创建 RPC 逻辑
Havoc-UACBypass.pyHavoc C2 集成模块(7 种技术统一入口)
MakefileBOF 与独立 EXE 的一键构建脚本

🎯 总结

UAC-BOF-Bonanza 用一套统一的工程模板,把当前主流 UAC 绕过技术收敛成"一个 make + 一个 C2 模块"就能使用的 BOF 集合。理解它的核心只需抓住两条主线:

  1. PEB 伪装——通过篡改 PEB 的镜像名与模块表,骗过提权 COM 对象的"调用者身份"校验,这是CmstpElevatedCOMColorDataProxyEditionUpgradeManager三种 COM 绕过的共同地基
  2. 提权 COM 执行原语——ICMLuaUtil 的ShellExec直接执行任意文件,SetRegistryStringValue+LaunchDccw间接执行,AcquireModernLicenseWithPreviousId借"版本升级"流程执行,殊途同归

掌握这两点,你就能读懂项目里 7 种绕过技术的每一行关键代码,也能理解为什么 EDR 厂商把"PEB 不一致"和"提权 Moniker 使用"当作高置信度告警信号。

【免费下载链接】UAC-BOF-BonanzaCollection of UAC Bypass Techniques Weaponized as BOFs项目地址: https://gitcode.com/gh_mirrors/ua/UAC-BOF-Bonanza

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询