Windows提权(二)——组策略与UAC

Windows提权总结(2)——绕过UAC与令牌窃取

接上回,本章我们主要介绍bypass UAC、组策略与令牌窃取提权

0x01 绕过 UAC 提权

1.1 UAC

UAC(User Account Control),用户账号控制UAC要求用户在执行可能影响计算机运行的操作或在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码进行操作确认,防止恶意操作。也就是说一旦用户允许启动的应用程序通过UAC验证,那么这个程序也就有了管理员权限。

UAC有如下四种设置要求:

  • 始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户

  • 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户

  • 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度

  • 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行

image

需要UAC授权的操作有:

  • 配置Windows Update

  • 增加、删除账户

  • 更改账户类型

  • 更改UAC的设置

  • 安装ActiveX

  • 安装、卸载程序

  • 安装设备驱动程序

  • 将文件移动/复制到Program Files或Windows目录下

  • 查看其它用户的文件夹

1.2 MSF利用

1.2.1 bypassuac模块

windows/local/bypassuac,此模块适用于Win7及以下系统

使用此模块进行提权条件是:

  • UAC为默认设置或以下
  • 会话权限为管理员组成员

image

设置Session执行

image

这边成功提权为我们的SYSTEM

1.2.2.RunAs模块

使用此模块进行提权条件是:

  • 需要点击UAC
  • 会话权限为管理员组成员或知晓管理员密码

先获得一个管理员组成员会话权限

image

将该会话用于windows/local/ask,此模块会上传一个文件进行提权,目标机器会弹出UAC,用户假如点击“是”,则我们这边提权成功

在使用RunAs模块时,使用EXE::Custom选项创建一个可执行文件(需要进行免杀处理)

image

弹出UAC,点击是

image

此时会弹一个会话,直接getsystem就能提升为System权限

image

1.3 基于白名单Bypass

有些系统程序是直接获取管理员权限,而不会触发UAC弹框,这类程序称为白名单程序。

比如:CompMgmtLauncher.exe,ComputerDefaults.exe

当我们运行运行ComputerDefaults.exe程序时,并没有出现UAC弹窗,直接显示计算机的设置界面。

image

我们可以通过Procmon工具监视启动这个进程的操作

启动过程如下

image

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

所有域内主机都能访问,里面保存组策略相关数据

image

认证用户(所有域用户或者信任域里的用户)对SYSVOL拥有读权限

  • 组策略偏好GPP
映射驱动(Drives.xml)
创建本地用户
数据源(DataSources.xml)
打印机配置(Printers.xml)
创建/更新服务(Services.xml)
计划任务(ScheduledTasks.xml)
更改本地Administrator密码

域管理员在使用组策略批量管理域内主机时,如果配置组策略的过程中需要填入密码,那么该密码会被保存为cpassword项到共享文件夹\SYSVOL下的xml文件,默认所有域内用户可访问,虽然被加密,但很容易被解密

搜索包含cpassword的XML文件,获取AES加密的密码

image

开源解密脚本:

https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1

同时Kali也自带gpp-decrypt可进行破解

使用PowerShell解密后为

testsuccess! 

2.2 MSF获取组策略密码

使用MSF下的

post/windows/gather/gpp模块

使用此模块进行提权条件是:

  • 需要点击UAC
  • 会话权限为管理员组成员或知晓管理员密码

image

成功则会回显凭据信息(借用Yangsir师傅的图)

image

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

image

如果有Impersonation Tokens Available我们就可以窃取或者直接getsystem提权(图自3gstudent)

image

如果进程有token,我们也可以steal_token pid窃取token

image

3.2 利用Token获得TI权限

TI (TrustedInstaller)是从Windows Vista开始出现的一个内置安全主体,在Windows中拥有修改系统文件权限,本身是一个服务,以一个账户组的形式出现。它的全名是:NT SERVICE\TrustedInstaller

因此在Windows系统中,即使获得了管理员权限和system权限,也不能修改系统文件,我们需要获得TI (TrustedInstaller)权限

image

如图,system在C:\Windows\servicing中没有写权限,只有TrustedInstaller对此文件夹拥有完全权限

image

MSF通过incognito获得TI权限

启动服务TrustedInstaller.exe,然后利用incognito获取TrustedInstaller.exe的Token

sc.exe start Trustedinstaller

image

回到Meterpreter

meterpreter > ps

image

找到TrustedInstaller.exe的PID,窃取他的Token

meterpreter > load incognito
meterpreter > steal_token 1772
meterpreter > getuid

窃取成功

image

虽然UID相同,但是可以写入C:\Windows\servicing,权限已经是TrustedInstaller,证明我们提权已经成功

参考文章:

https://blog.csdn.net/Simon798/article/details/107051801

https://blog.csdn.net/qq_36119192/article/details/104292591

https://www.4hou.com/posts/GvV7

posted @ 2021-12-23 21:08  0xL4k1d  阅读(856)  评论(0编辑  收藏  举报