API Testing
Bron: PortSwigger Web Security Academy Auteur: Johan Beysen
1. Wat is een API?
API = Application Programming Interface — een interface waarmee applicaties met elkaar communiceren via gestructureerde HTTP-requests en responses.
2. Recon — API Endpoints Vinden
Via Burp Crawl
Browse of crawl door de website totdat je een API-request tegenkomt in Burp, bijv.:
Stuur deze door naar Repeater en ga backwards tracken door argumenten weg te laten:
Rechterklik in de response → Open in browser → API documentatie zichtbaar.
Bekende Documentatie Endpoints
Base path verkennen
Als je /api/swagger/v1/users/123 vindt, probeer ook:
/api/swagger/v1/api/swagger/api
Gebruik Intruder met een wordlist van veelgebruikte API-paden.
3. Interageren met API Endpoints
Door API-requests in Repeater te sturen en te variëren, leer je hoe de API reageert.
OPTIONS Method
Stuur een OPTIONS request op elk endpoint om te zien welke methodes toegestaan zijn:
Wat je uit OPTIONS leert
1. Toegestane HTTP methoden
Allow: GET, POST, PUT, DELETE, PATCH
→ DELETE is mogelijk — probeer product verwijderen zonder auth!
2. CORS configuratie
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, DELETE
Access-Control-Allow-Credentials: true
→ Controleer op CORS misconfiguratie!
3. Verborgen methoden
Request: GET /api/admin → 403 Forbidden
Request: OPTIONS /api/admin → Allow: GET, POST, DELETE, TRACE
Request: TRACE /api/admin → 200 OK ✓
→ TRACE kan onbeschermd zijn!
4. Content-Type requirements
5. API versie-info
HTTP Methoden Overzicht
| Method | Wat test je? | Typisch risico |
|---|---|---|
OPTIONS |
Welke methods zijn allowed | Verborgen/onbeschermde methods |
HEAD |
Zoals GET maar zonder body | Soms andere AC dan GET |
TRACE |
Echo van request | Info disclosure, XST |
CONNECT |
Tunnel setup | SSRF mogelijk |
PATCH vs PUT |
Partial vs full update | Verschillende AC rules |
Reconnaissance Flow
# 1. Probeer OPTIONS op elk endpoint
OPTIONS /api/users
OPTIONS /api/admin
OPTIONS /api/products/1
# 2. Vergelijk Allow headers
/api/users → Allow: GET, POST
/api/admin → Allow: GET, POST, DELETE, PATCH ← Extra methods!
# 3. Test die extra methods
DELETE /api/admin/users/123 ← Misschien geen AC check?
Praktisch Voorbeeld
# Stap 1: Discovery
OPTIONS /api/products/1/price
→ Allow: GET, PATCH
# Stap 2: Test PATCH zonder auth
PATCH /api/products/1/price
Content-Type: application/json
{"price": 0}
→ 200 OK ← Vulnerability! Geen AC check op PATCH
4. Server Side Parameter Pollution
Soms heb je API's die niet direct zichtbaar zijn maar server-side werken. Om deze in kaart te brengen heb je parameters nodig — waarvan je vaak op voorhand niet weet welke het zijn.
De kunst bestaat erin te kijken welke parameters mogelijk zijn en op deze manier te gaan manipuleren.
Dit kunnen zijn:
- Query parameters
- Form fields
- Headers
- URL Path parameters
Gebruikte Karakters
Burp tip
Ctrl+U of Ctrl+Shift+U in Burp Repeater zet geselecteerde tekst om naar URL-encoding.
Voorbeeld — Parameter Inject
# Origineel request
GET /api/userinfo?user=wiener
# Inject extra parameter via #
GET /api/userinfo?user=wiener%23foo
→ Wat de server ziet: user=wiener#foo
→ Alles na # kan als commentaar of tweede query behandeld worden
# Inject via &
GET /api/userinfo?user=wiener%26admin=true
→ Wat de server ziet: user=wiener&admin=true
Doel
Door parameters te injecteren probeer je interne server-side parameters te manipuleren die normaal niet via de client bereikbaar zijn.