# Basic Tomcat Info
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
### Αποφύγετε να τρέχετε με root
Για να μην τρέχει το Tomcat με root, μια πολύ κοινή ρύθμιση είναι να ρυθμίσετε έναν Apache server στην πόρτα 80/443 και, αν η ζητούμενη διαδρομή ταιριάζει με μια regexp, το αίτημα αποστέλλεται στο Tomcat που τρέχει σε διαφορετική πόρτα.
### Προεπιλεγμένη Δομή
```
├── bin
├── conf
│ ├── catalina.policy
│ ├── catalina.properties
│ ├── context.xml
│ ├── tomcat-users.xml
│ ├── tomcat-users.xsd
│ └── web.xml
├── lib
├── logs
├── temp
├── webapps
│ ├── manager
│ │ ├── images
│ │ ├── META-INF
│ │ └── WEB-INF
| | └── web.xml
│ └── ROOT
│ └── WEB-INF
└── work
└── Catalina
└── localhost
```
* Ο φάκελος `bin` αποθηκεύει σενάρια και δυαδικά αρχεία που απαιτούνται για την εκκίνηση και λειτουργία ενός διακομιστή Tomcat.
* Ο φάκελος `conf` αποθηκεύει διάφορα αρχεία ρυθμίσεων που χρησιμοποιούνται από το Tomcat.
* Το αρχείο `tomcat-users.xml` αποθηκεύει διαπιστευτήρια χρηστών και τους ανατεθέντες ρόλους τους.
* Ο φάκελος `lib` περιέχει τα διάφορα αρχεία JAR που απαιτούνται για τη σωστή λειτουργία του Tomcat.
* Οι φάκελοι `logs` και `temp` αποθηκεύουν προσωρινά αρχεία καταγραφής.
* Ο φάκελος `webapps` είναι η προεπιλεγμένη ριζική τοποθεσία ιστού του Tomcat και φιλοξενεί όλες τις εφαρμογές. Ο φάκελος `work` λειτουργεί ως κρυφή μνήμη και χρησιμοποιείται για την αποθήκευση δεδομένων κατά τη διάρκεια της εκτέλεσης.
Κάθε φάκελος μέσα στον `webapps` αναμένεται να έχει την εξής δομή.
```
webapps/customapp
├── images
├── index.jsp
├── META-INF
│ └── context.xml
├── status.xsd
└── WEB-INF
├── jsp
| └── admin.jsp
└── web.xml
└── lib
| └── jdbc_drivers.jar
└── classes
└── AdminServlet.class
```
Το πιο σημαντικό αρχείο ανάμεσα σε αυτά είναι το `WEB-INF/web.xml`, το οποίο είναι γνωστό ως ο περιγραφέας ανάπτυξης. Αυτό το αρχείο αποθηκεύει **πληροφορίες σχετικά με τις διαδρομές** που χρησιμοποιούνται από την εφαρμογή και τις κλάσεις που χειρίζονται αυτές τις διαδρομές.\
Όλες οι μεταγλωττισμένες κλάσεις που χρησιμοποιούνται από την εφαρμογή θα πρέπει να αποθηκεύονται στον φάκελο `WEB-INF/classes`. Αυτές οι κλάσεις μπορεί να περιέχουν σημαντική επιχειρηματική λογική καθώς και ευαίσθητες πληροφορίες. Οποιαδήποτε ευπάθεια σε αυτά τα αρχεία μπορεί να οδηγήσει σε πλήρη συμβιβασμό της ιστοσελίδας. Ο φάκελος `lib` αποθηκεύει τις βιβλιοθήκες που απαιτούνται από αυτήν την συγκεκριμένη εφαρμογή. Ο φάκελος `jsp` αποθηκεύει [Jakarta Server Pages (JSP)](https://en.wikipedia.org/wiki/Jakarta\_Server\_Pages), πρώην γνωστές ως `JavaServer Pages`, οι οποίες μπορούν να συγκριθούν με αρχεία PHP σε έναν διακομιστή Apache.
Ακολουθεί ένα παράδειγμα **web.xml** αρχείου.
```xml
AdminServlet
com.inlanefreight.api.AdminServlet
AdminServlet
/admin
```
Ο конфигурация `web.xml` παραπάνω ορίζει μια **νέα servlet με όνομα `AdminServlet`** που είναι χαρτογραφημένη στην **κλάση `com.inlanefreight.api.AdminServlet`**. Η Java χρησιμοποιεί τη σημειογραφία τελείας για να δημιουργήσει ονόματα πακέτων, πράγμα που σημαίνει ότι η διαδρομή στον δίσκο για την κλάση που ορίστηκε παραπάνω θα είναι:
* **`classes/com/inlanefreight/api/AdminServlet.class`**
Στη συνέχεια, δημιουργείται μια νέα χαρτογράφηση servlet για **να χαρτογραφήσει αιτήματα στο `/admin` με `AdminServlet`**. Αυτή η ρύθμιση θα στείλει οποιοδήποτε αίτημα ληφθεί για **`/admin` στην κλάση `AdminServlet.class`** για επεξεργασία. Ο **`web.xml`** περιγραφέας περιέχει πολλές **ευαίσθητες πληροφορίες** και είναι ένα σημαντικό αρχείο για έλεγχο όταν εκμεταλλεύεστε μια **Local File Inclusion (LFI) vulnerability**.
### tomcat-users
Το **`tomcat-users.xml`** αρχείο χρησιμοποιείται για **να επιτρέπει** ή να απαγορεύει την πρόσβαση στις **σελίδες διαχείρισης `/manager` και `host-manager`**.
```xml
!-- user manager can access only manager section -->
```
Το αρχείο μας δείχνει τι παρέχει πρόσβαση σε κάθε έναν από τους ρόλους `manager-gui`, `manager-script`, `manager-jmx` και `manager-status`. Σε αυτό το παράδειγμα, μπορούμε να δούμε ότι ένας χρήστης `tomcat` με τον κωδικό πρόσβασης `tomcat` έχει τον ρόλο `manager-gui`, και ένας δεύτερος αδύναμος κωδικός πρόσβασης `admin` έχει οριστεί για τον λογαριασμό χρήστη `admin`.
## Αναφορές
* [https://academy.hackthebox.com/module/113/section/1090](https://academy.hackthebox.com/module/113/section/1090)
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}