0%

权限提升之组策略首选项和绕过UAC

0x01 组策略首选项提权

1、组策略首选项提权简介

 SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。SYSVOL在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的域范围内共享。整个SYsVOL目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在C:Windows\SYSVOL\DOMAIN\Policicsl目录中。
 在一般的域环境中,所有机器都是脚本化批量部署的,数据量通常很大。为了方便地对所有机器进行操作,网络管理员一般都会使用域策略来进行统一的配置和管理。大多数组织在创建域环境后,会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员密码的安全性,这些组织的网络管理员往往会修改本地管理员密码。
 但通过组策略统一修改的密码,虽然强度有所提高,但所有机器的本地管理员密码是相同的。攻击者获取了一台机器的本地管理员密码,就相当于获取了域中所有机器的本地管理员密码。
常见的组策略首选项(Group Policy Preferences,GPP):

  • 映射驱动器(Drives.xml )。
  • 创建本地用户。
  • 数据源(DataSources.xml )
  • 打印机配置(Printers.xml )
  • 创建/更新服务((Services.xml )
  • 计划任务(ScheduledTasks.xml )

    2、组策略首选项提权

(1)、前提,管理员通过组策略统一修改过密码

(2)、获取组策略的凭证

  管理员在域中新建一个组策略后,操作系统公日动在 SYSVOL 共享目录中生成一个 XML文件,该文件中保存了该组策略更新后的出调。该密码使用 AES-256加密算法,安全性还是比较高的。但是,2012年微软在官方网站公布了密码的私钥,因此保存在XML文件中的密码的安全性大大降低。任何域用户和域信仕的用尸均可对该共享目标进行访问,这就意味着,任何用户都可以访问保存在XML文件中的密码开将解密,从而域控中所有使用该账户/密码的本地管理员计算机。在SYSVOL中搜索,可以找到包含cpassword 的 XML文件。

手动查找cpassword
  1. 浏览SYSVOL文件夹,获取相关文件。
  2. 使用tpe命令直接搜索并访问xml文件:
    1
    2
    3
    type \\dc\sysvol\pentest.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml    
    #cpassword采用AES-256加密,加密后用户名gpp为‘LdN1Ot2OIIjsc/e+nROCMw'
    python gpprefdecrypt.py LdN1Ot2OIIjsc/e+nROCMw #解密
使用powershell 获取cpassword

 powersploit提供了Get-GPPPassword.ps1脚本,将脚本导入系统
PS: Get-GPPPassword

使用 Metasploit 查找cpassword

在metasploit中有一个自动查找cpassword的后渗透模块,post/windows/gather/credentials/gpp

使用Empire 查找cpassword
1
2
3
usemodule privesc/gpp
info
execute

除了Groups.xml还有几个组策略首选项文件中有可选的cpassword 属性,列举如下

1
2
3
4
5
Services\Scrvices.xml
scheduledTasks\ScheduledTasks.xml.
Printers\Printers.xml
Drives\Drives.xml
DataSources\DataSources.xml

3、组策略首选项提权的防御措施

 在用于管理组策略的计算机上安装KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年修复了组策略首选项提权漏洞,使用的方法就是不再将密码保存在组策略首选项中。

此外,需要对 Everyone 访问权限进行设置,具体如下

  • 设置共享文件夹SYSVOL的访问权限。
  • 将包含组策略密码的XML文件从SYsVOL目录中删除
  • 不要把密码放在所有域用户都有权访问的文件中
  • 如果需要更改域中机器的本地管理员密码,建议使用LAPS

0x02 绕过 UAC 提权分析及防范

  如果计算机的操作系统版本是Windows Vista或更高,在权限不够的情况下,访问系统磁盘的根目录(例如C:) Windows目录、Program Files目录,以及读、写系统登录数据库(Registry)的程序等操作,都需要经讨UAC (User Account Control,用户账户控制)的认证才能进行。

1、什么是 UAC

 UAC是微软为提高系统安全性在Windows Vista中引入的技术。UAC要求用户在执行可能影响计算机运行的操作或者在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作启动前对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设詈进行更改。
 在Windows Vista及更高版本的操作系统中,微软设置了安全控制策略,分为高、中、低三个等级。高等级的进程有管理员权限,中等级的进程有普通用户权限;低等级的进程,权限是有限的,以保证系统在受到安全威胁的损害最小。
需要UAC的授权才能进行的操作列举如下:

  • 配置Windows Update。
  • 增加/删除账户。
  • 更改账户类型。
  • 更改UAC的设置。
  • 安装ActiveX。
  • 安装/御载程序。
  • 安装设备驱动程序。
  • 将文件移动/复制到Program Files或Windows目录下。
  • 查看其他用户的文件夹。

UAC有如下四种设置要求:

  • 始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户。
  • 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地 Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户。
  • 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度。
  • 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行
    UAC选项

2、bypassuac 模块

 假设获取了目标机器的Meterpreter shell ,当前权限为普通用户权限,现在尝试系统的System权限。
 首先,运行exploit/windows/local/bypassuac模块,获得一个新的meterpreter Shel。然后,执行“getsystem”命令。再次查看权限,发现已经绕过UAC,获得了Svstem权限。
 在使用bypassuac模块提权时,当前用户必须在管理员组中,且UAC必须为默认设置。 当bypassuac模块运行时,会在目标机上创建多个文件,这些文件会被杀毒软件识别。但因为exploit/windows/local/bypassuac_injecton模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率。

1
2
msf6 > use exploit/windows/local/bypassuac
[*] Using configured payload windows/x64/meterpreter/reverse_tcp

3、RunAs 模块

 使用exploit/windows/local/ask模块,创建一个可执行文件,目标机器上会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个高权限的meterpreter shell
 要想使用该模块提权,当前用户必须在管理员组或者知道管理员的密码,对UAC的设置无要求,在使用RunAs模块时,需要使用EXE:Custom选项创建一个可执行文件(需进行免杀处理)

4、Nishang中的Invoke-PsUACme模块

/nishang/Escalation/Invoke-PsUACme.ps1

1
2
3
4
PS C:\Users\q\Desktop> Import-Module .\Invoke-PsUACme.ps1
PS C:\Users\q\Desktop> Invoke-PsUACme -Verbose
PS C:\Users\q\Desktop> Invoke-PsUACme -method oobe -Verbose
PS C:\Windows\temp> Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e mypayload"

 除此之外,可以使用-PayloadPath参数指定payload路径,使用-CustomDll64或-CustomDLL32参数,可以自定义DLL文件。

5、Empire中的bypassuac 模块

1
2
3
4
5
6
7
8
1.bypassuac模块
usemodule privesc/bypassuac #设置监听参数
execute

2.bypassuac_wscript模块 (只使用win7)
usemodule privesc/bypassuac_wscript
set Listener lab
execute #带*的角色提权成功

6、针对绕过UAC提权的防御措施

 在企业网络环境中,防止绕过UAC的最好的方法是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性。在家庭网络环境中,建议使用非管理员权限进行日常办公和娱乐等活动。使用本地管理员权限登录的用户,要将UAC设置为“始终通知”或者删除该用户的本地管理员权限(这样设置后,会像在 Windows Vista中一样,总是弹出警告)。另外,可以使用微软的EMET 或MalwareBytes来更好地防范0day漏洞。

【参考链接】


-------------本文结束感谢您的阅读-------------