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语言, 编程规范, 计划任务滥用