Le tuto précédent est une faille

SanAndrea.jpgNégligence caractérisée: Arrrg!!!!!!, mais j'y pense... Je viens d'ajouter une faille sur mon serveur avec le billet précédent!!!!!! je viens de tester l'url suivante:
http://blog-du-grouik.tinad.fr/fichiers.php?filename=../robots.txt
Grâce aux ".." je peux remonter de dossier, et du coup partout où www-data peut lire, j'ai accès en remontant simplement les répertoires. (Et trouver des scripts contenant des mots de passe par exemple)

Bon... il va falloir contrôler ce que l'utilisateur met dans l'URL. chrooter www-data dans son Vhost? nana je ne sais pas comment on fait.

Le plus simple sera de détecter les "..". J'ajoute donc une condition à laquelle on retourne la page 404.

et mon fichier php devient

<?php
 
//tester si le fichier existe, et la présence de ".." indiquant que l'utilisateur tente de remonter les répertoires.
if((!file_exists("fichiers/".$_GET['filename'])) OR (strpos($_GET['filename'],'..')!==false))
{
	//ce n'est pas le cas, on envoit l'header 404
	header("HTTP/1.0 404 Not Found");
	echo file_get_contents("404/404.htm");
	//puis on quitte le script
	die;
}
//on indique le mime (type) du fichier
header('Content-type: '.mime_content_type('fichiers/'.$_GET['filename']));
//on indique le nom du fichier:
header('Content-Disposition: attachment; filename="'.$_GET['filename']);
//on envoie le fichier source
readfile("fichiers/".$_GET['filename']);
 
?>

Si vous voyez une autre façon d'utiliser ce script à mauvais escient, merci de me prévenir.

Page top