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 绕过技术统一封装:
| 技术 | 一句话原理 |
|---|---|
CmstpElevatedCOM | PEB 伪装 + ICMLuaUtil COM 的ShellExec直接执行文件 |
ColorDataProxy | PEB 伪装 + 写注册表 + IColorDataProxy 的LaunchDccw间接触发 |
EditionUpgradeManager | 篡改windir注册表 + IEditionUpgradeManager 提权 COM 执行 |
SilentCleanupWinDir | 篡改windir注册表 + 启动 SilentCleanup 计划任务 |
RegistryShellCommand | 改写ms-settings\Shell\Open\command+ 触发自动提权 EXE |
TrustedPathDLLHijack | 伪造C:\Windows \目录 + DLL 劫持自动提权 EXE |
SspiUacBypass | SSPI 数据报上下文伪造令牌 + 创建 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.exe、consent.exe),就静默放行,不弹 UAC 提示框。而它判断"你是谁",依赖的就是进程环境块(PEB,Process Environment Block)中记录的镜像路径和命令行。
伪装三步骤:
- 写入假内存:分配一块内存,写入字符串
c:\Windows\explorer.exe和explorer.exe - 篡改 PEB 字段:把这些字符串的地址塞进
PEB->ProcessParameters的ImagePathName和CommandLine字段 - 同步模块表:通过
LdrEnumerateLoadedModules回调,把主模块的FullDllName/BaseDllName一并改掉
关键回调逻辑在LdrEnumModulesCallback(见CmstpElevatedCOM/src/standalone/CmstpElevatedCOM.cpp#L145-L159):找到主模块后直接覆盖其名称,让进程"自报家门"为 explorer.exe。
这样,COM 子系统在检查调用者身份时就会"被骗",认为请求来自可信进程,于是把提权对象交给你,全程不触发 UAC 弹窗。
💡 这套 PEB 伪装代码同样被复用在
ColorDataProxy/src/standalone/ColorDataProxy.cpp和EditionUpgradeManager/src/standalone/EditionUpgradeManager.c中——所有"提权 COM"类绕过都依赖它。
⚡ ICMLuaUtil:一个接口直接执行任意文件
ICMLuaUtil是cmstp.dll(COM 属性页服务器)中一个未公开文档的 COM 接口,CLSID 为{3E5FC7F9-9A51-4367-9063-A120244FBEC7}。它原本服务于颜色配置工具(Cmstp)的管理员功能。
它的关键能力在方法表(CmstpElevatedCOM/src/standalone/CmstpElevatedCOM.cpp#L20-L108中手工还原的 VTable):
ShellExec:以管理员权限执行指定文件——这就是"任意文件执行"的落点SetRegistryStringValue/DeleteRegistryStringValue:以管理员权限读写 HKLM 注册表
完整攻击链只有 3 步:
- PEB 伪装为
explorer.exe(见上一节) - 通过
CoCreateInstanceAsAdmin(CmstpElevatedCOM/src/standalone/CmstpElevatedCOM.cpp#L116-L139)构造 MonikerElevation:Administrator!new:{3E5FC7F9-...},调用CoGetObject拿到提权的 ICMLuaUtil 对象 - 调用
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的实现思路:
- 在
C:\Users\<用户名>\Downloads\下伪造System32目录,把目标 EXE 复制为Clipup.exe - 把
HKCU\Environment\windir改成这个用户目录(让提权进程"以为"系统根在别处) - PEB 伪装 + 创建提权IEditionUpgradeManagerCOM 对象
- 调用
AcquireModernLicenseWithPreviousId,系统会去"%windir%\System32"找Clipup.exe执行 - 完成后还原 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.cpp | PEB 伪装 + ICMLuaUtil ShellExec 完整实现 |
CmstpElevatedCOM/src/CmstpElevatedCOMBOF.cpp | 同上技术的 BOF 版本 |
ColorDataProxy/src/standalone/ColorDataProxy.cpp | 注册表 + LaunchDccw 间接执行实现 |
ColorDataProxy/src/ICMLuaUtil.h | ICMLuaUtil 接口定义 |
ColorDataProxy/src/IColorDataProxy.h | IColorDataProxy 接口定义 |
EditionUpgradeManager/src/standalone/EditionUpgradeManager.c | windir 篡改 + 提权 COM 实现 |
RegistryShellCommand/src/standalone/RegistryShellCommand.c | ms-settings 注册表劫持实现 |
TrustedPathDLLHijack/src/standalone/TrustedPathDLLHijack.c | 空格目录 DLL 劫持实现 |
SspiUacBypass/src/standalone/SspiUacBypass.cpp | SSPI 令牌伪造实现 |
SspiUacBypass/src/standalone/CreateSvcRpc.cpp | SYSTEM 服务创建 RPC 逻辑 |
Havoc-UACBypass.py | Havoc C2 集成模块(7 种技术统一入口) |
Makefile | BOF 与独立 EXE 的一键构建脚本 |
🎯 总结
UAC-BOF-Bonanza 用一套统一的工程模板,把当前主流 UAC 绕过技术收敛成"一个 make + 一个 C2 模块"就能使用的 BOF 集合。理解它的核心只需抓住两条主线:
- PEB 伪装——通过篡改 PEB 的镜像名与模块表,骗过提权 COM 对象的"调用者身份"校验,这是
CmstpElevatedCOM、ColorDataProxy、EditionUpgradeManager三种 COM 绕过的共同地基 - 提权 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),仅供参考