Skip to content

Webapp Pentest Stappenplan — OWASP Top 10

Versie: 1.0
Referentie: OWASP Top 10 (2021)
Scope: Volledige webapplicatie — van recon tot rapportage


Legende

Symbool Betekenis
Veilig uitvoerbaar in productie
⚠️ PROD-WARNING Risico in productie — gebruik staging/testomgeving
🔴 PROD-VERBODEN Nooit uitvoeren in productie zonder expliciete schriftelijke toestemming
🛠️ Aanbevolen tooling

Fase 0 — Voorbereiding & Scope

Voordat ook maar één request verstuurd wordt, moeten de juridische en technische kaders vastliggen.

  • [ ] Schriftelijke toestemming (Rules of Engagement) ondertekend
  • [ ] Scope gedefinieerd: domeinen, IP-ranges, uit-scope endpoints
  • [ ] Testomgeving geïdentificeerd (staging vs. productie)
  • [ ] Contactpersoon klant beschikbaar tijdens test
  • [ ] Burp Suite Pro geconfigureerd (proxy, scope filter, upstream proxy indien nodig)
  • [ ] VPN/verbinding naar doelnetwerk actief indien van toepassing
  • [ ] Notities-structuur aangemaakt (bijv. Obsidian, MkDocs draft)

Fase 1 — Reconnaissance & Mapping

1.1 Passieve verkenning (OSINT)

✅ Veilig — geen directe interactie met de doelomgeving

  • [ ] WHOIS-lookup domeinen en IP-ranges
  • [ ] DNS-enumeration: A, MX, TXT, SPF, DMARC, CAA records
  • [ ] Subdomain discovery via subfinder, amass, dnsx, SecurityTrails
  • [ ] Certificate Transparency logs (crt.sh)
  • [ ] Google Dorks: site:, inurl:, filetype:, intitle:
  • [ ] Shodan / Censys: open poorten, banners, TLS-informatiehttps://chromaweb.cromax.com
  • [ ] Wayback Machine / web archief: historische endpoints en parameters
  • [ ] GitHub/GitLab dorking: gelekte credentials, API keys, intern code

🛠️ subfinder, amass, dnsx, gau, waybackurls, SecurityTrails, Shodan


1.2 Actieve mapping

⚠️ PROD-WARNING — Verhoogd netwerkverkeer zichtbaar in logs

  • [ ] Crawl applicatie via Burp Suite Spider / OWASP ZAP
  • [ ] Directory- en bestandsenumeration: ffuf, feroxbuster, gobuster
  • [ ] JavaScript-analyse: endpoints, API-routes, tokens extraheren
  • Tools: LinkFinder, JSParser, handmatig in DevTools
  • [ ] Technologie-fingerprinting: frameworks, CMS, libraries, versies
  • Tools: Wappalyzer, whatweb, Burp response headers
  • [ ] API-schema discovery: /api/docs, /swagger.json, /openapi.yaml, GraphQL introspection
  • [ ] HTTP-methoden testen per endpoint (OPTIONS, PUT, DELETE, PATCH)
  • [ ] Sitemap.xml en robots.txt analyseren

🛠️ Burp Suite Pro, ffuf, feroxbuster, LinkFinder, whatweb


Fase 2 — A01: Broken Access Control

OWASP #1 — Meest voorkomende kritieke kwetsbaarheid

2.1 Horizontale privilege escalatie (IDOR)

✅ Testbaar in productie mits eigen testaccounts gebruikt worden

  • [ ] Identificeer object-referenties in URLs, POST-bodies, cookies (IDs, UUIDs, slugs)
  • [ ] Vervang eigen ID door dat van een andere gebruiker
  • [ ] Test op sequentiële én UUID-gebaseerde identifiers
  • [ ] Controleer of API-responses data lekken die niet getoond worden in de UI

2.2 Verticale privilege escalatie

✅ Testbaar met eigen accounts op verschillende rollen

  • [ ] Test admin-endpoints vanuit laagbevoegd account
  • [ ] Forceer browsing naar /admin, /dashboard, /config, /manage
  • [ ] Verwijder of manipuleer rolegebaseerde parameters in requests
  • [ ] Test of UI-gebaseerde beperkingen ook server-side gehandhaafd worden

