Inleiding

De stad zonder bestemmingsplan

Op 12 maart 1989 schreef een Britse natuurkundige genaamd Tim Berners-Lee een bescheiden voorstel van enkele pagina’s, getiteld “Information Management: A Proposal”. Zijn baas bij CERN schreef er “Vague, but exciting” op en legde het terzijde. Het is misschien de meest profetische marginale opmerking in de geschiedenis van de technologie, want dat vage-maar-opwindende voorstel werd het World Wide Web.

Wat Berners-Lee in gedachten had, was elegant in zijn eenvoud: documenten die naar elkaar konden verwijzen via hyperlinks, opgeslagen op servers die met elkaar konden communiceren via een simpel protocol. Het was bedoeld voor wetenschappers die onderzoeksresultaten wilden delen. Het was niet bedoeld voor internetbankieren, sociale media, of webshops die je op drie uur ’s nachts verleiden tot de aankoop van een opblaasbaar eenhoornskostuum.

Maar hier zijn we dan.

Als je het web zou vergelijken met een stad, dan is het een stad die gebouwd is zonder bestemmingsplan. De eerste paar straten waren keurig aangelegd – goed verlicht, overzichtelijk, met duidelijke borden. Dat was het web van de vroege jaren negentig: statische HTML-pagina’s, een paar afbeeldingen, en het overweldigende gevoel dat je deelnam aan iets nieuws en bijzonders.

Toen kwamen de winkeliers. En de bankiers. En de entertainmentindustrie. En ineens moesten er flatgebouwen komen waar huisjes hadden gestaan, werden er snelwegen dwars door woonwijken getrokken, en begon iedereen kelders te graven zonder te controleren of er misschien al leidingen lagen. Het web van vandaag is het resultaat: een metropool van onvoorstelbare omvang en complexiteit, gebouwd op fundamenten die ontworpen waren voor een dorpje.

HTTP, het protocol dat Berners-Lee ontwierp, was stateless. Elke keer dat je een pagina opvraagt, is de server alles vergeten wat hij over je wist. Het is alsof je elke dag naar dezelfde bakker gaat, maar hij je elke keer opnieuw vraagt wie je bent. Om dit op te lossen bedachten Netscape in 1994 cookies – kleine tekstbestandjes die je browser opslaat, zodat de server je de volgende keer herkent. Het is het digitale equivalent van een stempelkaart: de bakker weet niet echt wie je bent, maar als je die kaart laat zien, geeft hij je je gebruikelijke bestelling.

Dat klinkt onschuldig. Maar die cookies werden nu gebruikt voor sessiemanagement, authenticatie, tracking, personalisatie, en nog honderd andere dingen die Netscape in 1994 niet had voorzien. En als iemand je stempelkaart kan kopieren – of, in webtermen, je session cookie kan stelen – dan kan diegene zich voordoen als jou. Dat is, in essentie, de kern van veel aanvallen die we in dit boek zullen behandelen.

De afgelopen drie decennia is het web gegroeid van een netwerk van statische documenten naar een platform waarop de gehele menselijke beschaving draait. We doen ons bankzaken via het web. We beheren onze gezondheidsgegevens via het web. We besturen kritieke infrastructuur via het web. En de fundamentele architectuur onder dit alles is nog steeds een protocol dat ontworpen was om wetenschappelijke papers te delen.

Stel je voor dat je een stad bouwt op de fundamenten van een tuinhuisje. Dat is het moderne web. En het is de taak van de penetratietester om de scheuren in die fundamenten te vinden voordat het gebouw instort.


De OWASP Top 10: een catalogus van collectief falen

Als je een arts zou vragen wat de tien meest voorkomende ziekten zijn, zou je een lijst verwachten die af en toe verandert naarmate de medische wetenschap vordert. Nieuwe ziekten worden ontdekt, oude worden uitgeroeid, en de rangorde verschuift.

De OWASP Top 10 – de lijst van de tien meest kritieke beveiligingsrisico’s voor webapplicaties – zou op dezelfde manier moeten werken. Maar dat doet hij niet. De lijst verandert wel, maar niet omdat we oude problemen hebben opgelost. Hij verandert omdat we er nieuwe problemen bij hebben gekregen terwijl we de oude gewoon laten liggen. Het is alsof de medische wereld malaria nog steeds niet had weten te behandelen, maar ondertussen wel vijf nieuwe auto-immuunziekten had ontdekt.

Laten we de huidige OWASP Top 10 doorlopen, niet als een academische exercitie, maar als een rondleiding door de schade die decennia van slordig programmeren hebben aangericht.

A1 – Broken Access Control

Dit staat op nummer een. Niet omdat het een nieuw probleem is, maar omdat het zo oud en zo wijdverspreid is dat het weigert om weg te gaan, als een huisgenoot die al lang geleden had moeten verhuizen maar nog steeds op de bank zit.

Broken Access Control betekent dat een applicatie niet goed controleert of een gebruiker daadwerkelijk mag doen wat hij probeert te doen. Mag Jan het profiel van Piet bekijken? De applicatie zegt: “Jan heeft een geldige sessie, dus ja.” Maar niemand heeft ooit geprogrammeerd dat Jan alleen zijn eigen profiel mag zien.

Het is het digitale equivalent van een gebouw waar alle deuren wel een slot hebben, maar waar iedereen dezelfde sleutel heeft gekregen.

IB – Incompetent Bastard bevat finding templates voor Broken Access Control (A01) met vooraf ingevulde beschrijvingen, impact analyses, en aanbevelingen. Wanneer je tijdens een pentest een autorisatiefout vindt, selecteer je de template en vul je alleen de specifieke details aan.

A2 – Cryptographic Failures

Vroeger heette dit “Sensitive Data Exposure”, maar OWASP heeft het hernoemd omdat het probleem niet is dat data blootgesteld wordt – het probleem is dat de cryptografie die die data had moeten beschermen, niet deugt.

Dit gaat over wachtwoorden die als MD5-hash worden opgeslagen (MD5 is zo zwak dat je er beter een briefje op de monitor kunt plakken – het effect is hetzelfde). Het gaat over HTTPS-certificaten die verlopen zijn. Het gaat over encryptiesleutels die hardcoded in de broncode staan, als een geheime deur in een muur die iedereen kan zien.

A3 – Injection

SQL Injection. Command Injection. LDAP Injection. De naam verandert, het principe blijft: de applicatie neemt gebruikersinvoer en verwerkt die als code. Het is alsof je een bestelling opneemt in een restaurant en de klant zegt: “Ik wil graag een biefstuk, en doe de kluis ook maar open.” En de ober het gewoon doorgeeft aan de keuken.

We weten al meer dan twintig jaar hoe je dit voorkomt: parameterized queries, input validation, prepared statements. Het staat in elk handboek. Het staat in elke cursus. Het staat in elke code review checklist. En toch is het nog steeds op plek drie.

IB – De Command Library bevat 194 commando’s verdeeld over categorieen als web_sqli_union, web_sqli_blind, web_sqli_error en web_cmdi_operators. Deze commando’s bevatten kant-en-klare payloads die je direct kunt aanpassen aan je doelwit.

A4 – Insecure Design

Dit is een relatief nieuwe toevoeging, en het is de meest pijnlijke. Want Insecure Design betekent niet dat de implementatie een fout bevat – het betekent dat het ontwerp zelf onveilig is. Je kunt de code perfect schrijven, alle best practices volgen, en nog steeds een onveilige applicatie opleveren als het ontwerp niet klopt.

Het is het verschil tussen een huis dat slecht gebouwd is en een huis dat op de verkeerde plek staat. Je kunt het huis repareren, maar je kunt het niet verplaatsen.

A5 – Security Misconfiguration

De standaardinstellingen zijn onveilig. De foutmeldingen lekken informatie. De directory listing staat aan. De debug modus draait in productie. De admin console is toegankelijk via het internet. Het default wachtwoord is nooit veranderd.

Security misconfiguration is het bewijs dat de meeste organisaties hun software behandelen als een meubelstuk van IKEA: ze volgen de instructies net genoeg om het overeind te krijgen, maar al die extra schroeven die overblijven? Die gooien ze weg. Die extra schroeven zijn je beveiligingsinstellingen.

A6 – Vulnerable and Outdated Components

De gemiddelde webapplicatie is als een huis dat gebouwd is met materialen van de sloop. Stukjes jQuery van tien jaar geleden. Een logging library die al drie jaar niet meer onderhouden wordt. Een framework waarvan versie 2.3.1 een bekende kwetsbaarheid heeft, maar niemand heeft ooit gecontroleerd welke versie er draait.

Dit is geen technisch probleem. Dit is een managementprobleem. Iemand moet verantwoordelijk zijn voor het bijhouden van dependencies. Maar niemand wil die persoon zijn, want het is saai werk dat nooit complimenten oplevert – totdat het misgaat, en dan is het ineens ieders probleem.

A7 – Identification and Authentication Failures

Zwakke wachtwoorden worden geaccepteerd. Brute force is niet geblokkeerd. Multi-factor authenticatie is “op de roadmap”. Session tokens worden niet geroteerd na het inloggen. Wachtwoord-reset tokens verlopen nooit.

Als Broken Access Control het probleem is dat je overal binnen kunt als je eenmaal binnen bent, dan is dit het probleem dat binnenkomen te makkelijk is. Het zijn twee kanten van dezelfde medaille, en die medaille is gemaakt van karton.

A8 – Software and Data Integrity Failures

Dit gaat over situaties waarin een applicatie aanneemt dat data die van buiten komt, te vertrouwen is. Ongevalideerde deserialisatie. CI/CD pipelines zonder integriteitscontroles. Automatische updates zonder signature verification.

Het is alsof je een pakketje aanneemt van een koerier die geen uniform draagt, geen identificatie heeft, en aanbelt bij het verkeerde adres. Maar het pakketje ziet er goed uit, dus je maakt het gewoon open.

A9 – Security Logging and Monitoring Failures

Als een inbreker je huis binnendringt en je hebt geen beveiligingscamera’s, geen alarm, en geen buren die opletten, dan weet je niet eens dat er ingebroken is tot je op een dag je sieraden mist.

De meeste webapplicaties loggen niet genoeg. Ze loggen niet de juiste dingen. Ze bewaren de logs niet lang genoeg. En als ze al loggen, kijkt er niemand naar. Security monitoring is het digitale equivalent van een rookmelder die je hebt geinstalleerd maar waarvan je de batterijen hebt verwijderd omdat hij af en toe een piepje gaf.

A10 – Server-Side Request Forgery (SSRF)

SSRF is de nieuwkomer die meteen op de A-lijst terechtkwam. Bij SSRF misleid je een server om namens jou verzoeken te doen naar plekken waar jij zelf niet bij kunt. Het is alsof je een medewerker vraagt om even een dossier uit de kluis te halen, en hij doet het zonder te vragen waarom jij dat dossier nodig hebt.

Met de opkomst van cloud computing is SSRF bijzonder gevaarlijk geworden, want die cloud metadata endpoints die alleen toegankelijk zouden moeten zijn vanaf de server zelf? Een SSRF-kwetsbaarheid geeft je precies die toegang.

IB – Het SSRF lab in Incompetent Bastard bevat redirect endpoints die cloud metadata URL’s simuleren, inclusief AWS, GCP, en Azure endpoints. Ideaal om te begrijpen hoe SSRF in de praktijk werkt.


