Verkenning

“Elke ontdekkingsreiziger begint met een kaart. De goede ontdekkingsreiziger begint met de kaart van iemand anders.”

2.1 De plattegrond lezen

Stel je voor dat je in een onbekende stad aankomt. Je hebt een adres, een vaag idee van de wijk, en verder niets. Je kunt twee dingen doen: blind door straten lopen en hopen dat je iets vindt, of eerst even op een bankje gaan zitten met een plattegrond en uitzoeken waar de deuren zijn, de steegjes, de achteringangen. Verkenning – reconnaissance – is dat bankje. Het is het minst spectaculaire deel van een penetratietest en tegelijkertijd het belangrijkste.

De geschiedenis van poolexpedities leert een ontnuchterende les: de Britse ontdekkingsreizigers die de Zuidpool bereikten, deden dat door eerst jarenlang kaarten te bestuderen, terwijl anderen simpelweg vertrokken en stierven. In de wereld van penetratietesten geldt precies hetzelfde principe. Het verschil tussen een succesvolle test en een verspilde week zit niet in de exploit die je gebruikt, maar in de verkenning die eraan voorafgaat.

En toch – hier komt het cynische deel – behandelen veel organisaties hun netwerk alsof het een openbaar park is. Ze zetten diensten online met de mentaliteit van iemand die de voordeur open laat staan omdat het “zo’n leuke buurt is.” Verkenning is eigenlijk niets meer dan het systematisch documenteren van andermans nalatigheid.

In dit hoofdstuk lopen we door elke stap van de verkenningsfase: van de eerste poortscan met Nmap tot diepgaande service-enumeratie, DNS-verkenning, SMTP-misbruik, SNMP-wandelingen, NFS-shares, passieve OSINT en CMS-scanning. Bij elke stap laten we zien hoe Incompetent Bastard (IB) het proces stroomlijnt.

De twee smaken van verkenning

Verkenning kent twee fundamentele benaderingen:

Passieve verkenning raakt het doelwit niet aan. Je verzamelt informatie uit openbare bronnen: DNS-records, WHOIS-data, certificaat-transparantielogs, LinkedIn-profielen, Google-resultaten. Het doelwit weet niet dat je aan het kijken bent. Dit is legaal, onzichtbaar, en verrassend informatief.

Actieve verkenning raakt het doelwit wel. Poortscans, service-detectie, directory bruteforce – elk packet dat je stuurt laat een spoor achter. Dit is waar je expliciete toestemming voor nodig hebt, gedocumenteerd in je scope-overeenkomst.

De gouden regel: begin altijd passief. Actieve scans genereren verkeer, en verkeer genereert logs. Hoe meer je weet voordat je begint te scannen, hoe gerichter (en dus stiller) je actieve verkenning kan zijn.


2.2 Nmap: de Zwitserse zakmes van verkenning

2.2.1 Waarom Nmap?

Als er een tool is die elke penetratietester kent, is het Nmap. Gordon Lyon schreef het in 1997 – het jaar dat Titanic in de bioscoop draaide – en sindsdien is het uitgegroeid tot het onbetwiste standaardgereedschap voor netwerkverkenning. Het is het equivalent van een stethoscoop voor een arts: je kunt technisch gezien zonder, maar niemand neemt je serieus.

Nmap stuurt packets naar een doelwit en analyseert de antwoorden. Klinkt simpel. Is het ook. Maar de nuance zit in hoe je die packets stuurt, welke packets je stuurt, en wat je doet met de antwoorden.

2.2.2 De SYN scan: snel en stil

De standaard Nmap scan – de SYN scan – is het werkpaard van netwerkverkenning. Hij stuurt een SYN packet naar elke poort, wacht op een SYN-ACK (poort open) of RST (poort dicht), en gaat verder. De TCP handshake wordt nooit voltooid, waardoor de connectie niet in de logbestanden van veel systemen terechtkomt.

Om de SYN scan te begrijpen, helpt het om de TCP three-way handshake te kennen: 1. Client stuurt SYN: “Ik wil verbinden” 2. Server stuurt SYN-ACK: “Ik luister, ga je gang” 3. Client stuurt ACK: “Verbinding bevestigd”

De SYN scan stopt na stap 2. Hij stuurt een RST (reset) in plaats van de ACK. Het resultaat: je weet dat de poort open is, maar de server heeft nooit een volledige verbinding geregistreerd. Het is het digitale equivalent van aanbellen en wegrennen – je weet dat er iemand thuis is, maar ze hebben je gezicht niet gezien.

# Basis SYN scan op de top 1000 poorten
sudo nmap -sS 10.0.0.0/24

# Alle TCP poorten scannen (1-65535)
sudo nmap -sS -p- 10.0.0.5

# Specifieke poorten
sudo nmap -sS -p 21,22,80,443,445,3389 10.0.0.5

# Top 100 poorten met timing template 4 (agressief)
sudo nmap -sS -T4 --top-ports 100 10.0.0.0/24

De -sS flag is technisch gezien optioneel als je als root draait – Nmap gebruikt hem dan standaard. Maar het is goede gewoonte om expliciet te zijn over wat je doet. Een pentester die niet weet welk type scan hij draait, is als een chirurg die niet weet welk scalpel hij vasthoudt.

Over de -T timing templates: Nmap kent zes templates, van -T0 (paranoid) tot -T5 (insane). In de praktijk gebruik je -T3 (normaal, de default) of -T4 (agressief) voor de meeste pentesten. -T5 is snel maar mist poorten door packet loss. -T0 en -T1 zijn bedoeld voor IDS-evasie en duren uren. Het is een afweging tussen snelheid en nauwkeurigheid – en in een engagement met een tijdslimiet wil je meestal -T4.

Template Naam Gebruik
-T0 Paranoid IDS evasie, extreem langzaam
-T1 Sneaky IDS evasie, langzaam
-T2 Polite Minder bandbreedte, trager
-T3 Normal Standaard, goed compromis
-T4 Aggressive Sneller, goed voor pentests
-T5 Insane Zeer snel, kan poorten missen

2.2.3 Service detection en versie-informatie

Weten dat poort 80 open is, is leuk. Weten dat er Apache 2.4.49 op draait – dat is bruikbaar. De -sV flag activeert service detection:

# Service versie detectie
sudo nmap -sV 10.0.0.5

# Agressievere versie detectie (meer probes)
sudo nmap -sV --version-intensity 5 10.0.0.5

