08 Mar. 19 Actualités
Variante d’exploitation d’un Apache Tomcat : host manager app vulnérable ?
Dans le cadre d’une mission d’audit interne, j’ai été amené à exploiter un Apache Tomcat sur un Windows. Habituellement l’exploitation d’un Tomcat passe par l’accès au « manager » et l’exploitation est très simple (compte admin/admin).
Dans le cas qui nous intéresse, le manager n’était pas accessible (code HTTP 403) mais le host-manager l’était.
Contexte :
Cible -> serveur Windows 2012R2 (192.168.56.31)
Attaquant -> serveur linux Ubuntu 16.04 (192.168.56.1)
Version Apache Tomcat -> dernière release 8.5.37
Reconnaissance de reconnaissance
Ce genre de cible est idéale lors d’un audit car Tomcat est exécuté en règle générale avec les droits « nt authority\system » sur Windows et donc permet d’avoir le contrôle total du serveur et ainsi obtenir des mots de passe et des hash qui permettront par la suite d’élever nos privilèges sur le système d’information.
Authentification
Lors de la découverte d’un Tomcat le 1er réflexe en tant qu’auditeur est de tenter de s’authentifier sur le manager. Généralement on tente un admin/admin ou un tomcat/tomcat.
Dans le cadre de l’audit, j’ai tenté directement les identifiants « tomcat/tomcat » et j’ai pu constater que l’accès au manager m’était refusé (code HTTP 403). J’ai alors tenté d’accéder au /host-manager ( host manager app ) de la même manière, et la boom « code HTTP 200 ».
Plusieurs techniques sont possibles pour automatiser la phase de bruteforce :
Module Metasploit : auxiliary/scanner/http/tomcat_mgr_login
Hydra
Nikto (intègre un test avec les identifiants « tomcat/tomcat »)
Différents scripts dédiés à Tomcat
Exploitation du « host-manager »
Ok on a accès au host manager app mais qu’est-ce qu’on fait maintenant ?
L’application n’a pas de formulaire d’upload et a priori en lisant la documentation, il faut contrôler et connaitre le chemin de l’application à déployer ainsi qu’un vhost valide.
L’exploitation est née à ce moment précis, j’ai eu l’idée de tenter de mettre un chemin UNC vers un serveur SMB (smbserver.py de impacket) que je contrôlais :
Donc le server Apache Tomcat interprète le chemin UNC et cherche à installer une application depuis le répertoire « datatest ». On va donc créer un répertoire et ajouter un fichier War dans lequel nous mettrons une backdoor qui permettra de prendre le contrôle à distance du serveur.
1- Créer un war
La création d’un WAR est très simple, c’est un fichier ZIP qu’on renomme avec l’extension .war. A l’intérieur on va mettre un fichier JSP qui permet d’exécuter des commandes système depuis le navigateur.
On peut créer nous même un fichier ZIP avec notre backdoor et le renommer en .war :
2- Deploy and pwn
Configuration de l’application avant déploiement :
Déploiement réussi :
Un petit tour dans le navigateur confirme que notre backdoor est bien déployée et que nous pouvons exécuter des commandes sur le serveur Windows.
Cette technique d’exploitation d’un tomcat par le host-manager a été testée sur les versions Tomcat <=7.0.92 et <=8.5.37 hébergée sur un serveur Windows.
Article rédigé par le pôle audit de Certilience