2.3 Access control op HTTP-methoden

✅ Testbaar in productie

  • [ ] Probeer schrijfoperaties (PUT, DELETE, PATCH) op read-only endpoints
  • [ ] Test of HEAD requests gefilterde data blootleggen

2.4 Path traversal / Directory traversal

⚠️ PROD-WARNING — Kan bestandssysteem lezen; voorzichtig met payloads

  • [ ] Test bestandsreferenties in parameters: ?file=, ?path=, ?include=
  • [ ] Payloads: ../../etc/passwd, ....//....//etc/passwd, URL-encoded varianten
  • [ ] Test op Windows-paden indien van toepassing: ..\..\windows\system32\
  • [ ] Controleer op ZIP-slip bij upload-functionaliteit

🛠️ Burp Intruder, ffuf, PortSwigger path traversal labs


Fase 3 — A02: Cryptographic Failures

✅ Grotendeels observationeel — veilig in productie

  • [ ] Controleer TLS-versie en cipher suites via testssl.sh of SSL Labs
  • Zoek naar: SSLv3, TLS 1.0/1.1, RC4, NULL ciphers, EXPORT ciphers
  • [ ] Controleer HSTS-header aanwezig en correct geconfigureerd
  • [ ] Mixed content: HTTP-resources op HTTPS-pagina's
  • [ ] Gevoelige data in URL-parameters (wachtwoorden, tokens, sessie-IDs)
  • [ ] Gevoelige data in browser history, logs, referer headers
  • [ ] Wachtwoorden in plaintext opgeslagen (test via account reset flows)
  • [ ] Cookies: Secure-flag aanwezig op gevoelige cookies
  • [ ] Zwakke hashing: MD5/SHA1 voor wachtwoorden (controleer bij datalekken of via foutmeldingen)
  • [ ] JWT-analyse: alg: none, zwakke secrets, RS256→HS256 algorithm confusion

🛠️ testssl.sh, SSL Labs, jwt_tool, Burp Suite, hashid


Fase 4 — A03: Injection

4.1 SQL Injection

⚠️ PROD-WARNING — Destructieve payloads (DROP, DELETE) zijn verboden in productie

  • [ ] Identificeer alle invoerpunten: formulieren, URL-params, headers, cookies, JSON-body
  • [ ] Test op foutmeldingen met ', ", --, #
  • [ ] Controleer op blind SQLi via time-based: '; WAITFOR DELAY '0:0:5'--
  • [ ] Boolean-based blind: ' AND 1=1-- vs ' AND 1=2--
  • [ ] Out-of-band SQLi (DNS exfil via Burp Collaborator)
  • [ ] Test op ORM-injecties (HQL, JPQL, LINQ)
  • [ ] Automatische scan met sqlmap (staging only)

🔴 PROD-VERBODENsqlmap --dump, DROP TABLE, DELETE FROM in productie

🛠️ Burp Intruder, sqlmap (staging), handmatige payloads


4.2 Command Injection

🔴 PROD-VERBODEN — Nooit destructieve OS-commando's in productie uitvoeren

  • [ ] Test invoerpunten die OS-functies aanroepen (ping, nslookup, file conversie)
  • [ ] Payloads: ; id, | whoami, `id`, $(id)
  • [ ] Out-of-band detectie via Burp Collaborator (DNS/HTTP pingback)
  • [ ] Blind command injection via tijdvertraging: ; sleep 5

⚠️ PROD-WARNING — OOB-detectie via Collaborator is veilig; directe commando-uitvoer niet


4.3 LDAP / XML / XPath Injection

⚠️ PROD-WARNING — Test met niet-destructieve payloads

  • [ ] LDAP: *)(uid=*))(|(uid=*
  • [ ] XML/XPath injectie in SOAP/XML APIs
  • [ ] XXE (zie ook A05 hieronder)

Fase 5 — A04: Insecure Design

✅ Grotendeels architecturaal — veilig observeerbaar

  • [ ] Analyseer business logic flows (bestelprocessen, kortingscodes, saldo's)
  • [ ] Test rate limiting op kritieke functies (login, wachtwoordreset, OTP)
  • [ ] Controleer op multi-step process bypass (stap 2 bereiken zonder stap 1)
  • [ ] Test op "negative price" of integer overflow in e-commerce
  • [ ] Analyseer threat model: ontbreekt defence-in-depth?
  • [ ] Controleer of gevoelige functies enkel via UI-flow bereikbaar zijn of ook direct via API

Fase 6 — A05: Security Misconfiguration

✅ Observationeel — veilig in productie

  • [ ] Default credentials testen op beheerinterfaces (admin/admin, admin/password)
  • [ ] Overbodige HTTP-headers: Server, X-Powered-By, X-AspNet-Version
  • [ ] Ontbrekende security headers:
  • Content-Security-Policy
  • X-Frame-Options of frame-ancestors
  • X-Content-Type-Options
  • Referrer-Policy
  • Permissions-Policy
  • [ ] CORS-misconfiguratie: wildcards, reflection van Origin, null origin
  • [ ] Directory listing actief op webserver
  • [ ] Error pages: stack traces, DB-versies, interne paden zichtbaar
  • [ ] Cloud storage: publiek toegankelijke S3-buckets, Azure Blob containers
  • [ ] Debug-modus actief (?debug=true, FLASK_ENV=development)
  • [ ] Verborgen beheerinterfaces via directory enumeration (zie Fase 1.2)

XXE (XML External Entities)

⚠️ PROD-WARNING — Gebruik OOB-technieken, geen bestandslees-payloads in productie

  • [ ] Identificeer XML-verwerkende endpoints
  • [ ] Test met externe entiteit naar Burp Collaborator
  • [ ] Test op SSRF via XXE (<!ENTITY xxe SYSTEM "http://169.254.169.254/">)

🛠️ Burp Suite, nuclei (misconfig templates)


Fase 7 — A06: Vulnerable and Outdated Components

✅ Veilig uitvoerbaar — puur informatief

  • [ ] Inventariseer alle client-side libraries (JavaScript): versies via DevTools / Wappalyzer
  • [ ] Controleer npm/yarn lock files indien beschikbaar (bijv. via GitHub)
  • [ ] Server-side frameworks: versie uit headers, foutpagina's of /readme, /changelog
  • [ ] Vergelijk versies met CVE-databases: NVD, Snyk, OSV
  • [ ] CMS-specifiek: WordPress plugins/themes versies, Drupal modules
  • [ ] Controleer op bekende exploits voor geïdentificeerde versies

🛠️ retire.js, npm audit, Snyk, wappalyzer, NVD


Fase 8 — A07: Identification and Authentication Failures

✅ Testbaar met eigen accounts in productie

  • [ ] Wachtwoordbeleid: minimale complexiteit, maximale lengte
  • [ ] Account lockout na X mislukte pogingen
  • [ ] Username enumeration via foutmeldingen of timing-verschil
  • [ ] "Forgot password" flow: token-lengte, geldigheid, hergebruik
  • [ ] MFA-implementatie: bypass via response manipulatie, hergebruik van codes
  • [ ] "Remember me" functionaliteit: token-analyse, levensduur
  • [ ] OAuth2/OIDC flows: state-parameter aanwezig, token-lekkage via referer

Sessie-management

  • [ ] Sessitoken entropie en lengte (minimum 128 bit)
  • [ ] Sessie-invalidatie bij logout (server-side)
  • [ ] Sessie-invalidatie bij wachtwoordwijziging
  • [ ] Session fixation: token verandert na login?
  • [ ] Cookie-attributen: HttpOnly, Secure, SameSite

🛠️ Burp Suite, ffuf (credential stuffing op staging), jwt_tool


Fase 9 — A08: Software and Data Integrity Failures

9.1 Bestandsupload

⚠️ PROD-WARNING — Upload geen echte webshells; gebruik EICAR of onschadelijke PoC's

  • [ ] Controleer welke bestandstypen geaccepteerd worden
  • [ ] Bypass content-type check: verander Content-Type header
  • [ ] Dubbele extensie: shell.php.jpg, shell.php%00.jpg
  • [ ] Magic bytes manipulatie
  • [ ] Upload naar publiek toegankelijke locatie?
  • [ ] Bestandsnaam sanitisatie (path traversal via filename)
  • [ ] SVG-upload: embedded XSS of SSRF

🔴 PROD-VERBODEN — Geen functionele webshells uploaden in productie

9.2 CI/CD & Supply Chain

✅ Observationeel

  • [ ] Controleer of CDN-resources geladen worden met SRI-hashes
  • [ ] Analyseer of externe packages gepind zijn op specifieke versies
  • [ ] Zoek naar onveilige deserialisatie-indicatoren (Java serialized objects, pickle, PHP serialize)

Fase 10 — A09: Security Logging and Monitoring Failures

✅ Veilig testbaar — observationeel

  • [ ] Genereer bewust falende loginpogingen — ontvang je een alert?
  • [ ] Controleer of verdachte activiteit (SQLi-strings, XSS) gelogd wordt
  • [ ] Zoek naar gevoelige data in logs (wachtwoorden, tokens, PII)
  • [ ] Controleer beschikbaarheid van /logs, /log, /debug, /trace endpoints
  • [ ] Zijn foutmeldingen voor gebruikers informatiearm (geen stack traces)?
  • [ ] Is er een incident response proces aantoonbaar?

Fase 11 — A10: Server-Side Request Forgery (SSRF)

⚠️ PROD-WARNING — Gebruik Burp Collaborator voor OOB-detectie; geen interne scans uitvoeren in productie

  • [ ] Identificeer parameters die URL's of hostnamen verwerken (url=, webhook=, redirect=, load=, fetch=)
  • [ ] Test op interne netwerktoegang: http://127.0.0.1, http://localhost
  • [ ] Cloud metadata endpoint: http://169.254.169.254/latest/meta-data/
  • [ ] SSRF via indirecte inputs: PDF-generators, afbeeldingsprocessors, importfuncties
  • [ ] Blind SSRF detectie via Burp Collaborator (DNS/HTTP callback)
  • [ ] Protocol-switching: file://, dict://, gopher://
  • [ ] SSRF filter bypass: http://127.0.0.1#@evil.com, decimale IP-notatie, IPv6 [::1]

🔴 PROD-VERBODEN — Geen interne portscan via SSRF uitvoeren in productie

🛠️ Burp Collaborator, ssrfmap, handmatige payloads


Fase 12 — Cross-Site Scripting (XSS)

Niet in de OWASP Top 10 2021 als aparte categorie, maar valt onder A03 Injection

12.1 Reflected XSS

✅ Testbaar in productie mits geen persistentie

  • [ ] Identificeer invoerpunten die input terugspiegelen in de response
  • [ ] Test in URL-parameters, zoekvelden, foutmeldingen
  • [ ] Controleer HTML-context, attribuut-context, JavaScript-context, URL-context

12.2 Stored XSS

⚠️ PROD-WARNING — Gebruik unieke, herkenbare payloads; verwijder ze onmiddellijk na bevestiging

  • [ ] Identificeer opslagpunten: commentaren, profielvelden, berichtenformulieren
  • [ ] Test op opgeslagen payload die bij andere gebruikers renderen
  • [ ] Controleer admin-panels: stored XSS die admins raken is kritiek

12.3 DOM-based XSS

✅ Testbaar in productie — enkel client-side

  • [ ] Analyseer JavaScript: document.location, innerHTML, eval(), document.write()
  • [ ] Test #fragment-gebaseerde injection
  • [ ] Gebruik browser DevTools en DOM Invader (Burp Suite)

🛠️ Burp Suite DOM Invader, dalfox, handmatige analyse


Fase 13 — CSRF

✅ Testbaar in productie met eigen account

  • [ ] Controleer aanwezigheid van CSRF-token op state-wijzigende requests
  • [ ] Controleer of CSRF-token server-side gevalideerd wordt (verwijder/leeg het token)
  • [ ] Test SameSite-cookie attribuut als CSRF-mitigatie
  • [ ] Test op JSON CSRF (Content-Type: text/plain aanvallen)
  • [ ] Controleer op voorspelbare of statische CSRF-tokens

Fase 14 — API-specifieke tests

⚠️ PROD-WARNING — Rate limiting en mass assignment kunnen data muteren

  • [ ] REST API: test alle CRUD-operaties per endpoint
  • [ ] GraphQL: introspection query, batch queries, mutation testing
  • [ ] Mass assignment: stuur extra velden mee in POST/PUT (role, isAdmin, balance)
  • [ ] API-versioning: test verouderde versies (/v1/ naast /v2/)
  • [ ] Controleer of interne API-endpoints bereikbaar zijn zonder authenticatie
  • [ ] JWT-validatie: alg: none, algorithm confusion (RS256→HS256), expired tokens
  • [ ] API rate limiting en quota bypass

🛠️ Burp Suite, Postman, graphql-cop, jwt_tool


Fase 15 — Business Logic Testing

✅ Testbaar met eigen accounts

  • [ ] Forceer negatieve waarden (hoeveelheden, prijzen, kortingen)
  • [ ] Test workflow-bypass: ga rechtstreeks naar stap 3 zonder stap 1 en 2
  • [ ] Test op race conditions bij kritieke acties (betaling, activatie, limiet-controles)
  • [ ] Coupon/kortingscode: meerdere keren gebruiken, stapelen, negatieve kortingen
  • [ ] Test rolwisseling mid-sessie

Race Conditions

🔴 PROD-VERBODEN — Race condition aanvallen op financiële transacties in productie

  • [ ] Gebruik Burp Suite "Send group in parallel" voor simultane requests
  • [ ] Test op TOCTOU (Time-of-Check to Time-of-Use) kwetsbaarheden

Fase 16 — Infrastructuur & Netwerk (indien in scope)

⚠️ PROD-WARNING — Poortscannen is zichtbaar in logs en kan IDS/IPS triggeren

  • [ ] Portscan: nmap -sV -sC --top-ports 1000
  • [ ] Service fingerprinting: versies, banners
  • [ ] SSL/TLS op alle diensten controleren
  • [ ] Open poorten die niet in scope zijn: documenteer en meld
  • [ ] Firewall rule testing: bereikbaarheid van interne services

🔴 PROD-VERBODEN — Aggressieve scans (-T5, --script vuln) zonder expliciete toestemming

🛠️ nmap, masscan (staging only)


Fase 17 — Rapportage

  • [ ] Bevindingen geordend op risico (Kritiek → Hoog → Gemiddeld → Laag → Informatief)
  • [ ] Per bevinding: beschrijving, stappen om te reproduceren, impact, CVSS-score, aanbeveling
  • [ ] Bewijsmateriaal: screenshots, Burp requests/responses, video indien relevant
  • [ ] Executive summary voor management
  • [ ] Technisch rapport voor development team
  • [ ] Remediatie-adviezen concreet en actionable
  • [ ] Herbeoordeling (retest) ingepland na fixes

Productie-warning Samenvatting

Test Productie-status
Passieve OSINT ✅ Altijd veilig
Directory enumeration ⚠️ Verhoogd verkeer
SQL Injection detectie (foutmeldingen) ⚠️ Voorzichtig
SQLi met DROP/DELETE 🔴 Verboden
Command injection detectie (OOB) ⚠️ Enkel via Collaborator
Command injection uitvoering 🔴 Verboden
XSS reflected ✅ Veilig
XSS stored ⚠️ Direct verwijderen na test
SSRF detectie (Collaborator) ⚠️ Veilig via OOB
SSRF interne scan 🔴 Verboden
Webshell upload 🔴 Verboden
Race conditions (financieel) 🔴 Verboden
Agressieve poortscans 🔴 Verboden zonder toestemming
Path traversal payloads ⚠️ Enkel read, niet write