Voorwoord

Er is een beroep dat je niet leert op de universiteit, niet uit een boek, en al helemaal niet van een YouTube-video van achttien minuten met dramatische muziek en een thumbnail waarop iemand een hoodie draagt in een donkere kamer. Dat beroep is penetratietester. En het is tijd dat we daar eerlijk over zijn.

Dit boek gaat over het testen van webapplicaties. Niet het soort testen waarbij je met een checklist door een formulier loopt en aan het eind een PDF genereert die niemand leest. Nee, het soort testen waarbij je probeert om in te breken in systemen die gebouwd zijn door mensen die oprecht dachten dat ze veilig waren. Soms hebben ze gelijk. Meestal niet.


Waarom dit boek bestaat

De wereld heeft geen tekort aan beveiligingsboeken. Wat de wereld wel heeft, is een tekort aan beveiligingsboeken die eerlijk zijn. De meeste boeken over penetratietesten lezen alsof ze geschreven zijn door een commissie: droog, voorzichtig, en zo bang om iets controversieels te zeggen dat ze eindigen met alinea’s als “het is belangrijk om de beveiligingspostuur van de organisatie te evalueren in de context van het risicolandschap”. Niemand heeft daar ooit iets van geleerd.

Dit boek neemt een andere aanpak. We combineren twee perspectieven die op het eerste gezicht niet bij elkaar lijken te passen, maar die samen een completer beeld geven dan elk afzonderlijk zou kunnen.

De twee perspectieven

Het eerste perspectief is dat van de nieuwsgierige wetenschapper. Iemand die zich verwondert over hoe het web eigenlijk werkt, die geniet van historische anekdotes, en die de neiging heeft om technische concepten uit te leggen met vergelijkingen die iedereen begrijpt. Waarom is HTTP stateless? Nou, stel je voor dat je elke ochtend naar dezelfde bakker gaat, maar hij je elke keer opnieuw vraagt wie je bent en wat je wilt. Dat is HTTP. Cookies zijn het equivalent van een stempelkaart die je zelf meeneemt, zodat de bakker tenminste weet dat je vaker komt.

Het tweede perspectief is dat van iemand die al te lang in deze industrie werkt en het vermogen heeft verloren om beleefd te doen over incompetentie. Iemand die de neiging heeft om hardop te vragen waarom, in het jaar 2026, bedrijven nog steeds wachtwoorden opslaan in plain text. Iemand die vindt dat de beveiliging van de meeste webapplicaties het niveau heeft van een fietsenrek zonder slot: het staat er, het ziet er officieel uit, maar het houdt precies niemand tegen.

Samen vormen deze twee perspectieven de toon van dit boek: warm maar scherp, nieuwsgierig maar cynisch, en altijd eerlijk.

Over toestemming en ethiek

Laten we dit meteen helder maken, want het is te belangrijk om naar een bijlage te verbannen.

Alles wat je in dit boek leert, mag je uitsluitend toepassen op systemen waarvoor je expliciete, schriftelijke toestemming hebt. Geen mondeling akkoord. Geen “mijn vriend zei dat het goed was”. Geen “ik test mijn eigen bedrijf, dat mag toch”. Schriftelijk. Met een scope. Met een datum. Met een handtekening.

In Nederland valt ongeautoriseerde toegang tot computersystemen onder artikel 138ab van het Wetboek van Strafrecht. De maximumstraf is vier jaar gevangenisstraf. Dat is geen theoretisch risico. Mensen worden ervoor veroordeeld. Regelmatig. En de rechter maakt geen onderscheid tussen iemand die “gewoon even wilde kijken” en iemand die actief schade aanrichtte. Toegang zonder toestemming is toegang zonder toestemming, ongeacht je intenties.

De technieken in dit boek zijn krachtig. Ze laten je dingen doen die de meeste ontwikkelaars niet voor mogelijk houden. Maar kracht zonder verantwoordelijkheid is gewoon vandalisme. En vandalisme is geen pentest, hoe technisch onderlegd je ook bent.

De wet maakt geen onderscheid tussen een inbreker met een koevoet en een inbreker met een laptop. Beide eindigen met een strafblad. Het enige verschil is dat de laptop-inbreker vaak denkt dat hij slim genoeg is om niet gepakt te worden. Spoiler: dat is hij niet.

Er is ook een ethische dimensie die verder gaat dan de wet. Een penetratietest raakt echte systemen waar echte mensen van afhankelijk zijn. Als je een test uitvoert op een ziekenhuisnetwerk en je brengt per ongeluk een systeem down, dan gaat het niet om bits en bytes – dan gaat het om patientenzorg. Als je bij een webshop de database extraheert voor je rapport, dan kijk je naar echte persoonsgegevens van echte klanten. Die verantwoordelijkheid weegt zwaar, en dat hoort ook zo.

Gebruik deze kennis om systemen veiliger te maken. Gebruik ze om organisaties te helpen hun zwakke plekken te vinden voordat iemand anders dat doet. Gebruik ze nooit om schade aan te richten.

Wat je leert

Dit boek leert je hoe webapplicaties echt werken – niet de versie uit het marketingmateriaal, maar de versie met alle lelijke stukken erbij. Je leert hoe aanvallers denken, welke patronen ze herkennen, en hoe ze die patronen misbruiken.

Je leert over Cross-Site Scripting, SQL Injection, Server-Side Request Forgery, en een hele rits andere kwetsbaarheden waarvan de namen alleen al onheilspellend klinken. Je leert hoe je ze vindt, hoe je ze exploiteert in een gecontroleerde omgeving, en – misschien wel het belangrijkste – hoe je ze rapporteert op een manier die ervoor zorgt dat ze daadwerkelijk worden opgelost.