# Combinatie: SYN scan, alle poorten, versie detectie
sudo nmap -sS -sV -p- -T4 10.0.0.5

De --version-intensity flag loopt van 0 (snel, minder accuraat) tot 9 (traag, zeer accuraat). De standaard is 7, wat voor de meeste situaties prima werkt. Tenzij je haast hebt, en eerlijk gezegd: als je haast hebt bij een pentest, heb je een groter probleem.

2.2.4 Nmap Scripting Engine (NSE)

De Nmap Scripting Engine is waar Nmap van een poortscan-tool verandert in een volwaardig verkenningsplatform. NSE scripts kunnen kwetsbaarheden detecteren, informatie verzamelen, en zelfs exploits uitvoeren. Er zitten honderden scripts bij de standaardinstallatie.

# Default scripts draaien (veilig, informatief)
sudo nmap -sC 10.0.0.5

# Specifiek script
sudo nmap --script smb-enum-shares 10.0.0.5

# Categorie: alle vuln scripts
sudo nmap --script vuln 10.0.0.5

# Meerdere scripts combineren
sudo nmap --script "smb-enum-* and not brute" 10.0.0.5

# De heilige combinatie: SYN, versie, scripts, OS detectie
sudo nmap -sS -sV -sC -O -T4 -p- 10.0.0.5

De -sC flag is equivalent aan --script=default. Het draait een verzameling scripts die als veilig worden beschouwd – ze zullen geen denial-of-service veroorzaken of data wijzigen. Maar “veilig” is een relatief begrip. Een default script kan best een anonymous FTP login proberen. Weet wat je draait.

Veelgebruikte NSE scripts voor penetratietesten:

Script Doel
smb-enum-shares SMB shares opsommen
smb-enum-users SMB gebruikers opsommen
smb-vuln-ms17-010 EternalBlue detectie
ftp-anon Anonymous FTP login testen
http-enum Webserver directory enumeratie
ssl-heartbleed Heartbleed kwetsbaarheid
smtp-enum-users SMTP gebruiker enumeratie
dns-zone-transfer DNS zone transfer poging

2.2.5 UDP scanning

De meeste pentesters scannen alleen TCP. Dat is alsof je alleen de voordeur controleert en de achterdeur vergeet. UDP-diensten als SNMP (161), TFTP (69) en DNS (53) zijn notoir slecht beveiligd.

# UDP scan (langzaam maar belangrijk)
sudo nmap -sU --top-ports 50 -T4 10.0.0.5

# Combineer TCP en UDP
sudo nmap -sS -sU -p T:1-65535,U:53,69,111,123,161,500 10.0.0.5

UDP scanning is traag. Ontzettend traag. Dat komt doordat UDP geen handshake kent – als een poort niet antwoordt, weet je niet of het pakket verloren is gegaan, of dat de poort gefilterd is. Nmap moet wachten op timeouts. Het is het digitale equivalent van bellen naar een nummer dat niet opneemt: je weet niet of er niemand thuis is, of dat ze je negeren.

2.2.6 Output formaten

Nmap-resultaten opslaan is geen luxe, het is een vereiste. Elke fatsoenlijke pentest vereist bewijs van wat je hebt gedaan, wanneer je het hebt gedaan, en wat je hebt gevonden.

# Normaal formaat (leesbaar)
sudo nmap -sS -sV -oN scan_results.nmap 10.0.0.5

# XML formaat (voor tools)
sudo nmap -sS -sV -oX scan_results.xml 10.0.0.5

# Grepable formaat (voor scripts)
sudo nmap -sS -sV -oG scan_results.gnmap 10.0.0.5

# Alle drie tegelijk
sudo nmap -sS -sV -oA raw/nmap/engagement_scan 10.0.0.5

Het -oA formaat is het handigst – het genereert alle drie de output-formaten in een keer. IB’s scan.sh gebruikt dit standaard, en dat is niet toevallig.

IB Tip: IB slaat alle scan output op in raw/nmap/ met de -oA flag. Het gnmap formaat wordt door search.sh gebruikt om snel hosts per service te vinden. Sla je scans altijd op met een herkenbare naam.


2.3 Service enumeratie

Een poortscan vertelt je welke deuren open staan. Service enumeratie vertelt je wat er achter die deuren zit. Dit is waar de werkelijke verkenning begint.

2.3.1 FTP (poort 21): het fossiel dat weigert te sterven

FTP dateert uit 1971. Dat is ouder dan de meeste kantoorgebouwen, de meeste wetten over computermisdaad, en de meeste mensen die die wetten moeten handhaven. En nog steeds staan er FTP-servers open op het internet. Met anonymous login. In 2026.

Het testen op anonymous FTP-toegang is triviaal:

# Nmap script voor anonymous FTP
nmap -T5 -sV -sC -p21 --script ftp-anon \
     --script-args ftp-anon.maxlist=-1 10.0.0.5

# Handmatig testen
ftp 10.0.0.5
# Username: Anonymous
# Password: Anonymous

IB Tip: IB heeft een geautomatiseerde FTP anonymous check. De ftp_anon taak in de Task Runner zoekt alle hosts met poort 21 open in je nmap scan en test ze automatisch op anonymous login. Start hem via het Tasks dashboard met de naam van je scan.

IB’s ftp_anon.sh werkt als volgt: het gebruikt search.sh om alle hosts met FTP uit je nmap scan te filteren, loopt er doorheen, en draait per host een gerichte Nmap scan met het ftp-anon script:

# Wat ftp_anon.sh intern doet:
result=$(./search.sh engagement-name ftp)
for xhost in $result; do
    nmap -T5 -sV -sC -p21 --script ftp-anon \
         --script-args ftp-anon.maxlist=-1 $xhost
done

En als je anonymous toegang vindt? Dan kijk je wat er staat. Configuratiebestanden, back-ups, soms zelfs SSH-sleutels. Het is verbazingwekkend wat mensen op een anoniem toegankelijke FTP-server achterlaten. Het is het digitale equivalent van je dagboek op een bankje in het park laten liggen.

2.3.2 SSH (poort 22)

SSH is de veilige manier om op afstand in te loggen. Tenminste, dat is de theorie. In de praktijk vinden we regelmatig SSH-servers met wachtwoordauthenticatie aan, standaard credentials, of – in het ergste geval – zwakke Debian SSH-sleutels uit 2008.

# SSH versie detectie
nmap -sV -p22 10.0.0.5