Het fascinerende aan deze lijst is niet wat erop staat, maar hoe weinig hij verandert. Het is alsof de medische wereld jaar na jaar publiceert dat handen wassen ziektes voorkomt, en iedereen zegt “ja, goed punt”, en vervolgens niet zijn handen wast.

De reden dat penetratietesting als beroep bestaat, is niet dat aanvallen zo geavanceerd zijn. Het is dat verdediging zo slordig is.


Incompetent Bastard opzetten

Genoeg theorie. Laten we iets doen.

Incompetent Bastard is een Flask-applicatie die je lokaal draait. Het is bewust ontworpen om alleen op je eigen machine te draaien – niet op een server die bereikbaar is via het internet. Dit is een pentest-werkbank, geen productiesite.

Vereisten

Je hebt het volgende nodig:

Stap 1: Clone de repository

git clone <repository-url> incompetentbastard
cd incompetentbastard

Stap 2: Virtual environment aanmaken en activeren

python3 -m venv .venv && . .venv/bin/activate

Een virtual environment is het equivalent van een schone werkbank. Alles wat je installeert blijft in die omgeving, en je vervuilt je systeem-Python niet met dependencies die je over drie maanden vergeten bent.

Stap 3: Dependencies installeren

pip install -r requirements.txt

Dit installeert Flask, SQLAlchemy, Flask-Migrate, WTForms, de sh library voor pandoc-integratie, en een hele rits andere packages die IB nodig heeft.

Stap 4: De applicatie starten

flask --app app:create_app run --host 127.0.0.1 --port 5000

Let op het adres: 127.0.0.1. Dat is localhost. Dat is alleen jouw machine. Dit is bewust. IB luistert standaard niet op 0.0.0.0 omdat het niet de bedoeling is dat je pentest-dashboard bereikbaar is voor het hele netwerk.

IB – De create_app() factory in app.py initialiseert de database automatisch bij de eerste start. Je hoeft geen migraties te draaien of tabellen aan te maken – SQLite wordt aangemaakt in meuk/flask/db/db.sqlite.

Stap 5: Open je browser

Navigeer naar http://127.0.0.1:5000/dashboard. Als alles goed is gegaan, zie je het IB dashboard. Als je geen dashboard ziet maar een pagina met “Een moment a.u.b.” en een script tag, dan werkt de beveiliging: je benadert IB niet vanaf localhost, en de applicatie serveert je in plaats daarvan het XSS beacon script.

Ja, je leest dat goed. Als je IB benadert vanaf een ander IP-adres dan localhost, krijg je een XSS hook geserveerd in plaats van het dashboard. Dat is een bewuste ontwerpkeuze. IB is tegelijkertijd het dashboard voor de pentester en een payload delivery platform voor doelwitten. Meer hierover in het hoofdstuk over XSS.

Omgevingsvariabelen

IB wordt geconfigureerd via environment variables. De belangrijkste:

Variabele Default Functie
SECRET_KEY Random (bij elke start) Sessie- en CSRF-signing
IB_ADMIN_USER / IB_ADMIN_PASSWORD Niet gezet Admin Basic Auth
PUBLIC_UPLOAD false Uploads toestaan van niet-localhost
PUBLIC_DOWNLOADS false Downloads toestaan van niet-localhost
SESSION_COOKIE_SECURE false Zet op true achter HTTPS proxy

Als SECRET_KEY niet is gezet, genereert IB bij elke herstart een nieuwe. Dat betekent dat alle sessies ongeldig worden. Voor ontwikkeling is dat prima. Voor een langlopende engagement wil je een vaste key instellen.

IB – Zet IB_ADMIN_USER en IB_ADMIN_PASSWORD als je IB wilt beschermen met Basic Authentication. Zonder deze variabelen is het dashboard alleen bereikbaar vanaf localhost via de _is_local_request() check.


Welkom op het dashboard

Als je IB opent op http://127.0.0.1:5000/dashboard, betreed je de cockpit van je pentest. Laten we een rondleiding maken.

Het hoofdscherm

