Search K
Appearance
Appearance
Try Hard Security Group
In order to not run Tomcat with root a very common configuration is to set an Apache server in port 80/443 and, if the requested path matches a regexp, the request is sent to Tomcat running on a different port.
โโโ 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
folder stores scripts and binaries needed to start and run a Tomcat server.conf
folder stores various configuration files used by Tomcat.tomcat-users.xml
file stores user credentials and their assigned roles.lib
folder holds the various JAR files needed for the correct functioning of Tomcat.logs
and temp
folders store temporary log files.webapps
folder is the default webroot of Tomcat and hosts all the applications. The work
folder acts as a cache and is used to store data during runtime.Each folder inside webapps
is expected to have the following structure.
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
The most important file among these is WEB-INF/web.xml
, which is known as the deployment descriptor. This file stores information about the routes used by the application and the classes handling these routes.
All compiled classes used by the application should be stored in the WEB-INF/classes
folder. These classes might contain important business logic as well as sensitive information. Any vulnerability in these files can lead to total compromise of the website. The lib
folder stores the libraries needed by that particular application. The jsp
folder stores Jakarta Server Pages (JSP), formerly known as JavaServer Pages
, which can be compared to PHP files on an Apache server.
Hereโs an example web.xml file.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>com.inlanefreight.api.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>
</web-app>
The web.xml
configuration above defines a new servlet named AdminServlet
that is mapped to the class com.inlanefreight.api.AdminServlet
. Java uses the dot notation to create package names, meaning the path on disk for the class defined above would be:
classes/com/inlanefreight/api/AdminServlet.class
Next, a new servlet mapping is created to map requests to /admin
with AdminServlet
. This configuration will send any request received for /admin
to the AdminServlet.class
class for processing. The web.xml
descriptor holds a lot of sensitive information and is an important file to check when leveraging a Local File Inclusion (LFI) vulnerability.
The tomcat-users.xml
file is used to allow or disallow access to the /manager
and host-manager
admin pages.
<?xml version="1.0" encoding="UTF-8"?>
<SNIP>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<!--
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
The users below are wrapped in a comment and are therefore ignored. If you
wish to configure one or more of these users for use with the manager web
application, do not forget to remove the <!.. ..> that surrounds them. You
will also need to set the passwords to something appropriate.
-->
<SNIP>
!-- user manager can access only manager section -->
<role rolename="manager-gui" />
<user username="tomcat" password="tomcat" roles="manager-gui" />
<!-- user admin can access manager and admin section both -->
<role rolename="admin-gui" />
<user username="admin" password="admin" roles="manager-gui,admin-gui" />
</tomcat-users>
The file shows us what each of the roles manager-gui
, manager-script
, manager-jmx
, and manager-status
provide access to. In this example, we can see that a user tomcat
with the password tomcat
has the manager-gui
role, and a second weak password admin
is set for the user account admin
Try Hard Security Group