Outils pour utilisateurs

Outils du site


web:faille_upload

Les failles Upload

La faille upload consiste à uploader un fichier au format inattendu dans un formulaire.

Un formulaire standard non sécurisé est développé comme ceci :

<form method="POST" action="upload.php" enctype="multipart/form-data">
     Fichier : <input type="file" name="avatar">
     <input type="submit" name="envoyer" value="Envoyer le fichier">
</form>

Ici le fichier sera envoyé vers la page upload.php qui le traitera ou non.

<?php
$target_path  =  "uploads/";
$target_path  =  $target_path  .  basename($_FILES['uploadedfile']['name']);
if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file " . basename($_FILES['uploadedfile']['name']) . " has been uploaded";
} else {
echo "There was an error uploading the file, please try again!";
}
?>

Ici aucune extension n'est contrôlée.

Exploitation :

Le but est d'uploader un fichier php qui sera interprété par le serveur.

Le fichier que nous uploaderons :

exploit.php

<?php echo 'Best Hacker'; ?>

Dans notre exploitation le formulaire n'acceptera que les fichiers en .pdf et en .doc

Première méthode : La double extension

Le but est de rajouter une deuxième extension pour passer la validation.

Nous renommons notre fichier : exploit.php en exploit.php.pdf

Quand nous visualiserons notre fichier sur le serveur nous pourrons voir :

 Best Hacker 

Deuxième méthode : Mime type

MIME est un identifiant de format de données sur internet en deux parties.

exemple :

image/jpeg pour les photos en jpeg

text/csv pour les fichiers en csv

Il en existe une multitude que vous pourrez trouver ici : http://www.freeformatter.com/mime-types-list.html Certains développeurs pensent que la validation du fichier peut se réaliser par une simple comparaison du type MIME. FAUX !

Il faut modifier les paramètre envoyé en POST au serveur :

Pour cela l’add-on firefox “Tamper Data” est très pratique. Nous allons altérer les données pendant l’upload de notre fichier .php ce qui nous donne dans la valeur du paramètre post :

Content-Disposition: form-data;
name="file";
filename="exploit.php"\r\n
Content-Type: application/x-php\r\n\r\n<?php\necho 'Best hacker'\n?>\n\r\n

Il suffit donc de modifier

"Content-Type : application/x-php"
 par "Content-Type : application/msword"

Cela fera croire au serveur qu'il reçoit un fichier .doc au lieu du fichier .php.

Troisième méthode : Le null byte

Le null byte est un caractère qui signifie la fin de chaîne. C'est une notion utilisé en C. Le PHP étant écrit en C il fait fasse au même problèmes. Une fin de chaîne est signifié par le caractère \0

Pour l'exploiter nous utiliserons la technique suivante :

Renommer notre fichier exploit.php en exploit.php%00.pdf

source : http://www.acunetix.com/websitesecurity/upload-forms-threat/

web/faille_upload.txt · Dernière modification: 2016/07/04 08:38 (modification externe)