目录
SYSVOL
SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。SYSVOL在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的域范围内共享。整个SYSVOL目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在 C:\Windows\SYSVOL\DOMAIN\Policies\ 目录中。
在一般的域环境中,所有机器都是脚本化批量部署的,数据量通常很大。为了方便地对所有的机器进行操作,网络管理员往往会使用域策略进行统一的配置和管理。大多数组织在创建域环境后,会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员密码的安全性,这些组织的网络管理员往往会修改本地管理员密码。
尽管如此,安全问题依旧存在。通过组策略统一修改的密码,虽然强度有所提高,但所有机器的本地管理员密码是相同的。攻击者获得了一台机器的本地管理员密码,就相当于获得了整个域中所有机器的本地管理员密码。
常见的组策略首选项(Group Policy Preferences,GPP)列举如下:
- 映射驱动器(Drives.xml)
- 创建本地用户
- 数据源(DataSources.xml)
- 打印机配置(Printers.xml)
- 创建、更新服务(Services.xml)
- 计划任务(ScheduledTasks.xml)
组策略首选项提权分析
1:创建组策略,批量修改域中机器的本地管理员密码
在域控上执行:开始——>运行——>输入 gpmc.msc ——>选择xie.com——>右键组策略对象——>新建,我这里新建一个test组策略
右键刚刚新建的组策略,编辑
会弹出一个组策略管理编辑器,然后 计算机配置——>首选项——>控制面板设置——>本地用户和组
右键本地用户和组——>新建——>本地用户
我们将域中每个计算机的本地administrator用户更名为 admin,并且设置新的密码 root@123456
然后将Domain Computers添加到组策略应用的组中
强制更新组策略
2:获取组策略的凭据
管理员在域中新建一个组策略后,操作系统会自动在SYSVO共享目录中生成一个XML文件,该文件中保存了该组策略更新后的密码。该密码使用AES-256加密算法,安全性还是比较高的。但是,2012年微软在官方网站上公布了该密码的私钥,导致保存在XML文件中的密码的安全性大大降低。任何域用户和域信任的用户均可对该共享目录进行访问,这就意味着,任何用户都可以访问保存在XML文件中的密码并将其解密,从而控制域中所有使用该账号、密码的本地管理员计算机。在SYSVOL中搜索,可以找到Groups.xml文件。找到其中的cpassword字段,该字段是用AES-256算法加密的,root@123456 加密后的密文为 Yw6hqEEKPZtyKUXpWd5UhxEZ13DAe64s9w8U7Sq55uw 。
C:\Windows\SYSVOL\domain\Policies\{ABDAFB3B-920B-4A1A-9B47-B0D8721244D4}\Machine\Preferences\Groups\Group.xml
(1)使用PowerShell获取cpassword
PowerSploit中的Get-GPPPassword.ps1脚本可以获取组策略中的密码。注意,我们只需要在域内任何一台以域用户权限登录的机器上均可查询到。
Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword
(2)使用MSF获取cpassword
MSF中 post/windows/gather/credentials/gpp 模块可以获取组策略中的密码。注意,我们只需要获取域内任何一台以域用户权限登录的机器的权限即可。
use post/windows/gather/credentials/gpp
set session 1
run
针对组策略首选项提权的防御措施
在用于管理组策略的计算机上安装 KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年修复了组策略首选项提权漏洞,使用的方法就是不再将密码保存在组策略首选项中。
此外,针对Everyone访问权限进行设置,具体如下:
- 设置共享文件夹SYSVOL的访问权限
- 将包含组策略密码的 XML 文件从 SYSVOL 目录中删除
- 不要把密码放在所有域用户都有权访问的文件中
- 如果需要更改域中机器的本地管理员密码,建议使用LAPS