hacktricks/network-services-pentesting/pentesting-web/tomcat/basic-tomcat-info.md
2023-08-29 18:57:50 +00:00

9.8 KiB

Basic Tomcat Info

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

Evite executar com root

Para não executar o Tomcat com root, uma configuração muito comum é definir um servidor Apache na porta 80/443 e, se o caminho solicitado corresponder a uma expressão regular, a solicitação é enviada para o Tomcat em execução em uma porta diferente.

Estrutura Padrão

├── 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
  • A WEB-INF folder that contains the web.xml file, which is the deployment descriptor for the web application.

  • A classes folder that contains the compiled Java classes.

  • A lib folder that contains the JAR files needed for the web application.

  • Any other files or folders that are part of the web application.

  • A pasta bin armazena scripts e binários necessários para iniciar e executar um servidor Tomcat.

  • A pasta conf armazena vários arquivos de configuração usados pelo Tomcat.

  • O arquivo tomcat-users.xml armazena as credenciais do usuário e suas funções atribuídas.

  • A pasta lib contém vários arquivos JAR necessários para o correto funcionamento do Tomcat.

  • As pastas logs e temp armazenam arquivos de log temporários.

  • A pasta webapps é a raiz do Tomcat e hospeda todas as aplicações. A pasta work atua como um cache e é usada para armazenar dados durante a execução.

Cada pasta dentro de webapps deve ter a seguinte estrutura.

  • Uma pasta WEB-INF que contém o arquivo web.xml, que é o descritor de implantação para a aplicação web.
  • Uma pasta classes que contém as classes Java compiladas.
  • Uma pasta lib que contém os arquivos JAR necessários para a aplicação web.
  • Quaisquer outros arquivos ou pastas que fazem parte da aplicação web.
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 

O arquivo mais importante entre eles é o WEB-INF/web.xml, que é conhecido como descritor de implantação. Este arquivo armazena informações sobre as rotas usadas pela aplicação e as classes que lidam com essas rotas.
Todas as classes compiladas usadas pela aplicação devem ser armazenadas na pasta WEB-INF/classes. Essas classes podem conter lógica de negócios importantes, bem como informações confidenciais. Qualquer vulnerabilidade nesses arquivos pode levar à comprometimento total do site. A pasta lib armazena as bibliotecas necessárias para essa aplicação específica. A pasta jsp armazena Jakarta Server Pages (JSP), anteriormente conhecido como JavaServer Pages, que pode ser comparado a arquivos PHP em um servidor Apache.

Aqui está um exemplo de arquivo 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>   

A configuração web.xml acima define um novo servlet chamado AdminServlet que é mapeado para a classe com.inlanefreight.api.AdminServlet. Java usa a notação de ponto para criar nomes de pacotes, o que significa que o caminho no disco para a classe definida acima seria:

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

Em seguida, é criado um novo mapeamento de servlet para mapear solicitações para /admin com AdminServlet. Essa configuração enviará qualquer solicitação recebida para /admin para a classe AdminServlet.class para processamento. O descritor web.xml contém muitas informações sensíveis e é um arquivo importante para verificar ao aproveitar uma vulnerabilidade de Inclusão de Arquivo Local (LFI).

tomcat-users

O arquivo tomcat-users.xml é usado para permitir ou negar o acesso às páginas de administração /manager e 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>

O arquivo nos mostra para que cada um dos papéis manager-gui, manager-script, manager-jmx e manager-status fornecem acesso. Neste exemplo, podemos ver que um usuário tomcat com a senha tomcat tem o papel manager-gui, e uma segunda senha fraca admin é definida para a conta de usuário admin.

Referências

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