# Banner grabbing
nc -nv 10.0.0.5 22

# SSH audit (controleer configuratie)
ssh-audit 10.0.0.5

De versie van OpenSSH is belangrijk: oudere versies hebben bekende kwetsbaarheden. Maar vaker is het probleem niet de software, maar de configuratie. Wachtwoordauthenticatie zonder rate limiting is een uitnodiging voor brute force (meer daarover in hoofdstuk 3).

2.3.3 SMB (poort 445)

SMB – Server Message Block – is het protocol waarmee Windows-systemen bestanden delen. Het is ook een van de meest aangevallen protocollen in de geschiedenis van computerbeveiliging. EternalBlue (MS17-010), dat de basis vormde voor WannaCry, maakte misbruik van SMB.

# SMB versie en shares enumereren
nmap --script smb-enum-shares,smb-enum-users -p445 10.0.0.5

# smbclient: shares bekijken
smbclient -L //10.0.0.5 -N

# smbmap: permissies controleren
smbmap -H 10.0.0.5

# smbmap met credentials
smbmap -H 10.0.0.5 -u gebruiker -p wachtwoord

# enum4linux: alles-in-een
enum4linux -a 10.0.0.5

# CrackMapExec: null session enum
crackmapexec smb 10.0.0.5 -u '' -p '' --shares

Null sessions – SMB-verbindingen zonder credentials – zijn zeldzamer geworden, maar bestaan nog steeds. En zelfs zonder null session is SMB een goudmijn aan informatie: domeinnaam, computernaam, werkgroep, en soms zelfs een lijst van gebruikersaccounts.

Het is de moeite waard om altijd te controleren op EternalBlue (MS17-010). Ja, het is een exploit uit 2017. Ja, de patch bestaat al jaren. Nee, niet iedereen heeft hem geinstalleerd:

# EternalBlue check
nmap -p445 --script smb-vuln-ms17-010 10.0.0.5

# Of via CrackMapExec
crackmapexec smb 10.0.0.0/24 -u '' -p '' --gen-relay-list smb_targets.txt

SMB signing is ook relevant: als SMB signing niet is afgedwongen, zijn relay-aanvallen mogelijk. Dat is een onderwerp voor latere hoofdstukken, maar het begint hier, bij de verkenning.

2.3.4 RDP (poort 3389)

Remote Desktop Protocol is Windows’ ingebouwde remote access oplossing. Het staat standaard aan op veel Windows Servers en is regelmatig het eerste dat wordt opengesteld voor beheer op afstand.

# RDP versie en configuratie
nmap -sV -p3389 --script rdp-enum-encryption 10.0.0.5

# Screenshot nemen van het loginscherm
nmap -p3389 --script rdp-ntlm-info 10.0.0.5

Het rdp-ntlm-info script is bijzonder nuttig: het haalt de domeinnaam, computernaam en DNS-naam op uit de NTLM-authenticatie, zonder dat je inlogt. Gratis informatie, gewoon door te kloppen op de deur.

2.3.5 HTTP/HTTPS (poort 80/443)

Webservers zijn de etalage van elke organisatie. En net als bij een echte etalage: wat je ziet is interessant, maar wat er achter de schermen staat is veel interessanter.

# Webserver identificatie
whatweb http://10.0.0.5

# Nikto vulnerability scan
nikto -h http://10.0.0.5

# Directory bruteforce
gobuster dir -u http://10.0.0.5 -w /usr/share/wordlists/dirb/common.txt -t 50

# Wfuzz (flexibeler)
wfuzz -c -z file,/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
      --sc 200,301,302,403 http://10.0.0.5/FUZZ

# Nuclei (vulnerability templates)
nuclei -u http://10.0.0.5

IB Tip: IB’s scan.sh draait automatisch whatweb, wfuzz en nuclei tegen elke host met HTTP-poorten open. De resultaten komen in raw/recon/. Je hoeft dit niet handmatig te doen.

IB’s scan flow voor webservers werkt zo: na de initiële nmap scan filtert scan.sh alle hosts met HTTP-gerelateerde services, en draait per host drie tools in volgorde:

# Uit scan.sh -- voor elke host met HTTP:
whatweb ${host} > raw/recon/whatweb-${host}.txt
wfuzz -c -z file,/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
      --sc 200,202,204,301,302,307,403 ${host}/FUZZ > raw/recon/wfuzz-${host}.txt
nuclei -u ${host} > raw/recon/nuclei-${host}.txt

2.4 DNS verkenning

2.4.1 Waarom DNS belangrijk is

DNS – het Domain Name System – is het telefoonboek van het internet. Het vertaalt namen naar adressen. En net als een telefoonboek kan het verrassend veel onthullen over een organisatie: welke servers ze hebben, welke diensten ze draaien, soms zelfs hoe hun interne netwerk is opgebouwd.

DNS-verkenning is als het doorbladeren van iemands telefoonboek: technisch gezien is alle informatie “openbaar”, maar je leert er meer van dan de eigenaar zich realiseert.

2.4.2 Zone transfers

Een DNS zone transfer is de nucleaire optie van DNS-verkenning. In een zone transfer stuurt een DNS-server zijn volledige database naar de aanvrager – elke hostname, elk IP-adres, elke record. Het is bedoeld als replicatiemechanisme tussen primaire en secundaire DNS-servers. Het is niet bedoeld voor jou. Maar als niemand het heeft uitgeschakeld…

# Zone transfer proberen met dig
dig axfr target.com @ns1.target.com

# Zone transfer met host
host -l target.com ns1.target.com

# dnsrecon zone transfer
dnsrecon -d target.com -t axfr

Zone transfers slagen tegenwoordig zelden op externe DNS-servers. Maar op interne DNS-servers – met name Active Directory-geintegreerde DNS – is het een ander verhaal. Veel beheerders gaan ervan uit dat het interne netwerk “vertrouwd” is en beperken zone transfers niet.

Als een zone transfer lukt, heb je in een klap een compleet overzicht van het netwerk. Elke server, elk alias, elk service record. Het is alsof iemand je een plattegrond overhandigt met alle geheime gangen erin getekend.

2.4.3 Subdomain enumeratie

Als zone transfers niet werken – en dat doen ze meestal niet – is subdomain enumeratie de volgende stap. Het idee is simpel: probeer duizenden mogelijke subdomeinnamen en kijk welke bestaan.

