想象一下,你通过精心设计的钓鱼邮件或在内网中横向移动,终于成功控制了一台目标PC。
你兴奋地在 Shell 中敲下 whoami /groups,屏幕上赫然显示你所在的组是:BUILTIN\Administrators(管理员组)。
“太棒了!”你心想,“我是管理员,干什么都可以。”
于是,你试图运行 Mimikatz 抓取密码,或者试图向 C:\Windows\System32 写入一个持久化后门。
结果,你只得到这个结果:Access Denied(拒绝访问)。
你可能会怀疑人生:“我明明在 Administrators 组里,为什么连个文件都写不进去?”
欢迎来到 UAC(用户账户控制)。
在 Windows Vista 之前(比如 XP 时代),管理员就是神,运行什么都是最高权限。这导致病毒一旦进来就能毁灭系统。
为了安全,微软引入了 UAC (User Account Control)。它的核心逻辑是:
“平时是平民,用时才变身。”
即使你是管理员,登录后系统也只给你一个“缩水版”的权限令牌(Medium Integrity)。只有当你真正需要干大事(比如装软件、改系统设置)时,系统才会弹出一个黑屏窗口问你:“你确定要允许此应用对你的设备进行更改吗?”
只有你点了“是”,系统才会给你一个完整版的高权限令牌(High Integrity)。
对于红队黑客来说,这个弹窗是致命的。
因为我们在远程控制别人的电脑,一旦触发这个弹窗,受害者会在屏幕上看到,而我们不仅看不到弹窗,还会因为无法点击“是”而被拒之门外。
BypassUAC 的目的,就是不触发那个弹窗,悄悄地让系统把“完整版权限”交还给我们。
既然 UAC 这么严,为什么还能绕过呢?因为 Windows 对“自家人”非常偏心。
微软设置了一个 “白名单机制” (AutoElevate)。
系统里有许多微软自带的程序(比如 任务管理器、事件查看器、fodhelper.exe 等),它们在启动时,系统会默认它们是安全的,自动静默提升权限,不会弹窗。
这就给了我们可乘之机。
典型攻击思路:
如果我能“欺骗”或者“劫持”这些受信任的白名单程序,让它们在拥有高权限的时候,顺便帮我执行一下我的恶意代码,那我不也就拥有高权限了吗?
这就像是:你想进一个高级VIP俱乐部(高权限),门口保安(UAC)不让你进。但这时候,俱乐部的老板(白名单程序)来了,保安不敢拦。你迅速躲进老板的行李箱里(注入/劫持),就这样大摇大摆地混进去了。
具体怎么躲进行李箱?这涉及到一些基础知识。
虽然绕过方法有几十种,但万变不离其宗,主要归结为以下三类技术。
这是最常见、最经典的技术(例如著名的 fodhelper 利用)。
fodhelper.exe(Windows 功能管理工具,自动高权限)。ms-settings 协议。我们将注册表中该协议的关联命令改为 cmd.exe。fodhelper.exe。fodhelper(高权限)读取注册表 -> 发现命令是 cmd.exe -> 以高权限启动 CMD。你可能会问:“DLL 劫持我懂,但我不是管理员,我没办法把我的毒 DLL 复制到 C:\Windows\System32 这种受保护目录去劫持系统程序啊?”
这就引入了 Windows 的一个神奇 COM 接口:IFileOperation。
IFileOperation 是资源管理器用来复制文件的组件。它是一个自动提权的 COM 对象。只要你不是把 UAC 设置为最高级别,它就会不弹窗地帮你把文件复制到系统目录。cryptbase.dll)。IFileOperation 接口,请求系统把这个 DLL 复制到 C:\Windows\System32\sysprep\ 目录下(普通方式无法写入)。sysprep.exe。sysprep 在高权限目录下发现了恶意的 DLL 并加载,代码执行成功。这是一种更“优雅”的技术,通常不需要文件落地。
ShellExec),让这个高权限的对象帮我们去运行指定的程序。原理听起来很复杂,但在实战中,我们通常使用现成的工具。
hfiref0x 开发了名为 UACME 的开源项目,它几乎是 BypassUAC 界的“百科全书”,收录了 70 多种绕过方法。
https://github.com/hfiref0x/UACMEAkagiUACME 编译后会得到一个 akagi64.exe。使用方法非常简单:
# 语法:akagi64.exe [方法编号] [你想运行的程序]
# 例子:使用方法 61 (基于注册表劫持),启动一个高权限的 CMD
akagi64.exe 61 c:\windows\system32\cmd.exe
一旦成功,你会发现弹出的新 CMD 窗口标题栏上写着“管理员”,或者运行 whoami /groups 时,能看到 High Mandatory Level(高完整性级别)。这意味着你拿回了原本属于你的权力。
不要以为用了 UACME 就万事大吉。现在的 EDR(终端检测响应系统)对这些行为极其敏感。
Akagi.exe 这个文件本身就是全网通缉犯,落地即杀。实战中我们通常只参考其代码原理,自己重写一个小工具。fodhelper.exe 突然生出了一个 cmd.exe 或 powershell.exe 作为子进程,这在正常系统中是不可能发生的,EDR 会直接报警。HKCU\Software\Classes\ms-settings\ 这种敏感注册表位置,是 EDR 的重点监控对象。最后,强调几个新手最容易犯的错误: