File Upload โ Low
Websites hebben vaak een functie om afbeeldingen te uploaden. Een slecht beveiligde upload-functie is een van de snelste manieren voor een hacker om de server over te nemen.
1. Predict (Voorspel)โ
Wanneer je op het Low level een bestand uploadt, doet de server dit:
$target_path = "../../hackable/uploads/";
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path );
Vraag: Dit script is ontworpen voor afbeeldingen. Wat gebeurt er als je een bestand met de naam shell.php uploadt met PHP-code erin? Wordt dit geweigerd?
Antwoord
Nee, de server weigert helemaal niets. Het script verplaatst elk geรผpload bestand โ ongeacht het type โ naar een voor het publiek toegankelijke map (/hackable/uploads/). Als je daarna in je browser navigeert naar http://localhost/hackable/uploads/shell.php, voert de webserver jouw PHP-code uit. Met รฉรฉn bestand heb je een Web Shell gecreรซerd.
2. Run (Uitvoeren)โ
Start het lab en bekijk het uploadformulier.
Upload een gewone afbeelding (een .jpg of .png van je computer). Observeer het bericht dat de server teruggeeft na de upload โ let op het pad waar het bestand is opgeslagen.
3. Investigate (Onderzoeken)โ
Maak een tekstbestand met de naam test.txt op je computer met de tekst hallo. Upload dit bestand via het formulier.
Vraag: Accepteert de server het tekstbestand? Wat onthult dit over welke controles de server uitvoert op het bestandstype?
Antwoord
Ja, de server accepteert elk bestand zonder enige controle. Het pad in de succesboodschap (../../hackable/uploads/test.txt) onthult dat alle uploads naar dezelfde publiek toegankelijke map gaan โ ongeacht of het een foto, tekstbestand of uitvoerbaar script is.
4. Modify & Make (Aanpassen & Maken)โ
Maak een kwaadaardig PHP-bestand aan en upload het naar de server.
Tip
Maak op je eigen computer (met Kladblok of een teksteditor) een bestand met de naam shell.php en zet de volgende code erin:
<?php echo system('whoami'); ?>
Antwoord
- Upload
shell.phpvia het DVWA-formulier. - Noteer het pad dat de server teruggeeft (bijv.
../../hackable/uploads/shell.php). - Navigeer in je browser naar dat bestand:
http://localhost/DVWA/hackable/uploads/shell.php. - In plaats van een gedownload bestand zie je de accountnaam van de webserver โ jouw PHP-code is uitgevoerd!
5. โ Wat moest je zien?โ
:::tip Controle
- De server accepteert het uploaden van
shell.phpzonder foutmelding. - Na het navigeren naar de upload-URL zie je de output van
whoamiโ de gebruikersnaam waaronder de webserver draait. - Er is geen beveiliging: de server voert elk geรผpload bestand uit als broncode.
Zie je een lege pagina? Controleer of je de PHP-code correct in shell.php hebt staan, inclusief de <?php- en ?>-tags.
:::
6. Er gaat iets mis...โ
Wat als de DVWA-server het bestand wel opslaat maar het script niet uitvoert? Controleer of je naar de juiste URL navigeert โ het pad begint met /DVWA/hackable/uploads/, niet met het pad dat de server in de succesboodschap toont (dat is een relatief serverpad, niet een URL).