Hoe webcompromitties zich in de praktijk voltrekken — in zes fasen — en op welk punt je als verdediger de keten kunt breken.
De meeste web-compromitties volgen een voorspelbaar patroon. Wie het patroon kent, kan het op elke schakel doorbreken.
Dit document beschrijft hoe een aanvaller — extern, ongeauthenticeerd — van nul naar volledige controle over een webapplicatie werkt. Het is nadrukkelijk geen handleiding: er worden geen werkende exploits, commandoregels of configuraties gedeeld die een aanvaller nog niet in bredere publicaties (OWASP, MITRE) kan vinden. Het doel is het tegenovergestelde — aan de defensieve kant precies weten welk signaal bij welke fase hoort en welke controle dat signaal blokkeert of detecteert.
Per fase wordt de mapping gemaakt naar ISO 27001:2022 Annex A (de 8.x-technische controls) en naar de eisen uit NIS2 voor entiteiten die onder die richtlijn vallen. De structuur volgt losjes de bewezen fasen uit de Lockheed Martin kill chain en MITRE ATT&CK tactieken voor web-georiënteerde initiële toegang.
Vóór de eerste echte aanraking is er bijna altijd passieve en actieve verkenning. Passief betekent dat de aanvaller openbare bronnen doorloopt: DNS-records, certificaat-transparantielogs, GitHub-commits, jobadvertenties die technologie-stack verklappen, leaks op pastes. Actief betekent daadwerkelijk contact met de applicatie — fingerprinting van webserver, framework-versies, exposed endpoints, admin-panelen, directory-enumeratie.
Deze fase is voor verdedigers de eenvoudigst over het hoofd te ziene, omdat "gewoon verkeer" — een HEAD-request, een 404 op /.git/config — in het ruis van normaal webverkeer verdwijnt. Tegelijk is het de fase met de hoogste voorspellende waarde: gecoördineerde scanning gaat bijna altijd vooraf aan een gerichte aanval.
> SUM(404) per src_ip per 5min > threshold · unique_paths_touched / time-window spike · scanner-ua regex hits
Als de verkenning een kwetsbaarheid oplevert, probeert de aanvaller die uit te buiten om een eerste voet aan wal te krijgen. In webcontext gaat dat zelden via één categorie — de meest exploited zijn anno 2026 nog altijd injection-families (SQLi, command injection, template injection), authenticatiefouten (broken auth, IDOR, zwakke reset-flows), deserialisatie in legacy-stacks, en in toenemende mate SSRF als springplank naar interne services.
Het typische patroon: een parameter wordt onvoldoende gevalideerd, geraakt in een gevoelige context (SQL-query, shell-exec, templating-engine), en de aanvaller krijgt een primitive — een klein stukje gecontroleerde uitvoering, waarmee verdere stappen mogelijk worden.
> WAF block/allow ratio per endpoint · p99 response time anomaly · exception-log volume spike · egress DNS naar onbekende TLDs
Met een primitive in handen wordt het doel een stabielere uitvoeringscontext. Vaak betekent dat: een webshell droppen in een writable directory, een serialized object plaatsen dat bij elke request wordt geladen, of een at-rest config-waarde wijzigen die bij de volgende herstart wordt ingelezen.
De aanvaller probeert de primitive om te zetten naar een manier om herhaaldelijk en interactief commands uit te voeren. Dit is de laatste fase waarin de applicatie nog het enige aangetaste component is — daarna verplaatst de actie zich richting het OS en de netwerklaag.
> FIM alert op /var/www · process-tree: webserver-uid parent + shell child · new listening socket op app-server
De reverse shell is de handgreep waarmee aanvallers het gedrag van webexploits verlaten en het gedrag van interactieve systeem-gebruikers aannemen. De gecompromitteerde server zet een uitgaande verbinding op naar infrastructuur onder controle van de aanvaller (vandaar "reverse"), en alle verdere interactie loopt over die kanaal.
Dat uitgaande karakter is precies het aangrijpingspunt voor de verdediging. De meeste interne netwerken hebben geen egress-filter van betekenis — webservers mogen alles naar buiten, zolang het maar 443/tcp heet. Juist daar wint deze techniek: een shell over TLS naar een anonieme VPS is vanuit netwerk-oogpunt niet te onderscheiden van een legitieme API-call, zonder expliciete controles.
Variaties: klassieke bash-over-tcp, shells verpakt in HTTPS, protocollen-tunneling (DNS, ICMP), en modernere C2-frameworks die jitter en sleep-patterns gebruiken om binnen beaconing-noise te verdwijnen.
> periodicity analysis op netflow per src-host · JA3 hash niet eerder gezien vanaf die host · DNS entropy score per subdomein · process-to-socket mapping van EDR
Met interactieve toegang op het systeem wordt overleven van herstarts en patches de eerstvolgende zorg van de aanvaller. Klassieke technieken: een cronjob of systemd-timer die de callback opnieuw initieert, een aangepaste SSH-sleutelfile, een backdoor-account, een modificatie aan een opstart-service of webapplicatie-config.
Deze fase genereert meetbare afwijkingen van de verwachte systeemtoestand. Als je systeem-configuratie niet onder configuration management valt en je kunt geen diff maken tegen een bekende baseline, wordt deze fase pas zichtbaar wanneer het te laat is.
> FIM op de cron-, ssh- en systemd-paden · config-management drift report · nieuwe uid 0 user alert · audit-log op useradd/usermod
De laatste fase is beweging binnen het netwerk en het daadwerkelijk uitvoeren van data. De gecompromitteerde webserver is zelden het uiteindelijke doel — die ligt in de databases, fileshares, ERP-systemen, of in het identity-platform. Lateraal verplaatsen gebeurt via gestolen credentials (memory-scraping, config-files), misbruikte service-accounts, of pass-the-hash / pass-the-ticket technieken op Windows-kant.
De daadwerkelijke exfiltratie volgt — in compressed, encrypted chunks, vaak gemengd met legitiem verkeer (HTTPS naar cloud-storage, DNS-tunneling voor kleine volumes). Dit is óók het moment waarop ransomware-actoren doorgaans hun lading droppen. Wie hier nog niet gedetecteerd heeft, zit in een incident-responsescenario, niet meer in een preventiescenario.
> segment-crossing flows die default-deny horen te zijn · auth spike per service-account · egress bytes per host vs 30d-baseline · file-read rate per user
De sterkte van deze aanpak zit niet in één perfecte controle, maar in het cumulatieve effect: een aanvaller moet elke laag passeren zonder een signaal te produceren dat je oppikt. In de praktijk lukt dat hoogst zelden. Vijf lagen waar je je aandacht op moet concentreren: