1. 项目概述:深入理解UAC与Bypass-UAC
在Windows渗透测试或红队评估中,获取一个初始立足点(比如一个普通用户权限的shell)往往只是开始。真正的挑战在于权限提升,而用户账户控制(User Account Control, UAC)是横亘在普通管理员权限与完整高权限之间的一道关键防线。很多刚入行的朋友可能会混淆“管理员权限”和“高完整性权限”。简单来说,你以管理员组成员的身份登录系统,默认启动的程序(如CMD或PowerShell)运行在“中完整性”级别,很多敏感操作(如写入系统目录、修改注册表关键项)依然会被UAC拦截。只有通过UAC弹窗确认后,程序才会在“高完整性”级别运行,这才是真正意义上的“管理员权限”。
“Bypass-UAC”(UAC绕过)技术,其核心目标就是在不触发那个经典UAC弹窗、无需用户交互的情况下,将中完整性进程的权限提升至高完整性。这并非利用系统漏洞,而是滥用Windows系统本身的设计逻辑和信任机制。PowerShell-Suite,作为一个功能强大的后渗透框架集合,内置了多种成熟、可靠的Bypass-UAC方法。掌握这些技术,对于深入理解Windows安全机制、进行有效的安全评估至关重要。这篇文章,我将从一个实战者的角度,拆解如何利用PowerShell-Suite中的技术实现UAC绕过,不仅告诉你“怎么做”,更会深入分析“为什么能这么做”,并分享我在实际对抗环境中积累的一些心得和避坑指南。
2. UAC绕过核心原理与PowerShell-Suite定位
在动手之前,我们必须先搞清楚UAC绕过的底层逻辑,否则你只是在机械地执行命令,遇到变种环境就会束手无策。
2.1 UAC机制简析与完整性级别
UAC的本质是一种强制完整性控制(Mandatory Integrity Control, MIC)和用户权限分离的体现。Windows为进程、文件、注册表项等对象分配了不同的完整性级别:低、中、高、系统。默认情况下,即使你是管理员,启动的Explorer.exe及其子进程(如从开始菜单运行的CMD)也是中完整性。当程序请求提升权限时,系统会检查其清单(Manifest)或调用特定API,然后决定是否弹出UAC对话框。
关键点在于“自动提升”(AutoElevation)。为了用户体验,微软允许一部分受信任的、由微软签名的系统组件(如MMC管理单元、某些控制面板项)在从受信任的父进程(如Explorer)启动时,可以自动以高完整性运行,而无需弹窗。Bypass-UAC技术的绝大多数方法,都是围绕“欺骗或利用这些受信任的组件”来展开的。
2.2 PowerShell-Suite在Bypass-UAC中的角色
PowerShell-Suite并非一个单一工具,它泛指一系列基于PowerShell的渗透测试框架和脚本集合,例如经典的 Empire 、 PowerSploit ,以及后续的 Nishang 脚本集。在UAC绕过场景中,它们主要提供两大价值:
- 内存加载与无文件攻击 :PowerShell脚本可以通过
IEX (Invoke-Expression)或.NET方法直接从网络或内存中加载执行,避免在磁盘上留下二进制文件,规避传统杀软的静态扫描。 - 成熟的绕过模块封装 :这些框架将研究人员发现的多种UAC绕过技术(如
FodHelper、EventVwr、ComputerDefaults等)封装成了易于调用的模块。你不需要手动去写注册表、模拟进程创建链,只需要调用模块并设置监听器即可。
例如,Empire框架中的 powershell/privesc/bypassuac 和 bypassuac_fodhelper 模块,就是自动化实现了利用受信任的 fodhelper.exe 程序进行绕过的过程。理解这些模块背后的手动步骤,能让你在框架失效(如被EDR检测)时,有能力进行手动利用或变种开发。
3. 主流Bypass-UAC技术手动实现深度解析
依赖框架很方便,但知其然更要知其所以然。下面我们深入两种最常见的手动绕过技术,看看PowerShell-Suite中的模块到底帮我们做了什么。
3.1 FodHelper.exe 绕过技术剖析
Fodhelper.exe 是Windows 10/11中用于管理“可选功能”的系统程序,位于 C:\Windows\System32 下,拥有微软签名和自动提升权限的特性。其绕过原理分为几个关键步骤:
第一步:劫持注册表关联 Fodhelper.exe 在启动时会查询注册表键值 HKCU:\Software\Classes\ms-settings\shell\open\command ,以确定如何打开“ms-settings”协议。默认情况下,这个键值可能不存在或指向系统应用。关键漏洞在于,当前用户(即使是中完整性)对这个注册表路径拥有写入权限。
手动操作流程如下:
- 在中完整性的PowerShell或CMD中,创建上述注册表结构。
这里,# 创建必要的注册表项和键值 New-Item -Path "HKCU:\Software\Classes\ms-settings\shell\open\command" -Force New-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\shell\open\command" -Name "DelegateExecute" -Value "" -Force # 将默认值设置为我们要执行的命令,例如启动高完整性CMD Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\shell\open\command" -Name "(default)" -Value "cmd.exe /c start cmd.exe" -Force(default)值就是fodhelper.exe会去执行的命令。DelegateExecute键值的存在是为了兼容性,置空即可。



被折叠的 条评论
为什么被折叠?