# dnsrecon brute force
dnsrecon -d target.com -t brt \
    -D /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt

# Standaard enumeratie (alle record types)
dnsrecon -d target.com

# dnsenum (combineert meerdere technieken)
dnsenum target.com
dnsenum --dnsserver ns1.target.com target.com

# gobuster DNS mode
gobuster dns -d target.com \
    -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -t 50

Subdomeinen onthullen vaak meer dan de organisatie beseft: dev.target.com, staging.target.com, jenkins.target.com, vpn.target.com. Elk subdomein is een potentieel aanvalsoppervlak. Ontwikkelomgevingen hebben zelden dezelfde beveiligingsmaatregelen als productie.

2.4.4 DNS record types

Niet alle DNS records zijn gelijk. Elk type onthult andere informatie:

# Individuele record types opvragen
host target.com              # A record (IPv4)
host -t MX target.com        # Mail servers
host -t TXT target.com       # TXT records (SPF, DKIM, etc.)
host -t NS target.com        # Nameservers
host -t AAAA target.com      # IPv6 adressen

# dig varianten
dig target.com ANY           # Alle records (vaak geblokkeerd)
dig target.com MX            # Mail servers
dig target.com TXT           # TXT records

TXT records zijn bijzonder interessant. Ze bevatten vaak SPF-records die onthullen welke mailservers de organisatie gebruikt, DKIM-sleutels, en soms verificatietokens voor diensten als Google Workspace of Microsoft 365.

2.4.5 Reverse DNS sweep

Een reverse DNS lookup doet het omgekeerde van een normale lookup: je geeft een IP-adres en krijgt de hostname terug. Door een heel subnet te sweepen ontdek je hosts die je via forward lookups nooit zou vinden.

# dnsrecon reverse sweep
dnsrecon -r 10.0.0.0/24

# Handmatig (langzaam maar leerzaam)
for ip in $(seq 1 254); do
    host 10.0.0.$ip
done | grep -v "not found"

IB Tip: Het recon_dns commandobestand bevat alle DNS-verkenningscommando’s die je nodig hebt. Open het via de Commands pagina in IB voor snel kopieerbare referenties. Het bevat zone transfers, subdomain brute force, reverse sweeps en handmatige record queries.


2.5 SMTP enumeratie

2.5.1 Het postkantoorgesprek

SMTP – Simple Mail Transfer Protocol – is het protocol waarmee e-mail wordt verstuurd. En SMTP-servers zijn praatgraag. Ontzettend praatgraag. Met de juiste vragen vertellen ze je precies welke gebruikersaccounts bestaan.

Dit heet SMTP user enumeration, en het werkt via drie methoden: VRFY, EXPN en RCPT TO.

2.5.2 VRFY en EXPN

Het VRFY-commando vraagt de mailserver of een gebruiker bestaat. Het EXPN-commando vraagt de server om een mailinglist uit te vouwen. Beide zijn bedoeld voor diagnostiek. Beide zijn goud voor aanvallers.

# Handmatig via netcat
nc -nv 10.0.0.5 25
# VRFY root
# VRFY admin
# VRFY postmaster

# EXPN (mailinglijst leden)
# EXPN all-users

# RCPT TO (als VRFY uitgeschakeld is)
# MAIL FROM:<test@test.com>
# RCPT TO:<admin@target.com>    # 250 = bestaat, 550 = niet

De responsecodes zijn veelzeggend: - 250: gebruiker bestaat - 252: ik kan het niet bevestigen, maar ik ga het proberen (vaak ook een positief signaal) - 550: gebruiker bestaat niet

2.5.3 Geautomatiseerde enumeratie

Handmatig VRFY-commando’s typen is leerzaam maar niet schaalbaar. Daar zijn tools voor:

# smtp-user-enum met VRFY methode
smtp-user-enum -M VRFY \
    -U /usr/share/seclists/Usernames/Names/names.txt \
    -t 10.0.0.5

# RCPT TO methode (als VRFY uitgeschakeld)
smtp-user-enum -M RCPT -U users.txt -D target.com -t 10.0.0.5

# EXPN methode
smtp-user-enum -M EXPN -U users.txt -t 10.0.0.5

# Nmap NSE scripts
nmap -p 25 --script smtp-enum-users 10.0.0.5
nmap -p 25 --script smtp-commands 10.0.0.5
nmap -p 25 --script smtp-open-relay 10.0.0.5

IB Tip: IB’s recon_smtp command file bevat alle SMTP enumeratie methoden: handmatig via netcat, smtp-user-enum met VRFY/RCPT/EXPN, en Nmap NSE scripts. Check ook poorten 465 (SMTPS) en 587 (submission) naast de standaard poort 25.

Die open relay check (smtp-open-relay) is ook de moeite waard. Een open relay laat je e-mails versturen via andermans mailserver. In de jaren negentig was dat normaal. Nu is het een beveiligingsincident. Maar je vindt het nog steeds. Sommige systemen veranderen nooit.


2.6 SNMP enumeratie

2.6.1 De community string: een wachtwoord dat geen wachtwoord wil zijn

SNMP – Simple Network Management Protocol – is ontworpen om netwerkapparatuur te beheren. Het gebruikt “community strings” als authenticatiemechanisme. Een community string is eigenlijk gewoon een wachtwoord, maar dan verstuurd in cleartext. De standaard community string is public. Voor leestoegang. De standaard schrijf-community string is private.

Laat dat even bezinken. Het standaard leeswachtwoord is letterlijk “public”. Het standaard schrijfwachtwoord is “private”. En miljoenen apparaten wereldwijd gebruiken nog steeds deze standaardwaarden. Het is alsof je je kluiscode instelt op “kluis”.

2.6.2 Community strings brute forcen

# onesixtyone: snelle community string brute force
onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt \
            -i targets.txt

# Nmap brute force
nmap -sU -p 161 --script snmp-brute 10.0.0.5

Die woordenlijst met community strings is treurig kort. De meeste staan erin: public, private, community, manager, cisco, default. Het feit dat deze lijst zo klein is en nog steeds zo effectief, zegt alles over de staat van SNMP-beveiliging.

2.6.3 MIB walking

Eenmaal een werkende community string gevonden, is het tijd voor een MIB walk. MIB staat voor Management Information Base – een hierarchische database van alle informatie die het apparaat bereid is te delen. En dat is veel. Ongezond veel.

# Volledige SNMP walk
snmpwalk -c public -v1 -t 10 10.0.0.5

