Windows提权(二)——组策略与UAC
Windows提权总结(2)——绕过UAC与令牌窃取
接上回,本章我们主要介绍bypass UAC、组策略与令牌窃取提权
0x01 绕过 UAC 提权
1.1 UAC
UAC(User Account Control),用户账号控制。UAC
要求用户在执行可能影响计算机运行的操作或在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码进行操作确认,防止恶意操作。也就是说一旦用户允许启动的应用程序通过UAC验证,那么这个程序也就有了管理员权限。
UAC有如下四种设置要求:
-
始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户
-
仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户
-
仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度
-
从不提示:当用户为系统管理员时,所有程序都会以最高权限运行
需要UAC授权的操作有:
-
配置Windows Update
-
增加、删除账户
-
更改账户类型
-
更改UAC的设置
-
安装ActiveX
-
安装、卸载程序
-
安装设备驱动程序
-
将文件移动/复制到Program Files或Windows目录下
-
查看其它用户的文件夹
1.2 MSF利用
1.2.1 bypassuac模块
windows/local/bypassuac
,此模块适用于Win7及以下系统
使用此模块进行提权条件
是:
- UAC为默认设置或以下
- 会话权限为管理员组成员
设置Session执行
这边成功提权为我们的SYSTEM
1.2.2.RunAs模块
使用此模块进行提权条件
是:
- 需要点击UAC
- 会话权限为管理员组成员或知晓管理员密码
先获得一个管理员组成员会话权限
将该会话用于windows/local/ask
,此模块会上传一个文件进行提权,目标机器会弹出UAC,用户假如点击“是”,则我们这边提权成功
在使用RunAs
模块时,使用EXE::Custom选项创建一个可执行文件(需要进行免杀处理)
弹出UAC,点击是
此时会弹一个会话,直接getsystem就能提升为System权限
1.3 基于白名单Bypass
有些系统程序是直接获取管理员权限,而不会触发UAC弹框,这类程序称为白名单程序。
比如:CompMgmtLauncher.exe,ComputerDefaults.exe
当我们运行运行ComputerDefaults.exe程序时,并没有出现UAC弹窗,直接显示计算机的设置界面。
我们可以通过Procmon
工具监视启动这个进程的操作
启动过程如下
ComputerDefaults.exe进程会先查询注册表HKCU\Software\Classes\ms-settings\shell\open\command
中数据发现该路径不存在后,继续查询注册表HKCR\ms-settings\shell\open\command
中的数据并读取
查看相应路径下的注册表,发现该注册表路径HKCU\Software\Classes\ms-settings\shell\open\command
确实不存在。我们这时就可以自己构造这个注册表路径,然后将键值填充为C:\Windows\System32\cmd.exe
,这时再运行ComputerDefaults.exe就会弹一个system的cmd
0x02 组策略提权
SYSVOL
是域内的共享文件夹,用来存放登录脚本、组策略脚本等信息。
当域管理员通过组策略修改密码时,会在脚本中引入用户密码,导致密码泄露。
2.1利用SYSVOL还原组策略中保存的密码
域内共享文件夹SYSVOL
:
\\<DOMAIN>\SYSVOL\<DOMAIN>\Polices
所有域内主机都能访问,里面保存组策略相关数据
认证用户(所有域用户或者信任域里的用户)对SYSVOL
拥有读权限
- 组策略偏好GPP
映射驱动(Drives.xml)
创建本地用户
数据源(DataSources.xml)
打印机配置(Printers.xml)
创建/更新服务(Services.xml)
计划任务(ScheduledTasks.xml)
更改本地Administrator密码
域管理员在使用组策略批量管理域内主机时,如果配置组策略的过程中需要填入密码,那么该密码会被保存为cpassword
项到共享文件夹\SYSVOL下的xml文件,默认所有域内用户可访问,虽然被加密,但很容易被解密
搜索包含cpassword
的XML文件,获取AES加密的密码
开源解密脚本:
同时Kali也自带gpp-decrypt可进行破解
使用PowerShell解密后为
testsuccess!
2.2 MSF获取组策略密码
使用MSF下的
post/windows/gather/gpp
模块
使用此模块进行提权条件
是:
- 需要点击UAC
- 会话权限为管理员组成员或知晓管理员密码
成功则会回显凭据信息(借用Yangsir师傅的图)
0x03 令牌窃取提权
Windows Token其实叫Access Token(访问令牌),它是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access Token,这个Token在用户创建进程或者线程时会被使用,不断的拷贝
Windows有两种类型的Token:
-
主令牌(Delegation token)
-
模拟令牌(Impersonation token)
提权的利用点:当用户
注销
后,系统将会使主令牌切换为模拟令牌,而模拟令牌不会被清除,只有在重启
机器后才会清除
3.1 incognito窃取模拟令牌提权
在MSF中可使用Incognito
模块窃取token
首先要获取一个Session
meterpreter > load incognito
meterpreter > list_tokens -u //列举token
meterpreter > impersonate_token "NT AUTHORITY\\SYSTEM" //token窃取
meterpreter > steal_token 1252 //从进程窃取
meterpreter > rev2self or drop_token //返回之前token
如果有Impersonation Tokens Available
我们就可以窃取或者直接getsystem
提权(图自3gstudent)
如果进程有token,我们也可以steal_token pid
窃取token
3.2 利用Token获得TI权限
TI (TrustedInstaller)是从Windows Vista开始出现的一个内置安全主体,在Windows中拥有修改系统文件权限,本身是一个服务,以一个账户组的形式出现。它的全名是:NT SERVICE\TrustedInstaller
因此在Windows系统中,即使获得了管理员权限和system权限,也不能修改系统文件,我们需要获得TI (TrustedInstaller)权限
如图,system在C:\Windows\servicing
中没有写权限,只有TrustedInstaller对此文件夹拥有完全权限
MSF通过incognito获得TI权限
启动服务TrustedInstaller.exe
,然后利用incognito
获取TrustedInstaller.exe
的Token
sc.exe start Trustedinstaller
回到Meterpreter
meterpreter > ps
找到TrustedInstaller.exe
的PID,窃取他的Token
meterpreter > load incognito
meterpreter > steal_token 1772
meterpreter > getuid
窃取成功
虽然UID相同,但是可以写入C:\Windows\servicing
,权限已经是TrustedInstaller,证明我们提权已经成功
参考文章:
https://blog.csdn.net/Simon798/article/details/107051801