Information Disclosure
Bron: PortSwigger Web Security Academy
Auteur: Johan Beysen
1. Wat is Information Disclosure?
Information Disclosure (ook: information leakage) treedt op wanneer een applicatie onbedoeld gevoelige informatie blootstelt aan gebruikers.
Wat kan gelekt worden:
- Technische details: software, versies, frameworks, interne paden
- Broncode, configuratiebestanden, back-upbestanden
- Gebruikersdata: e-mails, API keys, wachtwoorden, tokens
- Interne infrastructuur: IP-adressen, hostnamen, netwerktopologie
- Business logic en interne processen
Waarom gevaarlijk:
Informatielekken zijn op zich soms low-severity, maar ze vormen de basis voor verdere aanvallen. Een versienummer leidt naar een specifieke CVE. Een interne hostname maakt phishing geloofwaardiger. Een API key geeft directe toegang.
Impact is context-afhankelijk
Een gelekt e-mailadres van een admin is trivialer dan een gelekte database-connectiestring. Beoordeel altijd in combinatie met de verdere exploitatiemogelijkheden.
2. Detectie
| Locatie | Wat je zoekt |
|---|---|
robots.txt / sitemap.xml |
Verborgen paden, admin endpoints |
| HTML broncode | Developer comments, hardcoded paden of keys |
| HTTP response headers | Server, X-Powered-By, X-Generator, versies |
| Foutmeldingen | Stack traces, bestandspaden, SQL queries |
| JS bestanden | API endpoints, tokens, interne logica |
| Backup- en tijdelijke bestanden | .bak, .old, .swp, ~, _backup |
| Directorylijstingen | Open directory browsing |
.git / .svn blootstelling |
Volledige broncode herstelbaar |
| Debug parameters | Verborgen debug-pagina's |
Burp Suite
- Burp Scanner markeert automatisch informatielekken in responses
- Burp Engagement Tools → Find comments — zoekt developer comments in alle responses
- Burp Content Discovery — ontdekt verborgen bestanden en mappen
3. HTTP Response Headers
Standaard onthullen veel webservers en frameworks hun identiteit in headers:
HTTP/1.1 200 OK
Server: Apache/2.4.51 (Ubuntu)
X-Powered-By: PHP/8.0.13
X-Generator: Drupal 9
X-AspNet-Version: 4.0.30319
Elke versie is potentieel een CVE-zoekopdracht.
Interessante headers:
| Header | Wat het onthult |
|---|---|
Server |
Webserver + versie |
X-Powered-By |
Backend taal/framework + versie |
X-Generator |
CMS of framework |
X-AspNet-Version |
.NET versie |
X-Debug-Token |
Symfony Profiler token |
Via |
Proxy / loadbalancer info |
X-Forwarded-Server |
Interne hostname |
4. Foutmeldingen & Stack Traces
Verbose foutmeldingen zijn een van de rijkste bronnen van informatielekken.
Wat stack traces onthullen
Internal Server Error
java.sql.SQLException: Table 'prod_db.users' doesn't exist
at com.example.UserDAO.getUser(UserDAO.java:47)
at com.example.UserServlet.doGet(UserServlet.java:23)
...
Uit deze fout haal je:
- Databasenaam: prod_db
- Tabelnaam: users
- Taal: Java
- Klassenamen en bestandspaden
- Intern versienummer indien aanwezig
Foutmeldingen triggeren
Parameter manipulation: id=abc (integer verwacht)
Type mismatch: date=not-a-date
Ontbrekende parameters: verwijder verplichte velden
Boundary testing: extreem lange strings, null bytes, speciale tekens
Verschil tussen productie en development
Development-omgevingen tonen vaak volledige stack traces. Productie zou dat niet mogen doen — maar doet het regelmatig toch. Altijd testen.
5. Developer Comments in Broncode
<!-- TODO: remove hardcoded admin password before deployment -->
<!-- Admin login: admin / S3cur3P@ss -->
<!-- DEBUG: bypass auth with ?debug=true -->
<!-- Internal API: http://internal-api.corp.local/v2 -->
// Tijdelijk: auth check uitgeschakeld voor testing
// if (!isAuthenticated()) return 403;
const API_KEY = "sk-prod-abc123xyz"; // ← hardcoded key
const INTERNAL_HOST = "10.0.0.5:8080";
Zoekpatronen in Burp / browser:
6. Debug Pagina's & Parameters
Sommige applicaties hebben debug-functionaliteit die in productie actief is gebleven:
Frameworks met bekende debug endpoints:
| Framework | Debug URL |
|---|---|
| Laravel | /_ignition/health-check |
| Symfony | /_profiler |
| Django | Stack trace pagina bij DEBUG=True |
| Spring Boot | /actuator, /actuator/env, /actuator/heapdump |
| Flask | Werkzeug debugger op port 5000 |
Spring Boot Actuator
/actuator/env onthult alle omgevingsvariabelen — inclusief database-credentials en API keys. /actuator/heapdump geeft een volledige memory dump terug.
7. Backup- en Tijdelijke Bestanden
Teksteditors en deployment-scripts laten soms bestanden achter:
config.php.bak config.php.old config.php~
index.php.swp .DS_Store Thumbs.db
web.config.bak .env.bak database.yml.old
# Ffuf met backup-extensie wordlist
ffuf -u https://target.com/FUZZ -w backup-files.txt
# Handmatig testen op bekende bestanden
curl https://target.com/config.php.bak
curl https://target.com/.env.bak
curl https://target.com/index.php~
.DS_Store onthult een directorystructuur van de Mac-ontwikkelaar:
8. Directory Listing
Als de webserver directory listing heeft ingestaan, zijn mappen volledig doorbladerbaar:
Index of /uploads/
../
2024-01-15-backup.zip 2.3M
database-dump.sql 450K
internal-docs/
config-old.tar.gz 1.1M
# Controleer mappen zonder index.html
curl https://target.com/uploads/
curl https://target.com/backup/
curl https://target.com/files/
9. Versiebeheer Blootstelling (.git / .svn)
Als de .git map publiek toegankelijk is, kan de volledige broncode gereconstrueerd worden — inclusief commit history met verwijderde bestanden.
# Controleer of .git toegankelijk is
curl https://target.com/.git/HEAD
# Verwacht: ref: refs/heads/main
# Tool: git-dumper
git-dumper https://target.com/.git ./output
# Tool: gittools / GitHack
python GitHack.py https://target.com/.git/
# Na dumpen: commit history doorzoeken op gevoelige data
git log --all --oneline
git show <commit-hash>
git diff HEAD~1
Commit history
Verwijderde bestanden en gecleande commits zijn nog steeds aanwezig in de git-objectstore. Een hardcoded wachtwoord dat "al verwijderd" is, is vaak nog gewoon opvraagbaar.
# Zoek naar gevoelige strings in volledige git history
git log -p --all | grep -i "password\|secret\|key\|token"
10. Cheat Sheet
Prioriteitenlijst
| Prioriteit | Check | Reden |
|---|---|---|
| 1 | .git exposure |
Volledige broncode + history |
| 2 | /actuator/env |
Credentials en config |
| 3 | Stack traces | DB-namen, paden, versies |
| 4 | .env / .env.bak |
API keys, DB-credentials |
| 5 | robots.txt |
Verborgen paden |
| 6 | JS broncode | Endpoints, tokens, logica |
| 7 | Response headers | Versies voor CVE-lookup |
| 8 | Backup bestanden | Configs, broncode |
| 9 | Directory listing | Bestandsstructuur |
| 10 | HTML comments | Credentials, debug info |
Snelle checks bij elke assessment
# Headers
curl -I https://target.com
# Robots en sitemap
curl https://target.com/robots.txt
curl https://target.com/sitemap.xml
# Git blootstelling
curl https://target.com/.git/HEAD
# Env bestanden
curl https://target.com/.env
curl https://target.com/.env.bak
curl https://target.com/.env.local
# Spring Boot actuator
curl https://target.com/actuator
curl https://target.com/actuator/env
# Backup bestanden op bekende locaties
curl https://target.com/config.php.bak
curl https://target.com/wp-config.php.bak