# Specifieke OIDs voor Windows:
# Windows gebruikers:
snmpwalk -c public -v1 10.0.0.5 1.3.6.1.4.1.77.1.2.25
# Draaiende processen:
snmpwalk -c public -v1 10.0.0.5 1.3.6.1.2.1.25.4.2.1.2
# Open TCP poorten:
snmpwalk -c public -v1 10.0.0.5 1.3.6.1.2.1.6.13.1.3
# Geinstalleerde software:
snmpwalk -c public -v1 10.0.0.5 1.3.6.1.2.1.25.6.3.1.2
# Systeem beschrijving:
snmpwalk -c public -v1 10.0.0.5 1.3.6.1.2.1.1.1
# Hostnaam:
snmpwalk -c public -v1 10.0.0.5 1.3.6.1.2.1.1.5
# Network interfaces:
snmpwalk -c public -v1 10.0.0.5 1.3.6.1.2.1.2.2.1.2

# Alles in een keer met snmp-check:
snmp-check 10.0.0.5 -c public

Via SNMP kun je op een Windows-systeem de volledige gebruikerslijst ophalen, alle draaiende processen zien, alle open poorten, alle geinstalleerde software. Zonder ook maar een wachtwoord in te voeren. Met alleen de community string public. Op een protocol dat data in cleartext verstuurt.

Dit is niet zomaar een beveiligingsprobleem. Dit is een openbare bibliotheek van vertrouwelijke informatie, aangeboden met een glimlach.

IB Tip: IB’s recon_snmp commandobestand bevat de essentiële OID-paden voor Windows enumeratie. Onthoud: SNMP v1 en v2c versturen community strings in cleartext. Als je SNMP-verkeer op het netwerk ziet, heb je misschien al een community string.


2.7 NFS enumeratie

2.7.1 Network File System: delen is leuk

NFS – Network File System – is het protocol waarmee Unix/Linux-systemen bestanden delen. Het stamt uit 1984, het jaar van de Macintosh en George Orwell. De beveiliging voelt nog steeds alsof het in 1984 is ontworpen.

NFS-beveiliging is primair gebaseerd op IP-adressen. Het idee is: als je op het juiste netwerk zit, mag je bij de bestanden. Dat is hetzelfde beveiligingsmodel als “iedereen in het kantoorgebouw mag bij de kluizen.” Het werkt totdat er iemand binnenkomt die niet bij het bedrijf hoort.

2.7.2 NFS exports ontdekken

# Ontdek NFS exports via Nmap
nmap -sV -p 111 --script=rpcinfo 10.0.0.5
nmap -p 111 --script nfs* 10.0.0.5

# showmount: bekijk beschikbare shares
showmount -e 10.0.0.5

# RPC info
rpcinfo -p 10.0.0.5

Het showmount -e commando laat zien welke directories geexporteerd worden en wie er toegang toe heeft. Als daar * staat, betekent het “iedereen”. En dat komt vaker voor dan je zou hopen.

2.7.3 NFS shares mounten

# Mount NFS share
mkdir /mnt/nfs
mount -o nolock 10.0.0.5:/share /mnt/nfs

# Met specifieke NFS versie
mount -t nfs -o vers=3,nolock 10.0.0.5:/share /mnt/nfs

# Bestanden bekijken
ls -la /mnt/nfs/
find /mnt/nfs/ -type f \
    -name "*.txt" -o -name "*.conf" -o -name "id_rsa" 2>/dev/null

# Na gebruik unmounten
umount /mnt/nfs

2.7.4 UID spoofing

NFS-authenticatie is gebaseerd op UID-nummers. Als een bestand eigendom is van UID 1000 op de server, en jij maakt een gebruiker met UID 1000 op je aanvalsmachine, dan ben je plotseling de eigenaar van dat bestand. Het is een identiteitsdiefstal zo simpel dat een kind het kan:

# Als bestanden owned zijn door UID 1000:
useradd -u 1000 fakeuser
su fakeuser
cat /mnt/nfs/secret.txt

De no_root_squash optie maakt het nog erger: als die actief is, betekent het dat root op de client ook root is op de server. Je kunt dan bestanden aanmaken, wijzigen en verwijderen als root. Op andermans server. Via een netwerkshare.

IB Tip: IB’s recon_nfs command file bevat de volledige NFS enumeratie flow: van discovery via nmap/showmount tot mounten en UID spoofing. Let op de no_root_squash instelling – die maakt het verschil tussen “read access” en “volledige controle.”


2.8 OSINT: passieve verkenning

2.8.1 Kijken zonder aanraken

OSINT – Open Source Intelligence – is verkenning zonder het doelwit aan te raken. Geen packets versturen, geen poorten scannen, geen verbindingen maken. Alleen informatie verzamelen uit openbare bronnen. Het is het digitale equivalent van door iemands LinkedIn-profiel scrollen: je leert er veel van, en ze weten niet dat je kijkt.

De reden om met OSINT te beginnen – voor je ook maar een poort scant – is tweeledig. Ten eerste: het vertelt je wat je kunt verwachten. Als je weet dat een organisatie Microsoft 365 gebruikt, Apache webservers draait, en hun IT-afdeling bestaat uit drie man, heb je al een behoorlijk beeld. Ten tweede: het genereert nul netwerkverkeer naar het doelwit, waardoor het legaal en onzichtbaar is.

2.8.2 Tools en technieken

# theHarvester: e-mailadressen, subdomeinen, IPs
theHarvester -d target.com -b google,bing,linkedin -l 500
theHarvester -d target.com -b all

# Shodan: internet-wide scan database
shodan search hostname:target.com
shodan host 10.0.0.5
shodan search "Apache" net:10.0.0.0/24

# Whois
whois target.com
whois 10.0.0.5

# Certificate Transparency logs
curl -s "https://crt.sh/?q=%25.target.com&output=json" \
    | jq '.[].name_value' | sort -u

2.8.3 Google Dorks

Google Dorks zijn geavanceerde zoekopdrachten die Google gebruiken als een soort kwetsbaarheidenscanner. Het is legaal – je zoekt alleen in de Google-index – maar de resultaten kunnen verbluffend onthullend zijn.

site:target.com filetype:pdf
site:target.com filetype:xlsx
site:target.com ext:php inurl:admin
site:target.com intitle:"index of" "parent directory"
site:target.com inurl:login
site:target.com ext:sql | ext:db | ext:bak

