A battle-tested, step-by-step guide to deploy GOAD-Light (Game of Active Directory) on VMware Workstation with a Windows host, written after solving every real-world trap the official docs skip.
π Language: English (this file) Β· πΉπ· TΓΌrkΓ§e
GOAD (Game of Active Directory) by Orange Cyberdefense is an intentionally vulnerable Active Directory lab β excellent for OSCP / OSCP+ AD practice, pentest training, and red-team drills.
Deploying it on Windows + VMware Workstation hits several undocumented traps that can cost you an entire day. This repo is the guide I wish I'd had: it folds every fix into the main flow, plus ready-to-run fix scripts.
GOAD-Light = 3 VMs, 1 forest, 2 domains β lighter on RAM and a near-perfect match for the OSCP 3-machine AD chain.
Most tutorials get you to install and leave you stranded. This one pre-solves the five traps that break GOAD on Windows:
| # | Trap | Symptom | Fix |
|---|---|---|---|
| 1 | Python 3.13/3.14 too new | configparser.InvalidWriteError ... delimiter : |
Use Python 3.12 |
| 2 | GOAD windows.py bug |
TypeError: is_in_path() takes 2 positional arguments but 3 |
01-fix-windows-py.ps1 |
| 3 | Host not on lab network | Kali/host can't ping DCs (VMs can ping each other) | 02-setup-host-network.ps1 |
| 4 | PROVISIONING VM has no IP | ssh: connect to 192.168.56.3 ... timed out |
03-fix-provisioning-ip.sh |
| 5 | SSMS install hangs | Stuck 30+ min on Install SSMS on srv02 |
04-disable-ssms.sh |
Good news: the vagrant-vmware-desktop plugin no longer needs a paid license (open-sourced under MPL, late 2025), and VMware Workstation Pro is free for personal use.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WINDOWS HOST (VMware Workstation) β
β β’ goad.py + Vagrant (orchestrator β runs on the host) β
β β’ host-only vmnet adapter: 192.168.56.1 β
β β
β βββββββββββββββββ VMware (host-only 192.168.56.0/24) βββββ β
β β Kali (.250) β attacker β β
β β PROVISIONING (.3) β temp Ubuntu box, runs Ansible β β
β β DC01 kingslanding (.10) sevenkingdoms.local β β
β β DC02 winterfell (.11) north.sevenkingdoms.local β β
β β SRV02 castelblack (.22) north.* (Defender OFF) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
goad.py + Vagrant must run on the host (the vagrant-vmware-desktop plugin drives the host's VMware). Ansible runs inside the auto-created PROVISIONING VM (-m vm method).
- Windows 10/11 host with ~80β120 GB free disk and 32 GB RAM recommended
- CPU virtualization (VT-x/AMD-V) enabled in BIOS
- Host power settings β never sleep (so downloads/reboots don't get interrupted)
- Kali already installed as a VM in VMware
- Visual C++ 2019 Redistributable
- Vagrant β reboot
- Vagrant VMware Utility (driver) β mandatory
- Plugins (Admin PowerShell):
vagrant plugin install vagrant-reload vagrant-vmware-desktop winrm winrm-fs winrm-elevated
β οΈ Use Python 3.12, not 3.14. Python 3.13+ tightenedconfigparserand breaks GOAD.
:: install Python 3.12 first (py install 3.12 OR python.org classic installer)
cd C:\lab
git clone https://github.com/Orange-Cyberdefense/GOAD.git
cd GOAD
py -3.12 -m venv .env
.env\Scripts\python.exe --version :: MUST say 3.12.x
.env\Scripts\python.exe -m pip install --upgrade pip
.env\Scripts\python.exe -m pip install -r noansible_requirements.ymlπ From now on always use
.env\Scripts\python.exe goad.py, neverpy goad.py.
powershell -ExecutionPolicy Bypass -File scripts\01-fix-windows-py.ps1The lab uses 192.168.56.0/24. In VMware β Edit β Virtual Network Editor (Admin):
- Select/create the host-only vmnet on
192.168.56.0/24, mask255.255.255.0 - β "Connect a host virtual adapter to this network" β easy to miss, breaks everything if off
- β "Use local DHCP service" β OFF (GOAD uses static IPs)
Then give the host adapter an IP + firewall rule:
:: Run as Administrator
powershell -ExecutionPolicy Bypass -File scripts\02-setup-host-network.ps1Add a second NIC to Kali (VM off): Adapter 1 = NAT, Adapter 2 = the 56.x vmnet. In Kali:
sudo nmcli con add type ethernet con-name goad-net ifname eth1 ip4 192.168.56.250/24
sudo nmcli con up goad-net.env\Scripts\python.exe goad.py -m vm> check # everything green
> set_provider vmware
> set_lab GOAD-Light
> set_ip_range 192.168.56
> install # confirm with y
When you see ssh: connect to host 192.168.56.3 port 22: Connection timed out:
Ctrl+Cthe install (VMs are NOT destroyed)- VMware tray icon β "Open All Background Virtual Machines" β open PROVISIONING β login
vagrant/vagrant - Run (copy the script over, or type the commands):
sudo bash 03-fix-provisioning-ip.sh # or --persist for netplan - Back on host:
ping 192.168.56.3, then re-runinstall.
If provisioning stalls 30+ min on Install SSMS on srv02:
# inside PROVISIONING (where ~/GOAD/ansible lives)
bash 04-disable-ssms.shThen re-run install. SSMS is optional β MSSQL and all vulns install before it.
# from Kali
nxc smb 192.168.56.10 192.168.56.11 192.168.56.22You should see sevenkingdoms.local, north.sevenkingdoms.local, and the three hostnames. Then:
:: in workspace\<INSTANCE-ID>-goad-light-vmware\provider
vagrant snapshot save clean-goad
<INSTANCE-ID>is unique to your machine β check yourworkspace\folder.
| Script | Runs on | Purpose |
|---|---|---|
01-fix-windows-py.ps1 |
πͺ Host (GOAD root) | Patch is_in_path() bug |
02-setup-host-network.ps1 |
πͺ Host (Admin) | Host vmnet IP + firewall |
03-fix-provisioning-ip.sh |
π§ PROVISIONING VM | Set 192.168.56.3 |
04-disable-ssms.sh |
π§ PROVISIONING VM | Comment out SSMS play |
check-network.ps1 |
πͺ Host | Connectivity diagnostic |
Add to /etc/hosts:
192.168.56.10 kingslanding.sevenkingdoms.local kingslanding sevenkingdoms.local
192.168.56.11 winterfell.north.sevenkingdoms.local winterfell north.sevenkingdoms.local
192.168.56.22 castelblack.north.sevenkingdoms.local castelblack
| Technique | Target user | Tool |
|---|---|---|
| AS-REP Roasting | brandon.stark |
impacket-GetNPUsers β hashcat -m 18200 |
| Kerberoasting | jon.snow |
impacket-GetUserSPNs β hashcat -m 13100 |
| Password Spray | hodor (user=pass) |
nxc smb ... spray |
| LLMNR + NTLM Relay | responder bots | responder + ntlmrelayx |
| ACL abuse chain | jaimeβjoffreyββ¦βvarysβDA | BloodHound + bloodyAD |
| MSSQL + impersonation | jon.snow, arya.stark |
impacket-mssqlclient |
| GPO abuse | STARKWALLPAPER |
SharpGPOAbuse |
Recommended toolkit: mimikatz Β· chisel Β· evil-winrm Β· impacket Β· proxychains Β· BloodHound legacy 4.2/4.3 (not the newer CE β most guides/exam material target legacy).
GOAD is intentionally vulnerable. The vulnerabilities live inside the VMs, sandboxed by VMware on a host-only network. Your host is not made vulnerable β just never bridge the lab VMs to your real network.
- GOAD by Orange Cyberdefense β the lab itself
- Fixes distilled from a real end-to-end deployment + community issues (#376)
MIT β see LICENSE. This is community documentation; GOAD itself is licensed separately by Orange Cyberdefense.
β If this saved you a day of debugging, a star helps others find it.