Active Directory remains the most exploited internal surface in enterprise environments — the path from low-privileged user to Domain Admin is short, well-documented, and an accurate gauge of whether hardening has held.
The reasons are structural, not historical.
| Scope question | Why it matters |
|---|---|
| Which forest, domains, OUs? | Multi-forest is common; inter-forest trusts are attack paths |
| Hybrid identity in scope? | Entra ID, Entra Connect sync, PTA, or federation changes the surface |
| Starting position? | External black-box vs. assumed-breach low-privilege vs. domain-joined workstation |
| Data plane access in scope? | Reading shares / querying Exchange vs. path-finding only |
| Persistence in scope? | Golden Ticket, Skeleton Key — extreme tests; must be scoped explicitly |
| Recovery & rollback agreement | If the tester cracks a service-account password — rotate or leave for client? |
_kerberos._tcp.dc._msdcs.<domain>)ldapdomaindump, adidnsdump, enum4linux-ng, netexec, PowerView, ADRecon, SharpHoundmsDS-AllowedToActOnBehalfOfOtherIdentity (RBCD)cpassword valuesAny authenticated user can request a TGS for a kerberoastable account. The TGS-REP is encrypted with the service account's password-derived key — crackable offline.
Tool: GetUserSPNs.py (Impacket), Rubeus
Accounts with "Do not require Kerberos pre-authentication" return an AS-REP encrypted with their password key — without any prior credential.
Tool: GetNPUsers.py (Impacket), Rubeus
msDS-AllowedToDelegateTo) — S4U2self + S4U2proxy to impersonate any user to specified servicesmsDS-AllowedToActOnBehalfOfOtherIdentity) — if attacker can write this attribute on a computer account, arbitrary impersonation followskrbtgt NTLM hash; arbitrary access until krbtgt is rotated twiceTools: ticketer.py, Rubeus, BloodHound
SpecterOps "Certified Pre-Owned" (2021) exposed a class of template and CA misconfigurations that drive some of the shortest paths to Domain Admin in hardened environments.
| ESC | Root misconfiguration | Impact |
|---|---|---|
| ESC1 | Template: Enrollee-supplies-subject + Client Auth EKU + low-privilege enrolment | Enrol as any principal (e.g. Domain Admin) and authenticate |
| ESC4 | Vulnerable template ACLs — low-privilege user can modify the template | Convert any template to ESC1 |
| ESC6 | CA flag EDITF_ATTRIBUTESUBJECTALTNAME2 — enrollee can supply arbitrary SAN | Same effect as ESC1 on any template |
| ESC8 | NTLM relay to CA web enrolment endpoint | Certificate for the relayed account without credentials |
| ESC2 / ESC3 | Any-purpose or enrollment-agent template misuse | Enrol as any user via agent chain |
ESC9 through ESC16 continue extending the catalogue. Tools: Certipy (Python), Certify (.NET).
| Before BloodHound | With BloodHound | |
|---|---|---|
| Discovery | Manual; tester folklore | Comprehensive; graph queries |
| Paths | Only well-known patterns | Paths not seen manually surfaced |
| Defender use | None — output not sharable | Same data drives remediation backlog |
BloodHound CE / Enterprise extends to Entra ID via AzureHound — cloud identity joins the same graph.
The graph makes both the attack and the remediation explicit — the same output serves the offensive deliverable and the defensive backlog.
Tools: ROADtools, AzureHound, AADInternals, TokenTactics
A client has SMB signing required on Domain Controllers but not on member servers. What does this enable, and what does it fail to prevent?
NTLM relay from captured client authentication to any member server without signing — write access to file-server shares as the relayed user, or code execution if the account has sufficient privilege. The DC's SMB signing protects DC-targeted relay only; the broader environment remains exposed. All SMB endpoints — not just DCs — must enforce signing for full coverage.
Next: Topic 28 — Cloud infrastructure testing. The identity-graph discipline from this topic carries forward into IAM and cloud-specific attack paths.