File Upload (php) Techniques - Pentesting Web

Pour tous les cas possibles ci-dessous, nous allons insérer le fichier PHP suivant, "cmd.php", qui nous servira à injecter des commandes au niveau du système du serveur :

<?php
system($_GET['cmd']);
?>

Types de situations d'abus de téléversement de fichiers :

Aucune validation :

Validation côté client :

Il suffit de supprimer dans le code HTML la validation du fichier JS :

Validation côté serveur (extensions PHP différentes) :

Nous changeons l'extension PHP à certaines de celles-ci :

Dans certains cas, il est possible que le fichier soit téléversé mais ne soit pas interprété :

Nous essayons toutes les extensions possibles jusqu'à ce que l'une soit interprétée dans ce cas (.php5) :

Validation côté serveur (extensions non PHP) :

Nous changeons l'extension PHP à certaines de celles-ci qui ne sont pas PHP jusqu'à ce qu'elles soient interprétées :

Validation côté serveur (extension personnalisée avec .htaccess) :

L'extension .htaccess nous permet de créer notre propre extension en interprétant le code PHP :

Tout d'abord, nous téléversons un fichier .htaccess qui créera l'extension .jordan comme ceci :

Une fois l'extension ajoutée au serveur cible, nous insérons le fichier cmd.jordan en interprétant le code PHP :

Validation côté serveur (restriction de la taille du contenu du fichier) :

Dans ce cas, la taille maximale autorisée est de 30 caractères et pour la réduire, elle serait comme ceci :

  • Maintenant, un cas plus extrême avec une taille maximale de 20 caractères possibles :

Le nom du fichier doit contenir le mot "jpg" :

Il suffit d'ajouter ".jgp" avant l'extension ".php" dans le nom :

Validation côté serveur (vérification du type de fichier) :

Dans ce cas, il faudrait changer le contenu du type de contenu de "application/x-php" à "/jpg" :

Validation côté serveur (vérification du type de fichier par les octets) :

Nous modifions notre cmd.php et ajoutons "GIF8;" (pour les fichiers GIF) comme ceci :

La validation du type se fait dans ce cas au niveau des premiers octets du fichier :

Chemin du fichier converti en MD5 :

Nous constatons que le fichier a été téléchargé correctement, mais nous ne connaissons pas son chemin :

En examinant le code HTML, nous remarquons que les fichiers sont stockés en MD5 (32 caractères) :

Il existe plusieurs façons de convertir le fichier en MD5 :

Convertir le nom du fichier "cmd"

  1. Convertir le nom du fichier avec l'extension "cmd.php" :

  1. Convertir le fichier tel quel "/cmd.php" :

Il existe de nombreuses variantes de cryptographies, voici un autre exemple avec "sha1sum" (40 caractères) :

Nous testons toutes les possibilités avec sha1sum :

Chemin du fichier inconnu :

Avec GoBuster, nous lancerons une attaque de force brute pour trouver des chemins du système et savoir où l'image a été stockée :

Métadonnées d'une image :

Nous téléchargeons une image sur internet et avec exiftool, nous insérons la commande .php dans les commentaires des métadonnées :

Mis à jour

Ce contenu vous a-t-il été utile ?