Het dashboard is opgebouwd uit meerdere panelen die je in een oogopslag een overzicht geven van je engagement:

De navigatie

Via de navigatiebalk heb je toegang tot alle modules:

De labs

Naast het dashboard heeft IB vijf interactieve labs, elk met een eigen blueprint:

  1. XSS Lab (/xxs/) – een compleet Cross-Site Scripting platform met cookie stealing, keylogging, localStorage exfiltratie, en command & control voor hooked browsers.
  2. XXE Lab (/xxe/) – XML External Entity out-of-band data exfiltratie.
  3. CSRF Lab (/csrf.) – Cross-Site Request Forgery injection endpoints.
  4. SQLi Lab (/sqli2/) – SQL Injection oefenomgeving.
  5. SSRF Lab (/ssrf/) – Server-Side Request Forgery redirect endpoints voor cloud metadata simulatie.

Elk lab is ontworpen als een functioneel aanvalsplatform. Dit zijn geen speelgoedvoorbeelden – dit zijn werkende tools die je inzet tijdens een echte pentest.

IB – De CSP (Content Security Policy) headers worden bewust uitgeschakeld voor de lab-routes. Dit is nodig omdat de labs zelf kwaadaardige scripts moeten kunnen serveren. Het dashboard zelf heeft strikte CSP headers: default-src 'self'; script-src 'self'.

Finding templates

IB wordt geleverd met veertien standaard finding templates, gebaseerd op de meest voorkomende webapplicatie-kwetsbaarheden:

# Template OWASP
1 OS Command Injection A03 – Injection
2 Cross-Site Scripting (XSS) A03 – Injection
3 XML External Entity (XXE) A03 – Injection
4 SQL Injection (SQLi) A03 – Injection
5 Path Traversal A01 – Broken Access Control
6 Server-Side Template Injection (SSTI) A03 – Injection
7 CORS Misconfiguration A05 – Security Misconfiguration
8 Server-Side Request Forgery (SSRF) A10 – SSRF
9 IDOR A01 – Broken Access Control
10 Security Headers A05 – Security Misconfiguration
11 Vulnerable and Outdated Components A06 – Vulnerable Components
12 Broken Access Control A01 – Broken Access Control
13 Cryptographic Failures A02 – Cryptographic Failures
14 Insecure Design A04 – Insecure Design

Elke template bevat een volledige beschrijving van de kwetsbaarheid, de impact, de aanbeveling, CVSS 4.0 vectoren, CWE-referenties, en MITRE ATT&CK technique ID’s. Wanneer je een bevinding aanmaakt, selecteer je de template en vult je de specifieke details in: de locatie, het bewijs, de exploitstappen.

IB – Je kunt eigen templates toevoegen of de standaard templates overschrijven via de seed-functie op /dashboard/findings/templates/seed. Dit laadt de templates uit meuk/flask/db/standard_findings.json.

CVSS 4.0 Calculator

IB bevat een ingebouwde CVSS 4.0 calculator die je kunt gebruiken bij het aanmaken van findings. Je stelt de elf base metrics in – Attack Vector, Attack Complexity, Attack Requirements, Privileges Required, User Interaction, en de zes impact metrics – en IB berekent de score en severity rating automatisch.

De calculator is beschikbaar via de API op /api/cvss4/calculate en is geintegreerd in het findings formulier. Je hoeft niet meer naar een externe website te gaan om je CVSS-score te berekenen.

Rapportgeneratie

Wanneer je klaar bent met testen, genereert IB een rapport op basis van je bevindingen en notities. Het rapport wordt gegenereerd in LaTeX, geconverteerd naar Markdown via pandoc, en kan van daaruit naar elk gewenst formaat.

Het rapport bevat: - Een verkenningssectie op basis van je notities - Alle bevindingen, gegroepeerd per template - OWASP-categorisatie en CVSS-scores - Kruisverwijzingen tussen bevindingen - Screenshots en evidence