Wat je niet leert

Dit boek maakt je geen hacker. Dat woord is sowieso zo misbruikt dat het nauwelijks nog betekenis heeft. Dit boek maakt je een betere beveiligingstester. Het verschil is dat een beveiligingstester rapporteert, documenten levert, en werkt binnen de grenzen van een opdracht. Een hacker in de populaire zin van het woord doet geen van die dingen.

Dit boek leert je ook geen netwerk-penetratietesting, Active Directory-aanvallen, of fysieke beveiliging. Daarvoor is het zusterboek, Incompetent Bastards: Het Netwerk.

Over Incompetent Bastard

Door dit hele boek heen gebruiken we een tool die we Incompetent Bastard noemen. Ja, de naam is bewust gekozen. Het is een knipoog naar de staat van beveiliging in onze industrie – een industrie waarin de meeste kwetsbaarheden niet voortkomen uit briljante aanvallen, maar uit basale fouten die door basale controles voorkomen hadden kunnen worden.

IB is een Flask-gebaseerd security assessment dashboard dat speciaal gebouwd is voor penetratietesting. Het combineert een Command Library van 194 commando’s, vijf interactieve web labs (XSS, XXE, CSRF, SQLi, SSRF), acht payload generators, een Task Runner met allowlisted commando’s, een Screen Terminal, en een compleet findings management systeem met CVSS 4.0 scoring, evidence management, en automatische rapportgeneratie via pandoc en LaTeX.

IB is geen magisch wapen. Het is een werkbank. Net zoals een timmerman niet beter wordt van het kopen van dure gereedschappen maar van het leren gebruiken van de gereedschappen die hij heeft, zo word jij niet een betere pentester van het installeren van IB. Je wordt een betere pentester door te begrijpen wat elke tool doet en waarom je hem op dat moment inzet.

Het is ook legacy code. Met Nederlandse variabelenamen. Met functies als bevindingen_halen en zet_actief. Met een database waarin een finding een “bevinding” heet en een template een “bevindingen_template”. Dit is bewust niet opgeschoond, want echte tools in echte omgevingen zien er zo uit. Perfecte code bestaat alleen in tutorials.

Elk hoofdstuk in dit boek bevat praktische oefeningen met IB. Je zult het opzetten, configureren, en gebruiken alsof het een dagelijks instrument is – want dat is het, voor iedereen die dit vak serieus neemt.

Hoe dit boek te lezen

Je kunt dit boek van voor naar achter lezen, en dat is ook de aanbevolen volgorde. Elk hoofdstuk bouwt voort op het vorige. Maar als je al ervaring hebt, kun je ook direct naar een specifiek hoofdstuk springen. Elk hoofdstuk is zo geschreven dat het op zichzelf te begrijpen is, hoewel je dan af en toe een referentie zult missen.

De IB Tips die je door het boek heen vindt (gemarkeerd met > **IB** --) geven praktische aanwijzingen voor het gebruik van Incompetent Bastard bij de betreffende techniek.

Over de doelgroep

Dit boek is geschreven voor mensen die al enige technische achtergrond hebben. Je hoeft geen expert te zijn, maar je moet weten wat een HTTP request is, je moet je weg kunnen vinden in een terminal, en het woord “port” mag geen verwarring oproepen met iets dat je drinkt bij het dessert.

Als je een systeembeheerder bent die wil begrijpen hoe aanvallers denken: welkom. Als je een ontwikkelaar bent die wil weten welke fouten je onbewust maakt: welkom. Als je een aspirant-pentester bent die het vak wil leren: welkom. Als je een manager bent die wil begrijpen waar al dat beveiligingsbudget naartoe gaat: welkom, en bereid je voor op oncomfortabele antwoorden.

Conventies in dit boek

Door het hele boek heen gebruiken we een aantal conventies:

Dankwoord

Dit boek was niet mogelijk geweest zonder de talloze ontwikkelaars die, ondanks alle waarschuwingen, handleidingen, en beveiligingsframeworks, nog steeds code schrijven die kwetsbaar is voor aanvallen die al twintig jaar gedocumenteerd zijn. Zonder jullie zou dit boek niet nodig zijn geweest, en eerlijk gezegd zou de hele penetratietestindustrie niet bestaan. Bedankt voor de werkgelegenheid.

Dank aan de OWASP-gemeenschap, die al meer dan twintig jaar dezelfde boodschap verkondigt met het geduld van een kleuterjuf die voor de honderdste keer uitlegt dat je je handen moet wassen voor het eten.

Dank aan iedereen die ooit een bug report heeft ingediend dat begon met “dit is eigenlijk geen beveiligingsprobleem, maar…” – het was wel een beveiligingsprobleem. Het is altijd een beveiligingsprobleem.

Dank aan de open source gemeenschap, die tools bouwt en deelt zodat we niet allemaal het wiel opnieuw hoeven uit te vinden. Incompetent Bastard zelf is gebouwd op de schouders van Flask, SQLAlchemy, pandoc, en tientallen andere projecten die onderhouden worden door mensen die daar zelden genoeg waardering voor krijgen.

En tot slot dank aan de lezer. Het feit dat je dit boek hebt opgepakt in plaats van een gratis tutorial op het internet te volgen, zegt iets over je toewijding aan het vak. Laten we die toewijding de komende honderden pagina’s goed gebruiken.

Veel plezier. En vergeet nooit: alleen met toestemming.


Jan-Karel Visser, Kropswolde, 2026