Basic Tomcat Info

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Grupo de Seguridad Try Hard


Evitar ejecutar con root

Para no ejecutar Tomcat con root, una configuración muy común es establecer un servidor Apache en el puerto 80/443 y, si la ruta solicitada coincide con una expresión regular, la solicitud se envía a Tomcat que se ejecuta en un puerto diferente.

Estructura Predeterminada

├── bin
├── conf
│   ├── catalina.policy
│   ├── catalina.properties
│   ├── context.xml
│   ├── tomcat-users.xml
│   ├── tomcat-users.xsd
│   └── web.xml
├── lib
├── logs
├── temp
├── webapps
│   ├── manager
│   │   ├── images
│   │   ├── META-INF
│   │   └── WEB-INF
|   |       └── web.xml
│   └── ROOT
│       └── WEB-INF
└── work
└── Catalina
└── localhost
  • La carpeta bin almacena scripts y binarios necesarios para iniciar y ejecutar un servidor Tomcat.

  • La carpeta conf almacena varios archivos de configuración utilizados por Tomcat.

  • El archivo tomcat-users.xml almacena las credenciales de usuario y sus roles asignados.

  • La carpeta lib contiene varios archivos JAR necesarios para el correcto funcionamiento de Tomcat.

  • Las carpetas logs y temp almacenan archivos de registro temporales.

  • La carpeta webapps es la raíz web predeterminada de Tomcat y alberga todas las aplicaciones. La carpeta work actúa como una caché y se utiliza para almacenar datos durante la ejecución.

Se espera que cada carpeta dentro de webapps tenga la siguiente estructura.

webapps/customapp
├── images
├── index.jsp
├── META-INF
│   └── context.xml
├── status.xsd
└── WEB-INF
├── jsp
|   └── admin.jsp
└── web.xml
└── lib
|    └── jdbc_drivers.jar
└── classes
└── AdminServlet.class

El archivo más importante entre estos es WEB-INF/web.xml, conocido como el descriptor de despliegue. Este archivo almacena información sobre las rutas utilizadas por la aplicación y las clases que manejan estas rutas. Todas las clases compiladas utilizadas por la aplicación deben almacenarse en la carpeta WEB-INF/classes. Estas clases pueden contener lógica empresarial importante, así como información sensible. Cualquier vulnerabilidad en estos archivos puede llevar a la compromisión total del sitio web. La carpeta lib almacena las bibliotecas necesarias para esa aplicación en particular. La carpeta jsp almacena Jakarta Server Pages (JSP), anteriormente conocidas como JavaServer Pages, que se pueden comparar con archivos PHP en un servidor Apache.

Aquí tienes un ejemplo del archivo web.xml.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>com.inlanefreight.api.AdminServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>
</web-app>

El archivo de configuración web.xml anterior define un nuevo servlet llamado AdminServlet que está mapeado a la clase com.inlanefreight.api.AdminServlet. Java utiliza la notación de punto para crear nombres de paquetes, lo que significa que la ruta en disco para la clase definida anteriormente sería:

  • classes/com/inlanefreight/api/AdminServlet.class

A continuación, se crea un nuevo mapeo de servlet para mapear las solicitudes a /admin con AdminServlet. Esta configuración enviará cualquier solicitud recibida para /admin a la clase AdminServlet.class para su procesamiento. El descriptor web.xml contiene mucha información sensible y es un archivo importante para verificar al aprovechar una vulnerabilidad de Inclusión de Archivos Locales (LFI).

tomcat-users

El archivo tomcat-users.xml se utiliza para permitir o denegar el acceso a las páginas de administración /manager y host-manager.

<?xml version="1.0" encoding="UTF-8"?>

<SNIP>

<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<!--
By default, no user is included in the "manager-gui" role required
to operate the "/manager/html" web application.  If you wish to use this app,
you must define such a user - the username and password are arbitrary.

Built-in Tomcat manager roles:
- manager-gui    - allows access to the HTML GUI and the status pages
- manager-script - allows access to the HTTP API and the status pages
- manager-jmx    - allows access to the JMX proxy and the status pages
- manager-status - allows access to the status pages only

The users below are wrapped in a comment and are therefore ignored. If you
wish to configure one or more of these users for use with the manager web
application, do not forget to remove the <!.. ..> that surrounds them. You
will also need to set the passwords to something appropriate.
-->


<SNIP>

!-- user manager can access only manager section -->
<role rolename="manager-gui" />
<user username="tomcat" password="tomcat" roles="manager-gui" />

<!-- user admin can access manager and admin section both -->
<role rolename="admin-gui" />
<user username="admin" password="admin" roles="manager-gui,admin-gui" />


</tomcat-users>

El archivo nos muestra a qué tiene acceso cada uno de los roles manager-gui, manager-script, manager-jmx y manager-status. En este ejemplo, podemos ver que un usuario tomcat con la contraseña tomcat tiene el rol manager-gui, y se establece una segunda contraseña débil admin para la cuenta de usuario admin.

Referencias

Grupo de Seguridad Try Hard

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Última actualización