IB – Gebruik de Notes module om verkenningsnotities toe te voegen aan je rapport. Markeer een notitie als “rapport” en stel de volgorde in om te bepalen waar de notitie in het rapport verschijnt. Het rapport wordt gegenereerd via /dashboard/findings/rapport.


De methodologie: hoe een webpentest eruitziet

Een penetratietest is geen willekeurige aanval. Het is een gestructureerd proces, net zo methodisch als een wetenschappelijk experiment. Je hebt een hypothese (dit systeem is kwetsbaar), een methode (zo ga ik dat testen), resultaten (dit heb ik gevonden), en conclusies (dit moet er veranderen).

De methodologie die we in dit boek volgen, bestaat uit vijf fasen. Elke fase bouwt voort op de vorige, en het overslaan van een fase is het equivalent van een arts die een diagnose stelt zonder de patient te onderzoeken.

Fase 1: Scope en planning

Voordat je ook maar een enkele byte over het netwerk stuurt, moet je weten wat je mag testen. De scope definieert de grenzen van je engagement:

Dit is het moment waarop je de schriftelijke toestemming regelt. Geen scope, geen toestemming, geen test. Zo simpel is het.

Fase 2: Verkenning (reconnaissance)

Dit is de fase waarin je alles leert over je doelwit zonder het daadwerkelijk aan te vallen. Je verzamelt informatie uit publieke bronnen: DNS-records, WHOIS-data, certificaattransparantielogs, sociale media, vacatureteksten (die verrassend veel onthullen over de technologie-stack van een bedrijf).

Je brengt de aanvalsoppervlakte in kaart: welke poorten zijn open? Welke services draaien er? Welke technologieen worden gebruikt? Welke versies?

IB – De Task Runner bevat voorgedefinieerde taken voor verkenning. De scan taak voert een nmap TCP/UDP scan uit, inclusief nuclei en whatweb. De search taak doorzoekt eerdere scanresultaten op specifieke services. De kerberos taak doet Kerberos user enumeration en LDAP queries.

Fase 3: Scanning en analyse

Nu ga je actiever te werk. Je gebruikt scanners om kwetsbaarheden te identificeren. Je test de applicatie handmatig: hoe reageert hij op onverwachte invoer? Wat gebeurt er als je een enkele quote in een zoekveld typt? Wat als je de waarde van een hidden field verandert? Wat als je een verzoek stuurt zonder session cookie?

Dit is de fase waarin je de OWASP Top 10 als checklist gebruikt. Niet als een afvinklijst, maar als een denkraamwerk: voor elke categorie vraag je je af of de applicatie kwetsbaar zou kunnen zijn, en dan test je die hypothese.

Fase 4: Exploitatie

Je hebt kwetsbaarheden gevonden. Nu ga je bewijzen dat ze daadwerkelijk misbruikt kunnen worden. Dit is niet het moment voor theoretische risico’s – dit is het moment waarop je laat zien wat een aanvaller echt zou kunnen doen.

Kun je via die SQL Injection bij de database? Kun je via die XSS session cookies stelen? Kun je via die SSRF de cloud metadata bereiken?

Het doel is niet om zoveel mogelijk schade aan te richten. Het doel is om de impact te demonstreren op een manier die de opdrachtgever begrijpt en serieus neemt. Een screenshot van admin:admin als werkende credentials is overtuigender dan een pagina uitleg over waarom zwakke wachtwoorden een risico vormen.

IB – Documenteer elke exploitatiestap in een finding. Gebruik het uitwerken veld voor je evidence: screenshots, payloads, HTTP requests en responses. IB slaat evidence op in meuk/flask/db/evidence/ per finding.

Fase 5: Rapportage

Dit is de fase die de meeste pentesters het minst leuk vinden en die de opdrachtgever het belangrijkst vindt. Je rapport is het enige tastbare resultaat van je werk. Als je rapport slecht is, maakt het niet uit hoe briljant je exploits waren.