Die laatste – zoeken naar database-backups – levert soms letterlijk complete databases op. In de publieke Google-index. Laat dat even bezinken. Iemand heeft een database-back-up op een webserver gezet, die webserver is geindexeerd door Google, en nu kan iedereen die de juiste zoekopdracht kent die back-up downloaden. Het is als het achterlaten van je complete boekhouding op de stoep met een briefje “gratis mee te nemen.”

2.8.4 Certificate Transparency

Certificate Transparency (CT) is een onverwachte goudmijn voor pentesters. Elke SSL/TLS-certificaat dat wordt uitgegeven, wordt geregistreerd in openbare logs. Door deze logs te doorzoeken vind je subdomeinen die de organisatie misschien liever geheim had gehouden: internal.target.com, vpn-test.target.com, dev-api.target.com.

# Certificate Transparency via crt.sh
curl -s "https://crt.sh/?q=%25.target.com&output=json" \
    | jq '.[].name_value' | sort -u

# Netcraft (via browser)
# https://searchdns.netcraft.com/?restriction=site+contains&host=target.com

Het mooie aan CT-logs is dat ze historisch zijn. Je vindt niet alleen huidige certificaten, maar ook verlopen certificaten voor servers die misschien nog steeds draaien – alleen zonder geldig certificaat. En als er iets is dat beheerders vergeten te decommissionen, dan is het die ene testserver van drie jaar geleden.

2.8.5 Recon-ng framework

Recon-ng is een OSINT-framework dat werkt als een modulaire verkennings-workbench:

# Recon-ng starten
recon-ng

# Modules zoeken en installeren
# marketplace search github
# marketplace install recon/domains-hosts/google_site_web
# modules load recon/domains-hosts/google_site_web
# options set SOURCE target.com
# run

IB Tip: IB’s recon_osint command file bevat de volledige OSINT toolkit: recon-ng, theHarvester, Shodan, Google Dorks, Netcraft en Certificate Transparency queries. Begin altijd met passieve recon voordat je scant – het is gratis, onzichtbaar, en levert verrassend veel op.


2.9 CMS scanning: WordPress onder het mes

2.9.1 Waarom WordPress?

WordPress draait op een aanzienlijk deel van alle websites ter wereld. Het is het meest gebruikte CMS, en daarmee ook het meest aangevallen. Niet omdat het inherent onveilig is, maar omdat het ecosysteem – duizenden plugins, duizenden themes, miljoenen beheerders die niet updaten – een aanvallers paradijs creëert.

WPScan is de gespecialiseerde tool voor WordPress-beveiliging:

# Basis scan met enumeratie
wpscan --url http://target --enumerate ap,at,cb,dbe

# Gebruiker enumeratie
wpscan --url http://target --enumerate u

# Plugin enumeratie (agressief)
wpscan --url http://target --enumerate ap --plugins-detection aggressive

# Theme enumeratie
wpscan --url http://target --enumerate at

# Password brute force
wpscan --url http://target -U admin \
    -P /usr/share/wordlists/rockyou.txt

# Met meerdere users via XML-RPC (sneller)
wpscan --url http://target -U users.txt \
    -P /usr/share/wordlists/rockyou.txt --password-attack xmlrpc

# Met API token voor CVE-details
wpscan --url http://target --api-token YOUR_TOKEN --enumerate vp,vt

De --enumerate flags vertellen WPScan wat hij moet zoeken: - ap – alle plugins - at – alle themes - u – gebruikers - cb – config back-ups - dbe – database exports - vp – kwetsbare plugins (vereist API token) - vt – kwetsbare themes (vereist API token)

2.9.2 Handmatige WordPress checks

Soms wil je het met de hand doen – of WPScan werkt niet:

# WordPress versie
curl -s http://target/readme.html

# Gebruikers via REST API
curl -s http://target/wp-json/wp/v2/users

# XML-RPC endpoint (bruikbaar voor brute force)
curl -s http://target/xmlrpc.php

# Standaard paden
# Login:   http://target/wp-login.php
# Admin:   http://target/wp-admin/
# Uploads: http://target/wp-content/uploads/

Die REST API (/wp-json/wp/v2/users) is standaard ingeschakeld en openbaar. Het geeft gebruikersnamen terug. Zonder authenticatie. WordPress noemt dit een “feature.” Aanvallers noemen het een cadeautje.

2.9.3 Na het vinden van een kwetsbaarheid

WPScan met een API token koppelt gevonden plugins en themes aan bekende CVEs. De output ziet er dan zo uit:

[!] Title: Plugin X < 3.2.1 - Unauthenticated SQL Injection
    Fixed in: 3.2.1
    References:
     - https://wpscan.com/vulnerability/...
     - https://nvd.nist.gov/vuln/detail/CVE-2024-...

Dit is waar verkenning overgaat in exploitatie. Je hebt nu een specifieke kwetsbaarheid, met een CVE-nummer en referenties naar exploits. De vraag is niet meer “is dit systeem kwetsbaar?” maar “hoe snel kan ik dit exploiteren?”

Een veelgebruikte post-login techniek in WordPress is de Theme Editor. Als je admin-toegang hebt:

  1. Navigeer naar Appearance -> Theme Editor
  2. Selecteer het actieve theme
  3. Bewerk 404.php (minst verdacht)
  4. Voeg PHP-code toe (reverse shell, webshell)
  5. Browse naar http://target/wp-content/themes/theme-naam/404.php

Het is elegant in zijn eenvoud. Je misbruikt een legitieme functie – theme editing – voor een illegitiem doel. En het wordt zelden gedetecteerd, want wie controleert er nu de 404.php van een WordPress-theme?

IB Tip: IB’s recon_wpscan commandobestand bevat zowel geautomatiseerde WPScan commando’s als handmatige checks. Na succesvolle login: ga naar Appearance, Theme Editor, bewerk 404.php – dat is de snelste weg naar een webshell op een WordPress-installatie.


2.10 De IB Task Runner: verkenning vanuit het dashboard

2.10.1 Hoe de Task Runner werkt

De IB Task Runner is een web-gebaseerde interface om voorgedefinieerde taken te starten, monitoren en de output te bekijken. Het is geen generieke command executor – het werkt uitsluitend met een allowlist van taken die in tasks.py zijn gedefinieerd. Geen willekeurige commando’s, geen shell injection, geen verrassingen.

