ACL Enumeration
ACLs in Active Directory control who can read, modify, and delete objects and their attributes. Misconfigured ACLs are among the most impactful privilege escalation paths in AD environments: a single GenericWrite or WriteDACL on a privileged account can give you direct control without exploiting any software vulnerability. ACL enumeration identifies these paths so you know what to abuse.
Find writable objects
BloodyAD's get writable scans the directory for objects your current account has write permissions on. This is the fastest way to identify ACL-based attack paths from your current context.
distinguishedName: CN=svc-web,CN=Users,DC=corp,DC=local RIGHT: WRITE_PROP attribute: servicePrincipalName distinguishedName: CN=WS01,CN=Computers,DC=corp,DC=local RIGHT: WRITE_PROP attribute: msDS-AllowedToActOnBehalfOfOtherIdentity
Each finding maps directly to an attack:
Writable
servicePrincipalNameon a user: set an SPN and Kerberoast itWritable
msDS-AllowedToActOnBehalfOfOtherIdentityon a computer: RBCD abuse, impersonate any user to that hostWritable
memberon a privileged group: add yourself to Domain AdminsWritable
userAccountControl: enable DONT_REQ_PREAUTH for AS-REP RoastingGenericWrite or GenericAll on any object: full control of that object
BloodHound: automated ACL path analysis
BloodHound maps ACL chains across the entire domain and finds multi-hop paths from your current account to Domain Admin. BloodHound finds the path, BloodyAD executes it.
INFO: Found AD domain: corp.local INFO: Found 3 computers INFO: Found 24 users INFO: Found 15 groups INFO: Done in 00M 12S
After collection, load the ZIP into BloodHound and run these first:
Shortest Paths to Domain Admins: fewest hops from your account to DA
Find Principals with DCSync Rights: accounts that can dump all domain hashes
Shortest Path from Owned Principals: mark your account as owned, then run this
Find Computers with Unconstrained Delegation: high-value coercion targets
Key ACL rights
Right | What you can do | Attack |
|---|---|---|
GenericAll | Full control of object | Change password, add to group, set SPN |
GenericWrite | Write any attribute | Set SPN for Kerberoasting, set RBCD, shadow credentials |
WriteOwner | Change object owner | Take ownership, then grant yourself GenericAll |
WriteDACL | Modify ACL | Grant yourself GenericAll or DCSync rights |
ForceChangePassword | Reset password without knowing current | Set known password, authenticate as target |
AddMember | Add members to group | Add yourself to Domain Admins or privileged group |
Self | Add yourself to object | Add self to group if Self on group membership |
Each right maps to a specific exploitation technique. For how to abuse them see ACL Abuse Privilege Escalation.
Related
References
-
BloodyAD (GitHub)github.com/CravateRouge/bloodyAD (opens in new tab)
get writable command reference and detail flag
-
BloodHound.py (GitHub)github.com/dirkjanm/BloodHound.py (opens in new tab)
Linux-based BloodHound data collector
-
BloodHound CE (GitHub)github.com/SpecterOps/BloodHound (opens in new tab)
Community Edition source and Docker Compose setup
-
PowerSploit / PowerView (GitHub)github.com/PowerShellMafia/PowerSploit (opens in new tab)
Find-InterestingDomainAcl and Get-DomainObjectAcl reference
Was this helpful?
Your feedback helps improve this page.