Een goed pentest-rapport bevat:

IB – Het rapport wordt gegenereerd via /dashboard/findings/rapport. IB groepeert bevindingen per template, voegt OWASP-categorisatie toe, en creert kruisverwijzingen tussen gerelateerde bevindingen. De output is LaTeX die via pandoc wordt omgezet naar Markdown, klaar voor verdere verwerking.

De cyclus herhaalt zich

Een pentest is geen eenmalige gebeurtenis. Het is een momentopname. De applicatie verandert, nieuwe features worden toegevoegd, dependencies worden geupdate (of niet). Een goede pentest levert niet alleen een rapport op, maar ook een baseline waartegen toekomstige tests gemeten kunnen worden.


Een noot over automatisering en handmatig testen

Er is een hardnekkige mythe in de beveiligingsindustrie dat je kwetsbaarheden kunt vinden door een scanner te draaien en het rapport te lezen. Het is dezelfde mythe als beweren dat je een taal leert door Google Translate te gebruiken.

Scanners zijn nuttig. Ze vinden de voor de hand liggende dingen. Ze vinden de standaardfouten, de bekende CVE’s, de laaghangend fruit. Maar ze begrijpen geen context. Een scanner weet niet dat die specifieke parameter in die specifieke context leidt tot een chain van kwetsbaarheden die samen veel erger zijn dan elk afzonderlijk. Een scanner weet niet dat die ogenschijnlijk onschuldige redirect functie misbruikt kan worden om interne services te bereiken.

Handmatig testen is waar het echte werk zit. En dat is precies waarom IB ontworpen is als een werkbank en niet als een scanner: het helpt je bij het handmatige werk, het automatiseert het saaie deel (rapportage, categorizering, evidence management), en het laat het denkwerk aan jou.


Hoe de rest van dit boek is opgebouwd

De komende hoofdstukken volgen een logische volgorde die de methodologie weerspiegelt:

Elk hoofdstuk bevat: - Historische context en achtergrond - Technische uitleg met voorbeelden - Praktische oefeningen met IB - IB Tips voor efficient gebruik van de tool - Referenties naar OWASP, CWE, en MITRE ATT&CK


Samenvatting en referentietabel

We hebben in dit hoofdstuk de fundamenten gelegd: de geschiedenis van het web en waarom het inherent onveilig is, de OWASP Top 10 als catalogus van steeds terugkerende fouten, het opzetten van Incompetent Bastard, een rondleiding door het dashboard, en de methodologie die we door het hele boek zullen volgen.

Hier is een referentietabel die de onderwerpen uit dit hoofdstuk koppelt aan de bijbehorende IB features:

Topic IB Feature
Setup flask --app app:create_app run --host 127.0.0.1 --port 5000
Dashboard Index blueprint, navigatie met alle modules
Finding templates 14 standaard templates met OWASP, CWE, MITRE ATT&CK
CVSS scoring Ingebouwde CVSS 4.0 calculator op /api/cvss4/calculate
Methodologie Task Runner workflow (scan, search, kerberos, brute force)
Rapportage LaTeX naar Markdown via pandoc op /dashboard/findings/rapport
Command Library 194 commando’s in http/commands/
Web Labs XSS, XXE, CSRF, SQLi, SSRF – elk met eigen blueprint
Evidence Upload en beheer per finding in meuk/flask/db/evidence/
Export/Import JSON API op /api/findings/export en /api/findings/import

IB – Bookmark deze tabel. Je zult er door het hele boek naar terugverwijzen.

In het volgende hoofdstuk beginnen we met de verkenningsfase. We gaan kijken hoe je een webapplicatie in kaart brengt, welke informatie je kunt verzamelen zonder ook maar een enkele aanval uit te voeren, en hoe je die informatie gebruikt om je teststrategie te bepalen.

Maar eerst: zorg dat IB draait. De rest van dit boek is praktijk.