Elke taak heeft: - Een label (wat je ziet in de interface) - Een group (categorie: Recon, Brute Force, etc.) - Een cmd (het exacte commando dat wordt uitgevoerd) - Optionele args (parameters met input-validatie)

De argumenten worden gevalideerd tegen regex-patronen voordat ze aan het commando worden toegevoegd. Geen shell=True, geen string concatenatie, alleen een lijst van strings die aan subprocess.Popen worden gegeven.

2.10.2 Beschikbare recon taken

De Task Runner heeft de volgende verkennings-gerelateerde taken:

Taak Groep Wat het doet
scan Recon Nmap TCP/UDP scan + nuclei + whatweb + wfuzz
search Recon Zoek hosts per service in nmap resultaten
ftp_anon Recon Test anonymous FTP login
kerberos Recon Kerberos user enum + LDAP query

2.10.3 Walkthrough: een scan starten

Om een network scan te starten via de Task Runner:

  1. Open het IB dashboard op http://127.0.0.1:5000
  2. Navigeer naar Tasks (/dashboard/tasks)
  3. Zoek de scan taak onder de groep “Recon”
  4. Vul de parameters in:
    • Interface / IP: het netwerkinterface om te scannen (bijv. tun0)
    • Scan naam: een herkenbare naam (bijv. pentest-2026)
    • Hosts / range: het te scannen bereik (bijv. 10.0.0.0/24)
  5. Klik op Start

De Task Runner start het commando op de achtergrond. Je kunt de voortgang live volgen – de output wordt gestreamed naar de browser. Het commando dat wordt uitgevoerd is:

bash scan.sh tun0 pentest-2026 10.0.0.0/24

2.10.4 Wat scan.sh doet onder de motorkap

IB’s scan.sh is meer dan een wrapper om nmap. Het doet het volgende:

  1. Directory structuur aanmaken: maakt raw/recon, raw/nmap, raw/loot en andere mappen aan
  2. Lokale configuratie loggen: slaat id, uname, ifconfig en publiek IP op in raw/local/
  3. TCP poortscan: nmap met output in alle formaten (-oA)
  4. UDP poortscan: dezelfde scan voor UDP
  5. Resultaten omzetten: converteert nmap output naar CSV-formaat
  6. Per-host deep scan: voor elke host met open poorten wordt een volledige nmap scan gestart in een screen-sessie
  7. Web recon: voor elke host met HTTP worden whatweb, wfuzz en nuclei gedraaid
# De kern van scan.sh:
# 1. Quick scan
nmap -e $localnic $NMAP_OPDRACHT_TCP $NMAP_HOST \
     -oA raw/nmap/${naam}_quick_scan_tcp

# 2. Parse resultaten, start deep scans
for host in $(grep "open" raw/nmap/${naam}_quick_scan_tcp.gnmap | ...); do
    screen -dmS nmap_${host} nmap -A ${host} \
           -oA raw/nmap/${host}_full_scan_tcp
done

# 3. Web recon per HTTP host
for host in $(grep "http" raw/nmap/${naam}_quick_scan_tcp.gnmap | ...); do
    whatweb ${host} > raw/recon/whatweb-${host}.txt
    wfuzz ... ${host}/FUZZ > raw/recon/wfuzz-${host}.txt
    nuclei -u ${host} > raw/recon/nuclei-${host}.txt
done

2.10.5 Zoeken in resultaten

Na de scan kun je de search taak gebruiken om specifieke services te vinden:

  1. Open de Task Runner
  2. Start de search taak met:
    • Scan naam: pentest-2026
    • Zoekterm: ftp, ssh, http, 3389, of elke andere service/poort
  3. De output toont alle hosts met die service

Dit is wat search.sh intern doet – het parsed de gnmap output en filtert op jouw zoekterm:

# search.sh zoekt in het grepable nmap formaat
cat raw/nmap/${naam}_quick_scan_tcp.gnmap \
    | grep "${zoekterm}" \
    | awk '{print $2}' \
    | sort -u

2.10.6 Beveiliging van de Task Runner

De Task Runner is opzettelijk beperkt:

# Uit tasks.py -- hoe argumenten worden gevalideerd:
_RE_SAFE_NAME = re.compile(r"^[a-zA-Z0-9_\-]+$")
_RE_IP_OR_IFACE = re.compile(r"^[a-zA-Z0-9._:/%\-]+$")

def _validate_arg(value, arg_def):
    if len(value) > 512:
        return f"{arg_def['label']} is te lang"
    if ".." in value:
        return f"Pad traversal niet toegestaan in {arg_def['label']}"
    regex = _PATTERN_MAP.get(pattern_name, _RE_SAFE_NAME)
    if not regex.match(value):
        return f"Ongeldig karakter in {arg_def['label']}"
    return None

Dit is hoe een task runner hoort te werken: niet door gebruikersinput in een shell te plakken, maar door voorgedefinieerde commando’s uit te voeren met gevalideerde parameters.

2.10.7 Output bekijken

De Task Runner slaat de output van elke taak op in het geheugen (maximaal 500 regels per taak). Je kunt de output in real-time volgen via de web-interface, of opvragen via de API:

# Output opvragen van een specifieke run (via curl)
curl http://127.0.0.1:5000/api/tasks/runs/<run_id>

Het JSON-antwoord bevat: - status: running, success, of failed - cmd: het uitgevoerde commando - output: een array van output-regels - started_at / finished_at: timestamps - return_code: de exit code van het proces

De scan-resultaten zelf staan in de raw/ directory. Na een succesvolle scan vind je: - raw/nmap/{naam}_quick_scan_tcp.* – initiële TCP scan (nmap, xml, gnmap) - raw/nmap/{naam}_quick_scan_udp.* – initiële UDP scan - raw/nmap/{naam}_tcp-poorten.txt – geformatteerde poortlijst - raw/nmap/{naam}_tcp-versies.txt – service versies - raw/{naam}_scope.csv – scope overzicht met FQDN/rDNS/IP - raw/nmap/{host}_full_scan_tcp.* – deep scans per host - raw/recon/whatweb-{host}.txt – web fingerprinting - raw/recon/wfuzz-{host}.txt – directory bruteforce resultaten - raw/recon/nuclei-{host}.txt – vulnerability scan resultaten

Alles netjes georganiseerd, klaar voor je rapportage.


2.11 De ongemakkelijke waarheid: over verkenning en nalatigheid

