Lab Walkthrough · Active Directory Security

Game of Active Directory
(GOAD) Attack Walkthrough

A hands-on technical deep-dive into attacking a multi-domain Active Directory forest — from initial network reconnaissance to achieving Domain Admin via AS-REP Roasting and offline hash cracking.

Completed Platform: Vagrant + VirtualBox Domains: sevenkingdoms.local · north · essos 2026

Game of Active Directory (GOAD) is an intentionally vulnerable Active Directory lab environment built with Vagrant and VirtualBox. It simulates a multi-domain enterprise forest — inspired by Game of Thrones — spanning three domains: sevenkingdoms.local, north.sevenkingdoms.local, and essos.local.

This walkthrough covers the initial attack path: setting up the lab environment, performing network and service enumeration, harvesting valid user accounts via SMB and RPC, validating them against Kerberos, and finally exploiting an AS-REP Roasting misconfiguration to crack a domain user's password offline.

01

Network Setup & Configuration

Before launching any offensive activity, we need to ensure our attacker machine can resolve the lab's domain names. We manually configure /etc/hosts to statically map domain controllers and servers to their IP addresses.

sudo nano /etc/hosts
Modifying /etc/hosts for GOAD
Mapping domain controllers and member servers to static IPs in /etc/hosts

We also update /etc/resolv.conf to point DNS resolution at the lab's Domain Controller, ensuring that domain lookups resolve correctly during our enumeration.

sudo nano /etc/resolv.conf
Configuring /etc/resolv.conf
Configuring DNS to resolve lab domains against the Domain Controller
02

Network Reconnaissance

With connectivity established, we run a comprehensive Nmap scan across the target subnet (192.168.56.10–12, 22–23) using aggressive options to enumerate open ports, running services, OS fingerprints, and service banners.

ℹ️
Command Used sudo nmap -p- -sC -sV -oA full_goad 192.168.56.10-12,22-23 -Pn -vvv
nmap — full port scan
Nmap full port scan results
Nmap identifies open ports, Kerberos (88), LDAP (389/636), SMB (445), and RPC services

Key findings from the scan include Kerberos on port 88, SMB on 445, LDAP on 389/636, and WinRM on 5985 — all classic indicators of Active Directory domain controllers.

03

SMB Enumeration with CrackMapExec

With the attack surface mapped, we pivot to SMB enumeration. CrackMapExec (CME) allows us to quickly probe the entire subnet for SMB shares, domain info, signing status, and OS versions — all without credentials.

crackmapexec smb 192.168.56.1/24
CrackMapExec SMB subnet scan
CME identifies domain-joined machines, SMB signing status, and Windows versions

Extending the scan with the --users flag against the primary Domain Controller (192.168.56.10) dumps a list of valid domain user accounts — a goldmine for subsequent attacks.

⚠️
Misconfiguration: SMB Null Authentication The domain controller allows unauthenticated SMB null sessions, enabling enumeration of domain users without any credentials.
crackmapexec smb 192.168.56.10/24 --users
CME enumerating domain users
Extracting the complete domain user list via unauthenticated SMB
04

RPC & Null Session Enumeration

RPC provides another unauthenticated attack vector. Using enum4linux and rpcclient, we establish null sessions against the target (192.168.56.11) to extract domain groups, user SIDs, and — critically — the domain password policy.

enum4linux 192.168.56.11
enum4linux results
enum4linux extracts domain users, groups, and shares via null session
rpcclient -U NORTH 192.168.56.11 -N
rpcclient null session
Establishing a null session via rpcclient for manual AD enumeration
enumdomgroups
Enumerating domain groups
Retrieving domain group memberships including privileged groups

The password policy is especially useful for planning offline cracking and judicious password spraying — knowing the lockout threshold and minimum password length significantly informs our approach.

getdompwinfo
Domain password policy
Password policy reveals lockout thresholds and complexity requirements
05

User Validation via Kerberos

Armed with a candidate user list (got_users.txt), we use an Nmap Kerberos enumeration script to confirm which accounts are valid without triggering lockouts. Kerberos returns different error codes for non-existent vs. existing users, making this a stealthy validation method.

🔍
Why Kerberos User Enumeration? Unlike LDAP queries that may require authentication, the Kerberos AS-REQ/AS-REP exchange leaks whether a username is valid — even without credentials — through distinct KDC error codes.
nmap -p 88 --script krb5-enum-users
Kerberos user validation with Nmap
Validating domain usernames via Kerberos AS-REQ error codes
06

Exploitation: AS-REP Roasting

🔥
Critical Misconfiguration: DONT_REQ_PREAUTH One or more accounts have Kerberos pre-authentication disabled. This allows any unauthenticated user to request an AS-REP ticket encrypted with the target user's password hash.

Using Impacket's GetNPUsers.py, we request AS-REP tickets for all users in our validated list. Accounts with pre-authentication disabled will respond with a ticket we can take offline for cracking.

impacket-GetNPUsers north.sevenkingdoms.local -no-pass -usersfile gotusers.txt
AS-REP Roasting with Impacket GetNPUsers
GetNPUsers captures an AS-REP hash for a vulnerable user — ready for offline cracking
07

Offline Hash Cracking with Hashcat

With the captured AS-REP hash saved to hashes.asreproast, we move to offline cracking. Hashcat's mode 18200 targets Kerberos 5 AS-REP etype 23 hashes. Combined with the rockyou.txt wordlist, this is a fast and effective attack.

Result: Hash Cracked Successfully The hash was cracked, revealing the plaintext password of a domain user. Initial foothold established.
hashcat -m 18200 hashes.asreproast /usr/share/wordlists/rockyou.txt
Hashcat cracking the AS-REP hash
Hashcat recovers the plaintext password from the AS-REP ticket hash

🎯 Conclusion & Key Takeaways

This engagement demonstrates how a chain of low-severity misconfigurations can collectively result in a critical compromise. Starting from zero credentials, we achieved a full domain user account takeover via:

1. Unauthenticated SMB/RPC null sessions leaking domain users and password policy
2. Kerberos pre-authentication disabled on a domain account (DONT_REQ_PREAUTH)
3. Weak password crackable offline with a standard wordlist

From this initial foothold, the next phase involves BloodHound enumeration to map privilege escalation paths, lateral movement across the forest, and ultimately achieving Domain Admin across all three GOAD domains.