|
```html 完成bypass uac漏洞利用 那个UAC弹窗跳出来的完成时候,我正端着咖啡。洞利屏幕右下角一个盾牌图标,完成蓝底白字,洞利问我要不要允许一个叫fodhelper.exe的完成程序对系统做更改。我点了“是洞利”,然后命令行里弹出了一个NT AUTHORITY\SYSTEM的完成shell。整个过程不到三秒。洞利咖啡还没凉。完成 这就是洞利bypass UAC。听起来像是完成什么高深的内核漏洞,其实微软自己留的洞利后门——准确说,是完成设计上的妥协。UAC从来就不是洞利安全边界,它只是完成个提醒。微软文档里写得清清楚楚:UAC不是用来防止管理员用户提权的,它只是让管理员用户知道有程序在提权。这句话翻译成人话就是:如果你已经是管理员,UAC拦不住你,它只是问你一声。 我用的方法叫fodhelper,Windows 10上最经典的UAC绕过之一。原理说出来简单得有点可笑。fodhelper.exe是Windows自带的一个程序,用来管理“按需功能”——比如你装个.NET 3.5或者韩语输入法,它就负责这个。这个程序有个特点:它以auto-elevate权限运行,启动时不需要弹UAC。但它启动的时候会去查注册表里HKCU\Software\Classes\ms-settings\Shell\Open\command这个键,看有没有人给它指定一个自定义的handler。如果有,它就执行那个handler指定的命令。 关键在于,HKCU是当前用户可写的。你不需要管理员权限就能往里面塞东西。于是整个利用链条就三行: reg add "HKCU\Software\Classes\ms-settings\Shell\Open\command" /f reg add "HKCU\Software\Classes\ms-settings\Shell\Open\command" /v DelegateExecute /t REG_SZ /d "" /f reg add "HKCU\Software\Classes\ms-settings\Shell\Open\command" /ve /t REG_SZ /d "cmd.exe /c start cmd.exe" /f 然后运行fodhelper.exe。没了。一个SYSTEM权限的cmd窗口就弹出来了。我第一次跑通的时候盯着那个窗口看了好几秒,总觉得哪里不对——这也太容易了。后来查了资料才知道,微软在Windows 10 1809之后加了缓解措施,但直到今天,类似的COM handler劫持手法依然有一堆变种能用。比如computerdefaults.exe、sdclt.exe,甚至eventvwr.exe,原理都差不多:找一个auto-elevate的二进制,看它启动时读不读用户可写的注册表路径。 我试过eventvwr那个。它启动时会查HKCU\Software\Classes\mscfile\shell\open\command。你把这个键指向cmd.exe,然后运行eventvwr.exe——事件查看器还没打开,cmd已经以SYSTEM身份跑起来了。微软后来在某个补丁里堵了这条路,但总有新的。这就像打地鼠。你堵住一个,安全研究员又找到另一个。Windows里auto-elevate的程序太多了,每个都可能是个入口。 有人会说,那你得先拿到管理员账户才行。没错。但现实里,钓鱼拿到的凭据往往就是管理员组的。或者你通过其他漏洞拿到了一个管理员用户的shell,但UAC挡着,你没法直接提权到SYSTEM。这时候bypass UAC就是最后一块拼图。它不华丽,不涉及内存破坏,没有堆喷射,没有ROP链。它就是利用Windows自己的设计逻辑,让系统帮你把权限提上去。 我后来在测试环境里把整个流程写成了脚本。三行注册表操作,一行启动命令。跑完之后清理掉注册表键,不留痕迹。唯一能看到的,是Windows事件日志里fodhelper.exe的启动记录。但那个日志默认不记录命令行参数,你只能看到一个程序启动了,不知道它干了什么。 这种手法在红队里叫“UAC bypass via registry hijacking”。在蓝队眼里,它是一类需要监控的异常行为——比如fodhelper.exe被非预期地启动,或者HKCU\Software\Classes下出现可疑的ms-settings键。但说实话,普通企业环境里,有多少人盯着这些?大多数SIEM规则还在看进程名和命令行,而fodhelper.exe本身是合法程序,命令行也是空的。你只能靠父进程和注册表写入行为来关联。漏报率不低。 我关掉那个SYSTEM shell的时候,咖啡已经温了。整个利用过程没有触发任何杀软告警,Windows Defender安静得像没看见。这大概就是bypass UAC最让人不安的地方——它太安静了。没有漏洞利用的喧嚣,没有内存崩溃的噪音。你只是让Windows自己,帮你把门打开了。 ``` |