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

161 lines
8 KiB
Markdown

# Informações Básicas do Tomcat
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</details>
{% endhint %}
### Evite executar como root
Para não executar o Tomcat como root, uma configuração muito comum é definir um servidor Apache na porta 80/443 e, se o caminho solicitado corresponder a uma regexp, a solicitação é enviada para o Tomcat executando 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 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 credenciais de usuário e seus papéis atribuídos.
* A pasta `lib` contém os vários arquivos JAR necessários para o funcionamento correto do Tomcat.
* As pastas `logs` e `temp` armazenam arquivos de log temporários.
* A pasta `webapps` é a raiz web padrão 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.
```
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 esses é `WEB-INF/web.xml`, que é conhecido como o descritor de implantação. Este arquivo armazena **informações sobre as rotas** usadas pela aplicação e as classes que manipulam 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 importante, bem como informações sensíveis. 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)](https://en.wikipedia.org/wiki/Jakarta\_Server\_Pages), anteriormente conhecidas como `JavaServer Pages`, que podem ser comparadas a arquivos PHP em um servidor Apache.
Aqui está um exemplo de arquivo **web.xml**.
```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 está 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, um novo mapeamento de servlet é criado para **mapear solicitações para `/admin` com `AdminServlet`**. Esta 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 a ser verificado ao explorar uma **vulnerabilidade de Inclusão de Arquivo Local (LFI)**.
### tomcat-users
O arquivo **`tomcat-users.xml`** é usado para **permitir** ou negar acesso às páginas administrativas **`/manager` e `host-manager`**.
```xml
<?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 a que cada um dos papéis `manager-gui`, `manager-script`, `manager-jmx` e `manager-status` fornece 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` está definida para a conta de usuário `admin`.
## Referências
* [https://academy.hackthebox.com/module/113/section/1090](https://academy.hackthebox.com/module/113/section/1090)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}