Weet je wat het mooiste is aan verkenning? Het onthult geen kwetsbaarheden in software. Het onthult kwetsbaarheden in mensen. Elke open poort is een beslissing die iemand heeft genomen – of vergeten te nemen. Elke default credential is iemand die dacht “dat veranderen we later wel.” Elke zone transfer die slaagt is een beheerder die het checkbox-security-model volgt: als het werkt, is het klaar.

SNMP community string public? Dat is niet eens een kwetsbaarheid, dat is een keuze. Iemand heeft bewust besloten dat public prima was. Of – en dit is erger – niemand heeft er uberhaupt over nagedacht. Het apparaat kwam uit de doos met public als community string, en niemand heeft de moeite genomen om het te veranderen.

Hetzelfde geldt voor anonymous FTP. Het is 2026. Anonymous FTP is geen vergissing meer, het is een traditie. Het wordt doorgegeven van systeembeheerder op systeembeheerder, als een soort digitale folklore. “Zo hebben we het altijd gedaan.” Ja, en vroeger rookten artsen ook in de operatiekamer.

NFS-beveiliging op basis van IP-adressen is misschien wel het mooiste voorbeeld. Het hele model is: “als je op ons netwerk zit, vertrouwen we je.” Geweldig plan. Totdat iemand op je netwerk komt die er niet hoort te zijn. En hoe komt die persoon op je netwerk? Via de FTP-server met anonymous login. Het is een vicieuze cirkel van incompetentie.


2.12 Praktische tips: de verkenningschecklist

Voor elke engagement zou je deze stappen moeten doorlopen, in volgorde:

Fase 1: Passief (geen verkeer naar doelwit) - [ ] Whois lookups (domein en IP) - [ ] DNS records opvragen (A, MX, TXT, NS) - [ ] Certificate Transparency logs doorzoeken - [ ] theHarvester draaien voor e-mailadressen en subdomeinen - [ ] Shodan doorzoeken op IP-bereik - [ ] Google Dorks uitvoeren - [ ] LinkedIn doorzoeken voor medewerkersnamen en technologie-hints

Fase 2: Actief (met toestemming) - [ ] Nmap SYN scan (TCP) op volledig bereik - [ ] Nmap UDP scan op top 50 poorten - [ ] Per-host deep scan met versie-detectie en scripts - [ ] DNS zone transfer proberen - [ ] Subdomain bruteforce - [ ] FTP anonymous login testen - [ ] SMB null session en share enumeratie - [ ] SNMP community string brute force - [ ] NFS showmount - [ ] HTTP: whatweb, directory bruteforce, nuclei - [ ] SMTP user enumeration (als poort 25 open) - [ ] WordPress scan (als WordPress gedetecteerd)

Fase 3: Documentatie - [ ] Alle resultaten opgeslagen in raw/ - [ ] Scope CSV aangemaakt - [ ] Screenshots van relevante bevindingen - [ ] Gevonden credentials en gevoelige informatie gelogd

IB automatiseert een groot deel van fase 2 via de Task Runner en scan.sh, maar de checklist helpt om niets over het hoofd te zien.


2.13 Samenvatting

Verkenning is het fundament van elke penetratietest. Het bepaalt wat je aanvalt, hoe je het aanvalt, en of je uberhaupt iets vindt om aan te vallen. De belangrijkste lessen uit dit hoofdstuk:

  1. Begin passief: OSINT en publieke bronnen eerst, actief scannen daarna – het is gratis, onzichtbaar, en verrassend informatief
  2. Scan systematisch: Nmap met -oA voor bewijs, scan zowel TCP als UDP – vergeet UDP niet, daar zitten SNMP en DNS
  3. Enumereer elke service: FTP, SSH, SMB, RDP, HTTP – elk protocol heeft zijn eigen verkenningstools en eigen veelgemaakte configuratiefouten
  4. DNS is een goudmijn: zone transfers, subdomain enumeration, reverse sweeps – DNS onthult meer dan beheerders beseffen
  5. SNMP is een ramp: default community strings in combinatie met cleartext transport onthullen alles – gebruikerslijsten, processen, geinstalleerde software
  6. NFS vertrouwt blindelings: IP-gebaseerde authenticatie is geen authenticatie, en UID spoofing maakt het triviaal te omzeilen
  7. CMS-scanning: WordPress plugins en themes zijn het laaghangende fruit van webapplicatie-beveiliging – een verouderde plugin is een open deur
  8. Documenteer alles: IB slaat resultaten gestructureerd op in raw/ – gebruik het voor je rapportage en als bewijs
  9. Gebruik de IB Task Runner: het automatiseert de saaie, herhalende delen van verkenning zodat jij je kunt richten op analyse en strategie

De verkenningsfase eindigt niet met een lijst van open poorten. Het eindigt met een beeld – een mentale kaart van het netwerk, de diensten, de gebruikers en de zwakke plekken. Dat beeld is wat je meeneemt naar het volgende hoofdstuk, waar we de stap zetten van verkenning naar daadwerkelijke toegang.


2.14 Referentietabel

Onderwerp Tool/Commando IB Component
Poortscan TCP nmap -sS -sV -sC -p- Task Runner: scan
Poortscan UDP nmap -sU --top-ports 50 Task Runner: scan
Zoek hosts per service search.sh naam zoekterm Task Runner: search
FTP anonymous nmap --script ftp-anon Task Runner: ftp_anon
SMB enumeratie smbclient, enum4linux, crackmapexec Command: handmatig
DNS zone transfer dig axfr, dnsrecon -t axfr Commands: recon_dns
DNS subdomain enum gobuster dns, dnsrecon -t brt Commands: recon_dns
SMTP user enum smtp-user-enum, nmap --script smtp-enum-users Commands: recon_smtp
SNMP walk snmpwalk, snmp-check Commands: recon_snmp
NFS enumeration showmount -e, mount Commands: recon_nfs
OSINT theHarvester, shodan, recon-ng Commands: recon_osint
WordPress scan wpscan --enumerate ap,at,u Commands: recon_wpscan
Web recon whatweb, wfuzz, nuclei Automatisch via scan.sh
Kerberos enum kerbrute, crackmapexec Task Runner: kerberos
Deep scan output raw/nmap/{host}_full_scan_tcp Automatisch via scan.sh
Web recon output raw/recon/whatweb-{host}.txt Automatisch via scan.sh

Volgende hoofdstuk: Hoofdstuk 3 – Initiële Toegang