0x00概念
UAC是windows特有的一个账户权限控制的模块,其全名是user account control。
部分敏感操作需要经过uac的授权,如果不能提供管理员身份,则结束进程,否则继续下一步
权限分为4个等级,最上面一级是严格模式,所有操作都需要管理员权限验证
关键路径
UAC强度级别
1 | reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "ConsentPromptBehaviorAdmin" |
启动UAC策略
1 | reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLUA" |
禁用UAC桌面弹框提示
1 | reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "PromptOnSecureDesktop" |
0x01使用情景
1、配置Windows Update
2、增加、删除账户、更改账户类型
3、更改UAC设置
4、安装设备驱动
5、安装ActiveX
6、复制到ProgramFile或者Windows目录下
7、查看其他用户的文件夹
0x02Bypass
绕过UAC通常用于提权或者绕过杀毒软件的检测,在进行敏感操作的时候EDR或者杀毒不会弹窗提示
以下为使用bypass工具打开软件和未使用bypass工具打开软件的区别
有以下几种可以Bypass UAC的方式
1、DLL劫持
将shellcode注入到高权限的DLL中,可以在高权限下执行操作并且能直接绕过UAC
2、漏洞利用
使用Windows内核漏洞Bypass
3、远程注入
配合COM接口注入shellcode后绕过UAC
1 | # 定义目标系统的计算机名和凭据 |
4、白加黑劫持
在白程序中加入恶意代码,原理与DLL劫持类似
5、COM接口技术
COM接口是windows接口对象的一种,可以进行对象的创建和方法调用
(1)COM对象劫持
修改注册表键值劫持合法COM对象,通过修改注册表的CLSID指向恶意DLL
(2)恶意DLL注入
同上
(3)UAC绕过
原理
某些COM对象在调用时会自动提升权限,并且不会有弹窗提示,可执行高权限操作
常见利用接口
ICMLuaUtil接口
0x03提权
1、metasploit模块
exploit/windows/loacal/ask
会在目标主机上创建一个exe文件,运行提升权限的程序,当用户点击是的时候会返回一个system的shell
1 | use exploit/windows/local/ask |
exploit/windows/local/bypassuac
通过进程注入到受信任的证书绕过UAC,使用的前提是当前用户必须在管理员组中,且UAC必须为默认设置(“仅在程序试图更改我的计算机时提醒我”)
成功后会返回一个新的session,在里面输入getsystem提权的指令就会返回一个system的shell
1 | use exploit/windows/local/bypassuac |
2、CVE漏洞
CVE-2019-1388
默认情况下,Windows会在一个单独的桌面上显示所有的UAC提示——Secure Desktop
这些提示是由名为consent.exe的可执行文件产生的,该可执行文件以NT AUTHORITY\SYSTEM权限运行,完整性级别为System
https://github.com/jas502n/CVE-2019-1388
3、其他提权方式
Ladon工具
https://github.com/k8gege/LadonGo
Empire中的bypassuac
https://github.com/EmpireProject/Empire
CobaltStrike的UAC模块
0x04防御
1、保证最低权限运行方式
2、本地使用管理员登录的话,则将权限开启最高,始终通知
3、不让内网机器使用管理员权限
0x05总结
UAC的作用主要还是用于防止以当前身份进行恶意操作,出现弹窗提示当前用户正在进行敏感操作。绕过UAC一般是为了能在windows提升权限到管理员,从而不会在进行敏感操作的时候进行弹窗,需要用户确认。同时一些杀毒或者安全软件是根据UAC的机制来防止系统软件被篡改,这样可以绕过一些安全软件的追查和阻止,并避免告警,提高了行动隐匿性。