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

9.4 KiB

Informations de base sur Tomcat

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

Évitez de lancer avec root

Afin de ne pas exécuter Tomcat avec root, une configuration très courante consiste à configurer un serveur Apache sur le port 80/443 et, si le chemin demandé correspond à une expression régulière, la requête est envoyée à Tomcat s'exécutant sur un port différent.

Structure par défaut

├── bin
├── conf
│   ├── catalina.policy
│   ├── catalina.properties
│   ├── context.xml
│   ├── tomcat-users.xml
│   ├── tomcat-users.xsd
│   └── web.xml
├── lib
├── logs
├── temp
├── webapps
│   ├── manager
│   │   ├── images
│   │   ├── META-INF
│   │   └── WEB-INF
|   |       └── web.xml
│   └── ROOT
│       └── WEB-INF
└── work
    └── Catalina
        └── localhost
  • Le dossier bin stocke les scripts et binaires nécessaires pour démarrer et exécuter un serveur Tomcat.
  • Le dossier conf stocke divers fichiers de configuration utilisés par Tomcat.
  • Le fichier tomcat-users.xml stocke les informations d'identification des utilisateurs et leurs rôles assignés.
  • Le dossier lib contient les différents fichiers JAR nécessaires au bon fonctionnement de Tomcat.
  • Les dossiers logs et temp stockent des fichiers journaux temporaires.
  • Le dossier webapps est le répertoire racine par défaut de Tomcat et héberge toutes les applications. Le dossier work agit comme un cache et est utilisé pour stocker des données pendant l'exécution.

On s'attend à ce que chaque dossier à l'intérieur de webapps ait la structure suivante.

webapps/customapp
├── images
├── index.jsp
├── META-INF
│   └── context.xml
├── status.xsd
└── WEB-INF
    ├── jsp
    |   └── admin.jsp
    └── web.xml
    └── lib
    |    └── jdbc_drivers.jar
    └── classes
        └── AdminServlet.class 

Le fichier le plus important parmi ceux-ci est WEB-INF/web.xml, qui est connu sous le nom de descripteur de déploiement. Ce fichier stocke des informations sur les routes utilisées par l'application et les classes qui gèrent ces routes.
Toutes les classes compilées utilisées par l'application doivent être stockées dans le dossier WEB-INF/classes. Ces classes peuvent contenir une logique métier importante ainsi que des informations sensibles. Toute vulnérabilité dans ces fichiers peut conduire à une compromission totale du site web. Le dossier lib stocke les bibliothèques nécessaires à cette application particulière. Le dossier jsp stocke les Jakarta Server Pages (JSP), anciennement connues sous le nom de JavaServer Pages, qui peuvent être comparées aux fichiers PHP sur un serveur Apache.

Voici un exemple de fichier web.xml.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <servlet>
    <servlet-name>AdminServlet</servlet-name>
    <servlet-class>com.inlanefreight.api.AdminServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>AdminServlet</servlet-name>
    <url-pattern>/admin</url-pattern>
  </servlet-mapping>
</web-app>   

La configuration web.xml ci-dessus définit un nouveau servlet nommé AdminServlet qui est mappé à la classe com.inlanefreight.api.AdminServlet. Java utilise la notation point pour créer des noms de packages, ce qui signifie que le chemin sur le disque pour la classe définie ci-dessus serait :

  • classes/com/inlanefreight/api/AdminServlet.class

Ensuite, un nouveau mappage de servlet est créé pour mapper les requêtes vers /admin avec AdminServlet. Cette configuration enverra toute demande reçue pour /admin à la classe AdminServlet.class pour traitement. Le descripteur web.xml contient beaucoup d'informations sensibles et est un fichier important à vérifier lors de l'exploitation d'une vulnérabilité de Local File Inclusion (LFI).

tomcat-users

Le fichier tomcat-users.xml est utilisé pour autoriser ou interdire l'accès aux pages d'administration /manager et host-manager.

<?xml version="1.0" encoding="UTF-8"?>

<SNIP>
  
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
<!--
  By default, no user is included in the "manager-gui" role required
  to operate the "/manager/html" web application.  If you wish to use this app,
  you must define such a user - the username and password are arbitrary.

  Built-in Tomcat manager roles:
    - manager-gui    - allows access to the HTML GUI and the status pages
    - manager-script - allows access to the HTTP API and the status pages
    - manager-jmx    - allows access to the JMX proxy and the status pages
    - manager-status - allows access to the status pages only

  The users below are wrapped in a comment and are therefore ignored. If you
  wish to configure one or more of these users for use with the manager web
  application, do not forget to remove the <!.. ..> that surrounds them. You
  will also need to set the passwords to something appropriate.
-->

   
 <SNIP>
  
!-- user manager can access only manager section -->
<role rolename="manager-gui" />
<user username="tomcat" password="tomcat" roles="manager-gui" />

<!-- user admin can access manager and admin section both -->
<role rolename="admin-gui" />
<user username="admin" password="admin" roles="manager-gui,admin-gui" />


</tomcat-users>

Le fichier nous montre ce à quoi chaque rôle manager-gui, manager-script, manager-jmx et manager-status donne accès. Dans cet exemple, nous pouvons voir qu'un utilisateur tomcat avec le mot de passe tomcat a le rôle manager-gui, et un deuxième mot de passe faible admin est défini pour le compte utilisateur admin.

Références

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