Basic Tomcat Info

Apoya a HackTricks

Evitar ejecutar como root

Para no ejecutar Tomcat como 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 credenciales de usuario y sus roles asignados.

  • La carpeta lib contiene los diversos 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 el tiempo de 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, que se conoce como el descriptor de implementación. 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 un compromiso 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í hay un ejemplo de 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 web.xml configuración 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 solicitudes a /admin con AdminServlet. Esta configuración enviará cualquier solicitud recibida para /admin a la clase AdminServlet.class para su procesamiento. El web.xml descriptor 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 tomcat-users.xml archivo 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é proporciona 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 ha establecido una segunda contraseña débil admin para la cuenta de usuario admin.

Referencias

Support HackTricks

Last updated