undefinedable/ZUAC

GitHub: undefinedable/ZUAC

基于 SilentCleanup 计划任务和 WINDIR 环境变量劫持的纯 C 语言 Windows UAC 绕过工具

Stars: 0 | Forks: 0

# ZUAC (Zeppelin UAC) 利用环境变量篡改和 Windows Task Scheduler 实现的 UAC 绕过技术,采用纯 C 语言编写。 作者:@undefinedable ## 概述 ZUAC 实现了一种基于滥用 **SilentCleanup** 计划任务的**无文件** (fileless) 用户账户控制 (UAC) 绕过技术。 该技术依赖于某些计划任务的以下特性: - 配置为 **RunLevel = Highest (自动提升)** - 可由标准用户触发 - 在其执行路径中引用了**环境变量** (例如 `%windir%`) 通过覆盖用户可控的环境变量,执行流可以被重定向到任意 payload,从而在不提示用户的情况下实现提权执行。 这种行为源于 Task Scheduler 和环境变量解析中的设计决策,其中用户控制的注册表值可能会影响提权执行路径。 ## 技术细节 ### SilentCleanup 任务滥用 目标计划任务: ``` \Microsoft\Windows\DiskCleanup\SilentCleanup ``` 关键属性: - 以**最高权限**运行 - 可由**标准用户**调用 - 执行: ``` %windir%\system32\cleanmgr.exe ``` 由于 `%windir%` 是从环境变量解析的,因此它成为了一个可控的原语。 ### 环境变量劫持 ZUAC 修改: ``` HKEY_CURRENT_USER\Environment\WINDIR ``` 这允许非特权用户影响计划任务解析其执行路径的方式。 当任务执行时: - `%windir%` 被替换为攻击者控制的数据 - 系统执行被替换的二进制文件或命令链 之所以有效,是因为提权进程可能会继承或解析受用户上下文影响的环境变量。 ### COM 交互 (Task Scheduler) 实现使用了: - `ITaskService` - `ITaskFolder` - `IRegisteredTask` 全部通过 **COBJMACROS** 调用,实现了纯 C 风格的 COM 交互,无需 C++ 抽象层。 执行流程: 1. 初始化 COM (`CoInitializeEx`) 2. 连接到 Task Scheduler 3. 获取 SilentCleanup 任务 4. 通过 `IRegisteredTask::RunEx` 执行 ### 环境刷新 在修改注册表后,代码会广播: ``` WM_SETTINGCHANGE ``` 这确保更新后的环境变量在系统范围内被识别,而无需注销。 ### 执行流程摘要 1. 构建 payload 路径 2. 在 HKCU 中设置 `WINDIR` 3. 广播环境更新 4. 通过 COM 触发 SilentCleanup 任务 5. 发生提权执行 6. 短暂休眠 7. 移除注册表修改 (清理) 这产生了一个**无文件提权原语**,仅需要临时的注册表修改。 ### 操作系统行为说明 - 行为取决于 Windows 构建/版本 - 某些构建已修补或强化了此向量 - 代码中动态处理了引号差异 ## 编译 使用 **Developer Command Prompt for Visual Studio**: ``` cl /nologo /W4 /DUNICODE /D_UNICODE main.c ``` 所需库: - Advapi32.lib - User32.lib - Ole32.lib - OleAut32.lib - Taskschd.lib ## 用法 ZUAC 按如下方式确定 payload: 1. `argv[1]` (最高优先级) 2. `lpCmdLine` 回退 示例: ``` zuac.exe C:\Path\to\payload.exe ``` 如果未提供参数,它会尝试使用原始命令行执行。 ## 警告 ## 参考资料 - https://www.tiraniddo.dev/2017/05/exploiting-environment-variables-in.html - https://github.com/hfiref0x/UACME - https://github.com/blue0x1/uac-bypass 附加说明: - SilentCleanup 任务在引用 `%windir%` 时以提权权限执行,而该变量可以通过注册表进行用户控制。 - 检测规则通常监控 `HKCU\Environment\windir` 的修改,因为其与提权技术相关联。 ## 法律免责声明 本项目仅严格用于: - 安全研究 - 教育目的 - 防御性开发和测试 未经明确许可对系统使用此代码可能违反适用法律法规。作者对滥用或本软件造成的损害不承担任何责任。
标签:0day挖掘, COM接口操作, Conpot, RuleLab, SilentCleanup, UAC绕过, Windows安全, 内核安全, 协议分析, 客户端加密, 攻击向量, 文件攻击, 本地提权, 权限提升, 横向移动, 特权升级, 环境变量劫持, 端点可见性, 纯C语言, 编程规范, 计划任务滥用