Active Directory Lab Bouwen
Een eigen Active Directory-lab is onmisbaar voor het oefenen van aanvalstechnieken. In deze tutorial bouwen we stap voor stap een kwetsbare AD-omgeving op met VirtualBox. Het lab bevat een Domain Controller, een werkstation, en diverse misconfiguraties die je kunt aanvallen met tools als Rubeus, BloodHound en PowerView.
Niveau: Gevorderd
Let op — Dit lab is uitsluitend bedoeld voor educatieve doeleinden op je eigen hardware. Verbind het lab NOOIT met een productie-netwerk.
Vereisten
- Computer met minimaal 16 GB RAM (32 GB aanbevolen)
- Minimaal 100 GB vrije schijfruimte (SSD sterk aanbevolen)
- VirtualBox 7.x of nieuwer (of VMware Workstation/Fusion)
- Windows Server 2019 of 2022 ISO (evaluatieversie van Microsoft)
- Windows 10/11 Enterprise ISO (evaluatieversie)
- Kali Linux of Parrot Security ISO
- Basiskennis van Windows Server en netwerken
- Incompetent Bastard (IB) op je Kali-machine
Lab Architectuur
Netwerk-overzicht
[Internet] --- [Host machine]
|
[VirtualBox Host-Only Network: 10.10.10.0/24]
|
+-----------+-----------+
| | |
[DC01] [WS01] [Kali]
10.10.10.10 10.10.10.20 10.10.10.50
DC01: Windows Server 2022 - Domain Controller
WS01: Windows 10 Enterprise - Werkstation
Kali: Kali Linux - Aanvalsmachine
VMs overzicht
| VM | OS | RAM | Disk | Rol |
|---|---|---|---|---|
| DC01 | Windows Server 2022 | 4 GB | 40 GB | Domain Controller, DNS, ADCS |
| WS01 | Windows 10 Enterprise | 4 GB | 40 GB | Domeinwerkstation |
| Kali | Kali Linux | 4 GB | 30 GB | Aanvalsmachine |
Stap 1: VirtualBox Netwerk Configureren
Host-Only Netwerk aanmaken
# Maak een Host-Only netwerk aan (VBoxManage)
VBoxManage hostonlynet add --name=LabNet --netmask=255.255.255.0 --lower-ip=10.10.10.1 --upper-ip=10.10.10.254
# Of via de GUI:
# VirtualBox > File > Host Network Manager > Create
# Stel in: IPv4 Address 10.10.10.1, Mask 255.255.255.0
# DHCP Server: uitschakelen (we gebruiken statische IPs)Netwerkinstellingen per VM
Elke VM krijgt twee netwerkadapters:
- Adapter 1: NAT (voor internettoegang tijdens installatie)
- Adapter 2: Host-Only Adapter (voor lab-communicatie)
Na installatie schakel je Adapter 1 (NAT) uit zodat het lab geisoleerd is.
Stap 2: Domain Controller Installeren (DC01)
Windows Server 2022 installatie
- Maak een nieuwe VM aan: 4 GB RAM, 40 GB disk, 2 CPU cores
- Installeer Windows Server 2022 (Desktop Experience)
- Stel het administratorwachtwoord in:
Lab@dmin2024!
Netwerk configureren
# Hernoem de computer
Rename-Computer -NewName DC01 -Restart
# Na herstart: stel een statisch IP in
New-NetIPAddress -InterfaceAlias "Ethernet 2" -IPAddress 10.10.10.10 -PrefixLength 24
Set-DnsClientServerAddress -InterfaceAlias "Ethernet 2" -ServerAddresses 10.10.10.10
# Schakel de firewall uit voor het lab (ALLEEN in lab-omgevingen!)
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled FalseActive Directory Domain Services installeren
# Installeer AD DS rol
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
# Promoveer tot Domain Controller
Install-ADDSForest `
-DomainName "lab.local" `
-DomainNetBIOSName "LAB" `
-ForestMode "WinThreshold" `
-DomainMode "WinThreshold" `
-InstallDns:$true `
-SafeModeAdministratorPassword (ConvertTo-SecureString "Dsrm@P4ss!" -AsPlainText -Force) `
-Force:$true
# De server herstart automatischDNS configureren
# Controleer DNS na herstart
Get-DnsServerZone
Resolve-DnsName lab.local
# Voeg een reverse lookup zone toe
Add-DnsServerPrimaryZone -NetworkID "10.10.10.0/24" -ReplicationScope DomainStap 3: Gebruikers en Groepen Aanmaken
Organisational Units (OUs)
# Maak OUs aan
New-ADOrganizationalUnit -Name "Lab Users" -Path "DC=lab,DC=local"
New-ADOrganizationalUnit -Name "Lab Admins" -Path "DC=lab,DC=local"
New-ADOrganizationalUnit -Name "Lab Servers" -Path "DC=lab,DC=local"
New-ADOrganizationalUnit -Name "Lab Workstations" -Path "DC=lab,DC=local"
New-ADOrganizationalUnit -Name "Service Accounts" -Path "DC=lab,DC=local"Gebruikers aanmaken
# Functie voor het aanmaken van gebruikers
function New-LabUser {
param($Name, $SamAccount, $Password, $OU, $Description)
New-ADUser `
-Name $Name `
-SamAccountName $SamAccount `
-UserPrincipalName "$SamAccount@lab.local" `
-Path "OU=$OU,DC=lab,DC=local" `
-AccountPassword (ConvertTo-SecureString $Password -AsPlainText -Force) `
-Enabled $true `
-Description $Description `
-ChangePasswordAtLogon $false `
-PasswordNeverExpires $true
}
# Normale gebruikers
New-LabUser -Name "Jan de Vries" -SamAccount "jdevries" -Password "Welkom01" -OU "Lab Users" -Description "Standaard gebruiker"
New-LabUser -Name "Piet Jansen" -SamAccount "pjansen" -Password "Welkom02" -OU "Lab Users" -Description "Standaard gebruiker"
New-LabUser -Name "Anna Bakker" -SamAccount "abakker" -Password "Winter2024!" -OU "Lab Users" -Description "Standaard gebruiker"
# IT-beheerders
New-LabUser -Name "Bob Admin" -SamAccount "badmin" -Password "Adm1n@Lab!" -OU "Lab Admins" -Description "IT Beheerder"
New-LabUser -Name "Server Admin" -SamAccount "srvadmin" -Password "Server2024!" -OU "Lab Admins" -Description "Server beheerder"
# Service accounts (met zwakke wachtwoorden voor Kerberoasting)
New-LabUser -Name "SQL Service" -SamAccount "svc_sql" -Password "Zomer2024" -OU "Service Accounts" -Description "SQL Server service"
New-LabUser -Name "Web Service" -SamAccount "svc_web" -Password "Welcome1" -OU "Service Accounts" -Description "IIS service account"
New-LabUser -Name "Backup Service" -SamAccount "svc_backup" -Password "Backup123!" -OU "Service Accounts" -Description "Backup service"Groepen en lidmaatschappen
# Maak groepen aan
New-ADGroup -Name "IT Beheer" -GroupScope Global -Path "OU=Lab Admins,DC=lab,DC=local"
New-ADGroup -Name "Database Admins" -GroupScope Global -Path "OU=Lab Admins,DC=lab,DC=local"
# Voeg leden toe
Add-ADGroupMember -Identity "IT Beheer" -Members badmin, srvadmin
Add-ADGroupMember -Identity "Database Admins" -Members svc_sql, badmin
Add-ADGroupMember -Identity "Domain Admins" -Members srvadmin
# Voeg badmin toe als lokale admin op werkstations (via GPO of handmatig)
Add-ADGroupMember -Identity "Remote Desktop Users" -Members "IT Beheer"Stap 4: Kwetsbare Configuraties Opzetten
Kerberoastable Accounts (SPNs)
# Stel SPNs in op service accounts
Set-ADUser -Identity svc_sql -ServicePrincipalNames @{Add="MSSQLSvc/sqlserver.lab.local:1433"}
Set-ADUser -Identity svc_web -ServicePrincipalNames @{Add="HTTP/webserver.lab.local"}
Set-ADUser -Identity svc_backup -ServicePrincipalNames @{Add="CIFS/backup.lab.local"}
# Verifieer
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName |
Select-Object Name, ServicePrincipalNameAS-REP Roastable Account
# Schakel pre-authenticatie uit voor een gebruiker
Set-ADAccountControl -Identity abakker -DoesNotRequirePreAuth $trueUnconstrained Delegation
# Stel unconstrained delegation in op het werkstation
Set-ADComputer -Identity "WS01" -TrustedForDelegation $trueKwetsbare ACLs
# Geef jdevries GenericAll op svc_sql (voor targeted Kerberoasting)
$acl = Get-Acl "AD:CN=SQL Service,OU=Service Accounts,DC=lab,DC=local"
$user = New-Object System.Security.Principal.NTAccount("LAB\jdevries")
$ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
$user, "GenericAll", "Allow"
)
$acl.AddAccessRule($ace)
Set-Acl "AD:CN=SQL Service,OU=Service Accounts,DC=lab,DC=local" $acl
# Geef pjansen GenericWrite op abakker
$acl2 = Get-Acl "AD:CN=Anna Bakker,OU=Lab Users,DC=lab,DC=local"
$user2 = New-Object System.Security.Principal.NTAccount("LAB\pjansen")
$ace2 = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
$user2, "GenericWrite", "Allow"
)
$acl2.AddAccessRule($ace2)
Set-Acl "AD:CN=Anna Bakker,OU=Lab Users,DC=lab,DC=local" $acl2Stap 5: ADCS Installeren (Certificate Services)
Active Directory Certificate Services is een veelvoorkomend doelwit in pentests. Diverse ESC-kwetsbaarheden zijn hier te oefenen.
# Installeer ADCS rol
Install-WindowsFeature AD-Certificate -IncludeManagementTools
# Configureer als Enterprise Root CA
Install-AdcsCertificationAuthority `
-CAType EnterpriseRootCa `
-CACommonName "Lab Root CA" `
-KeyLength 2048 `
-HashAlgorithmName SHA256 `
-ValidityPeriod Years `
-ValidityPeriodUnits 10 `
-Force
# Installeer Certificate Enrollment Web Service
Install-WindowsFeature ADCS-Enroll-Web-Svc
Install-AdcsEnrollmentPolicyWebService -AuthenticationType UserName -SSLCertThumbprint (Get-ChildItem Cert:\LocalMachine\My | Select-Object -First 1).Thumbprint -ForceKwetsbaar certificaattemplate (ESC1)
# Maak een kwetsbaar template aan (ESC1: Client Authentication + SAN)
# Dit is vereenvoudigd - in de praktijk kopieer je een bestaand template
$ConfigContext = ([ADSI]"LDAP://RootDSE").ConfigurationNamingContext
$ADSI = [ADSI]"LDAP://CN=Certificate Templates,CN=Public Key Services,CN=Services,$ConfigContext"
# Publiceer het standaard User-template met enrollment rechten voor Domain Users
certutil -dstemplate User msPKI-Certificate-Name-Flag +0x1IB — Gebruik de IB-commando’s onder het
adcs_ prefix om ADCS-kwetsbaarheden te enumereren en
exploiteren. Het commando adcs_enum geeft een overzicht met
Certify.
Stap 6: Werkstation Toevoegen (WS01)
Windows 10 installatie
- Maak een nieuwe VM aan: 4 GB RAM, 40 GB disk
- Installeer Windows 10 Enterprise
- Stel het lokale administratorwachtwoord in
Aan het domein toevoegen
# Stel DNS in naar de DC
Set-DnsClientServerAddress -InterfaceAlias "Ethernet 2" -ServerAddresses 10.10.10.10
# Stel statisch IP in
New-NetIPAddress -InterfaceAlias "Ethernet 2" -IPAddress 10.10.10.20 -PrefixLength 24 -DefaultGateway 10.10.10.10
# Hernoem de computer
Rename-Computer -NewName WS01 -Restart
# Voeg toe aan het domein
Add-Computer -DomainName "lab.local" -Credential (Get-Credential) -Restart
# Gebruik LAB\Administrator en het wachtwoord Lab@dmin2024!Lokale configuratie voor het lab
# Schakel firewall uit (alleen in lab!)
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
# Schakel Windows Defender uit (voor ongestoord testen)
Set-MpPreference -DisableRealtimeMonitoring $true
Set-MpPreference -DisableIOAVProtection $true
# Schakel PowerShell remoting in
Enable-PSRemoting -ForceStap 7: Kali Linux Configureren
Netwerk instellen
# Stel een statisch IP in op de Host-Only adapter
sudo ip addr add 10.10.10.50/24 dev eth1
sudo ip link set eth1 up
# Test connectiviteit
ping 10.10.10.10DNS configureren
# Voeg de DC toe als DNS-server
echo "nameserver 10.10.10.10" | sudo tee /etc/resolv.conf
# Test DNS-resolutie
nslookup lab.local
nslookup dc01.lab.localBenodigde tools installeren
# Impacket (vaak al geinstalleerd op Kali)
pip3 install impacket
# CrackMapExec / NetExec
pip3 install crackmapexec
# BloodHound
sudo apt install bloodhound neo4j
# Kerbrute
wget https://github.com/ropnop/kerbrute/releases/latest/download/kerbrute_linux_amd64
chmod +x kerbrute_linux_amd64
sudo mv kerbrute_linux_amd64 /usr/local/bin/kerbruteStap 8: Snapshots Maken
Maak nu snapshots van alle VMs in hun “schone” staat. Dit is essentieel zodat je het lab kunt herstellen na aanvallen.
# VBoxManage snapshots
VBoxManage snapshot DC01 take "Clean - Domain configured"
VBoxManage snapshot WS01 take "Clean - Joined to domain"
VBoxManage snapshot Kali take "Clean - Tools installed"Snapshot-strategie
| Moment | Snapshot naam | Doel |
|---|---|---|
| Na OS-installatie | OS-installed | Basis herstelpunt |
| Na domeinconfiguratie | Domain-configured | Lab gereed |
| Na kwetsbaarheden | Vulns-configured | Klaar voor aanval |
| Tijdens oefening | Mid-exercise | Tussentijds punt |
Stap 9: Het Lab Testen met IB
Start Incompetent Bastard op je Kali-machine en verifieer dat alle kwetsbaarheden werken.
# Start IB
cd /pad/naar/incompetentbastard
flask --app app:create_app run --host 0.0.0.0 --port 5000Verificatiechecklist
# 1. Netwerkconnectiviteit
ping 10.10.10.10
nmap -sV -p 88,389,445,636 10.10.10.10
# 2. Domeinauthenticatie
crackmapexec smb 10.10.10.10 -u jdevries -p 'Welkom01' -d lab.local
# 3. Kerberoasting test
impacket-GetUserSPNs lab.local/jdevries:Welkom01 -dc-ip 10.10.10.10
# 4. AS-REP Roasting test
impacket-GetNPUsers lab.local/ -usersfile users.txt -dc-ip 10.10.10.10
# 5. BloodHound collectie
bloodhound-python -u jdevries -p 'Welkom01' -d lab.local -dc dc01.lab.local -ns 10.10.10.10IB — Gebruik de IB command library om snel
aanvalcommando’s te genereren. De kerb_, ad_,
enum_ en cred_ prefix-groepen bevatten alle
relevante commando’s voor AD-aanvallen.
Lab Uitbreiden
Extra kwetsbaarheden toevoegen
# Op DC01 - LAPS niet geconfigureerd (standaard kwetsbaar)
# Constrained Delegation
Set-ADComputer -Identity WS01 -Add @{
'msDS-AllowedToDelegateTo' = @('CIFS/dc01.lab.local','CIFS/dc01')
}
# Password in description (klassieke misconfiguratie)
Set-ADUser -Identity svc_backup -Description "Account voor backups. Wachtwoord: Backup123!"
# Zwak GPO-wachtwoordbeleid
Set-ADDefaultDomainPasswordPolicy -Identity lab.local -MinPasswordLength 6 -ComplexityEnabled $falseTweede domein toevoegen (Forest Trust)
Voor geavanceerde oefeningen kun je een tweede domein toevoegen met een trust-relatie. Dit is nodig voor cross-forest attacks.
# Op een tweede DC (bijv. DC02, 10.10.10.11):
Install-ADDSForest -DomainName "dev.local" -DomainNetBIOSName "DEV"
# Stel een bidirectionele forest trust in
# Op DC01:
netdom trust lab.local /d:dev.local /add /twowaySamenvatting
Je hebt nu een volledig functioneel Active Directory-lab met de volgende kwetsbaarheden:
- Kerberoastable accounts met zwakke wachtwoorden (svc_sql, svc_web, svc_backup)
- AS-REP roastable account (abakker)
- Unconstrained delegation op WS01
- Kwetsbare ACLs (GenericAll, GenericWrite)
- ADCS met potentieel kwetsbare templates
- Wachtwoord in description-veld (svc_backup)
Tips voor effectief labgebruik:
- Maak altijd snapshots voordat je aanvallen uitvoert
- Documenteer je aanvalpaden en bevindingen in IB
- Reset het lab regelmatig naar de schone snapshot
- Voeg geleidelijk meer complexiteit toe (meerdere forests, tiering)
- Oefen zowel aanvals- als detectietechnieken
IB — Gebruik het IB findings-systeem om je laboefeningen te documenteren als bevindingen, compleet met CVSS-scores en evidence. Dit is uitstekende voorbereiding voor het schrijven van echte pentestrapporten.