Basic Tomcat Info

htARTE(HackTricks AWS Red Team Expert) でゼロからヒーローまでAWSハッキングを学びましょう

Try Hard Security Group


rootでの実行を避ける

Tomcatをrootで実行しないようにするための非常に一般的な構成は、ポート80/443でApacheサーバーを設定し、リクエストされたパスが正規表現と一致する場合、リクエストを異なるポートで実行されている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フォルダには、Tomcatの正しい動作に必要なさまざまなJARファイルが保存されています。

  • logsおよびtempフォルダには一時的なログファイルが保存されています。

  • webappsフォルダはTomcatのデフォルトのWebルートであり、すべてのアプリケーションがホストされています。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

最も重要なファイルの1つはWEB-INF/web.xmlで、デプロイメント記述子として知られています。このファイルには、アプリケーションで使用されるルートに関する情報やこれらのルートを処理するクラスに関する情報が格納されています。 アプリケーションで使用されるすべてのコンパイルされたクラスはWEB-INF/classesフォルダに保存する必要があります。これらのクラスには重要なビジネスロジックや機密情報が含まれている可能性があります。これらのファイルにおける脆弱性は、ウェブサイト全体の侵害につながる可能性があります。libフォルダには、その特定のアプリケーションに必要なライブラリが保存されています。jspフォルダには、Jakarta Server Pages (JSP)(以前はJavaServer Pagesとして知られていました)が保存されており、Apacheサーバー上のPHPファイルに比較できます。

以下はweb.xmlファイルの例です。

<?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>

上記のweb.xml構成は、AdminServletという新しいサーブレットを定義し、com.inlanefreight.api.AdminServletクラスにマップされています。Javaはパッケージ名を作成するためにドット表記を使用します。したがって、上記で定義されたクラスのディスク上のパスは次のとおりです:

  • classes/com/inlanefreight/api/AdminServlet.class

次に、/adminへのリクエストをAdminServletにマッピングする新しいサーブレットマッピングが作成されます。この構成により、/adminへの受信リクエストはAdminServlet.classクラスに送信され、処理されます。web.xml記述子には多くの機密情報が含まれており、ローカルファイルインクルージョン(LFI)脆弱性を利用する際にチェックする重要なファイルです。

tomcat-users

tomcat-users.xmlファイルは、/managerおよびhost-manager管理ページへのアクセスを許可または拒否するために使用されます。

<?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>

ファイルには、manager-guimanager-scriptmanager-jmxmanager-status のそれぞれがアクセス権を提供する内容が示されています。この例では、パスワードが tomcat のユーザー tomcatmanager-gui ロールを持っており、2番目の弱いパスワード admin がユーザーアカウント admin に設定されています。

参考文献

Try Hard Security Group

htARTE (HackTricks AWS Red Team Expert) でゼロからヒーローまでAWSハッキングを学びましょう!

Last updated