The Attack Taxonomy
AD attacks generally fall into three categories: credential harvesting (getting password material), credential abuse (using credentials without knowing passwords), and persistence (maintaining access). The foundational attacks below cover all three.
Credential Harvesting
Kerberoasting and AS-REP Roasting extract encrypted material that can be cracked offline to reveal passwords. No privileged access required.
Credential Abuse
Pass-the-Hash and Pass-the-Ticket use captured credential material directly. You don't crack the password; you use the hash or ticket as-is.
Persistence & Escalation
DCSync extracts all domain credentials. Golden/Silver Tickets forge authentication tokens. These are endgame techniques.
Kerberoasting
Kerberoasting exploits a fundamental feature of Kerberos: any authenticated user can request a service ticket (TGS) for any Service Principal Name (SPN) registered in the domain. The ticket's encrypted portion uses the service account's password hash as the key. Request tickets for SPNs running under user accounts, extract them, and crack offline to recover the plaintext password.
Kerberoasting: Request tickets for SPNs, crack the service account passwords offline
The Attack Flow
Prerequisites
- Any valid domain account
- Network access to a DC
- That's it. No special privileges.
Target Accounts
- User accounts with SPNs (not machine accounts—their 120-char random passwords are uncrackable)
- Service accounts for SQL, IIS, Exchange
- Accounts with weak/old passwords
Common Tools
- Rubeus kerberoast
- Impacket GetUserSPNs.py
- PowerView Invoke-Kerberoast
- hashcat -m 13100
Why It Works
- Kerberos by design: any user can request any ticket
- Ticket encrypted with password hash
- User accounts often have weak passwords
- Service accounts often over-privileged
AS-REP Roasting
When Kerberos pre-authentication is disabled for an account, anyone can request an AS-REP (Authentication Service Response) for that user. Part of the response is encrypted with the user's password hash. Request it, extract it, crack it. You don't even need valid domain credentials—but you do need to know or enumerate valid usernames.
Attacker can't get anything without knowing the password first
Attacker gets encrypted blob to crack without proving identity (but must know valid usernames)
Prerequisites
- Network access to a DC
- Know/enumerate valid usernames
- NO domain credentials needed
Target Accounts
- Accounts with "Do not require Kerberos preauthentication"
- Often legacy/service accounts
- Sometimes set for "compatibility"
Common Tools
- Rubeus asreproast
- Impacket GetNPUsers.py
- hashcat -m 18200
Finding Targets
- LDAP: userAccountControl DONT_REQ_PREAUTH
- BloodHound: "ASREP Roastable"
- PowerView: Get-DomainUser -PreauthNotRequired
Pass-the-Hash
In NTLM authentication, the password is never sent over the network. Instead, the NT hash (MD4 of the password) is used to compute the challenge response. If you have the hash, you don't need the password. You can authenticate directly using the hash itself.
The password is only used to compute the hash. If you already have the hash, you skip straight to authentication.
Prerequisites
- NT hash of target account
- NTLM authentication accepted at target
- Network access to target
Hash Sources
- LSASS memory (Mimikatz)
- SAM database (local accounts)
- NTDS.dit (domain accounts)
- LLMNR/NBT-NS/mDNS poisoning
- Cached credentials
Common Tools
- Mimikatz sekurlsa::pth
- Responder (capture hashes)
- Impacket psexec/wmiexec/smbexec
- CrackMapExec
- evil-winrm -H
Works Against
- SMB (file shares, PsExec)
- WMI/WinRM
- LDAP (if NTLM allowed)
- Any NTLM-accepting service
HKLM\...\Internet Settings\WinHttp\DisableWpad = 1 (DWORD), and
(2) HKCU\...\Internet Settings\AutoDetect = 0 (DWORD).
Deploy via two GPOs (one for computers, one for users). Two reboots are required for full effect.
Do not disable the WinHttpAutoProxySvc service—this breaks Tailscale, causes thread
exhaustion, and other issues. Trade-off: Disabling WPAD means proxy settings must be
configured manually per machine. If your environment requires a proxy, either configure it explicitly
via GPO, or keep WPAD but ensure your legitimate WPAD server is properly configured and secured—don't
leave auto-discovery open to attackers.
Pass-the-Ticket
Kerberos tickets (TGTs and service tickets) are stored in memory. If you can extract them, you can import them into your own session and use them. Steal a user's TGT, and you can request service tickets as them. Steal a service ticket, and you can access that specific service.
Stealing TGTs
A TGT lets you request service tickets for any service. Steal a Domain Admin's TGT, and you can access any service in the domain as them. TGTs typically last 10 hours (default, configurable via Group Policy).
Stealing Service Tickets
A service ticket grants access to one specific service. More limited than TGT theft, but still useful. Valid until expiration (typically same as TGT).
Prerequisites
- Local admin on machine with tickets
- Or: compromise of a process with tickets
- Network access to use the tickets
Ticket Sources
- LSASS memory (current sessions)
- Kerberos ticket cache
- Session of logged-in user
Common Tools
- Mimikatz sekurlsa::tickets /export
- Rubeus dump / ptt
- Impacket ticketer.py
Limitations
- Tickets expire (TGT: 10hrs default)
- Only works for Kerberos auth
- Need to extract before logout/reboot
DCSync
DCSync abuses the Directory Replication Service (DRS) protocol that Domain Controllers use to synchronize data. If you have replication rights (DS-Replication-Get-Changes-All), you can request any object's secrets from a DC—including password hashes for every account in the domain.
DS-Replication-Get-Changes-All: Replicate secret data (password hashes)
Both are required. By default: Domain Admins, Enterprise Admins, Administrators, DCs
Prerequisites
- Account with both replication rights
- Network access to a DC (port 135, dynamic RPC)
- That's it. No malware on DC needed.
What You Get
- NT hashes for all users
- KRBTGT hash (Golden Ticket!)
- Computer account hashes
- Password history if stored
Common Tools
- Mimikatz lsadump::dcsync
- Impacket secretsdump.py
- DSInternals Get-ADReplAccount
How Attackers Get Rights
- Compromise Domain Admin
- Compromise account with WriteDACL on domain
- Find misconfigured replication rights
- Exploit delegation to DC
Golden Ticket
A Golden Ticket is a forged TGT (Ticket Granting Ticket). With the KRBTGT account's hash, you can create TGTs for any user with any group memberships. The KDC will trust these tickets because they're encrypted with the correct key. You become anyone you want, and the ticket persists until KRBTGT is rotated twice.
Domain SID: The Security Identifier of the domain
Domain name: FQDN of the target domain
User ID: Any RID (500 for Administrator, or anything)
Group memberships: Domain Admins, Enterprise Admins, whatever you want
Lifetime: 10 years? Sure, why not.
Prerequisites
- KRBTGT account hash
- Domain SID
- Domain FQDN
- Network access to domain
How to Get KRBTGT Hash
- DCSync (most common)
- NTDS.dit extraction + SYSTEM hive
- Compromise of a DC
Common Tools
- Mimikatz kerberos::golden
- Impacket ticketer.py
- Rubeus golden
Persistence Power
- Survives password resets (of target users)
- Survives account disabling
- Only dies when KRBTGT rotated TWICE
- Can be used from anywhere with network access
Silver Ticket
A Silver Ticket is a forged service ticket. With the hash of a service account (or machine account), you can create service tickets for that specific service without ever contacting the KDC. The ticket goes directly to the service, which trusts it because it's encrypted with the correct key.
Golden vs Silver
Golden Ticket: Forged TGT → Access ANY service as ANY user
Silver Ticket: Forged service ticket → Access ONE service as any user
Silver is more limited but stealthier (no KDC logs).
The Stealth Advantage
Golden Tickets generate TGS-REQ logs when used. Silver Tickets never touch the KDC—they go straight to the service. Harder to detect, but only useful for services whose hash you have.
Prerequisites
- Service account/machine account hash
- Service Principal Name (SPN)
- Domain SID
- Network access to the service
Common Targets
- CIFS (file shares) - machine account
- HTTP (web services) - service account
- MSSQL - SQL service account
- HOST (general) - machine account
Common Tools
- Mimikatz kerberos::golden /service:
- Impacket ticketer.py
- Rubeus silver
Limitations
- Only works for that one service
- Expires with service account password change
- PAC validation catches it (see note below)