hacktricks/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md
2023-07-07 23:42:27 +00:00

12 KiB
Raw Blame History

8009 - Apache JServ Protocol (AJP)のペンテスト

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

HackenProofをフォロー して、web3のバグについてもっと学びましょう

🐞 web3のバグチュートリアルを読む

🔔 新しいバグバウンティについて通知を受ける

💬 コミュニティディスカッションに参加する

基本情報

From: https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/

AJPはワイヤープロトコルです。これは、ApacheなどのスタンドアロンのWebサーバーがTomcatと通信するためのHTTPプロトコルの最適化バージョンです。歴史的に、Apacheは静的コンテンツの提供においてTomcatよりもはるかに高速でした。アイデアは、可能な限りApacheが静的コンテンツを提供し、Tomcat関連のコンテンツについてはリクエストをTomcatにプロキシすることです。

また興味深いのは:

ajp13プロトコルはパケット指向です。パフォーマンスの理由から、より読みやすいプレーンテキストではなく、バイナリ形式が選択されたと思われます。WebサーバーはTCP接続を介してサーブレットコンテナと通信します。ソケットの作成にかかる高価なプロセスを削減するために、Webサーバーはサーブレットコンテナへの持続的なTCP接続を維持し、複数のリクエスト/レスポンスサイクルで接続を再利用しようとします。

デフォルトポート: 8009

PORT     STATE SERVICE
8009/tcp open  ajp13

CVE-2020-1938 'Ghostcat'

AJPポートが公開されている場合、TomcatはGhostcatの脆弱性に対して脆弱です。この問題に対応するエクスプロイトがあります。

GhostcatはLFILocal File Inclusionの脆弱性ですが、ある特定のパスからのみファイルを取得できます。それでも、これにはWEB-INF/web.xmlなどの重要な情報Tomcatインターフェースの資格情報などを漏洩させる可能性があります。ただし、サーバーのセットアップによって異なります。

修正済みバージョンは9.0.31以上、8.5.51、および7.0.100です。

列挙

自動化

nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>

ブルートフォース

AJPプロキシ

Apache AJPプロキシ

通常、ポート8009が開いていて他のウェブポートが開いていないことはめったにありません。その場合、既存のツールMetasploitを使用して侵入することができれば便利です。引用の一つに述べられているように、Apacheを悪用してリクエストをTomcatのポート8009にプロキシすることができます。参考文献には、それを行うための素晴らしいガイドがありますまずそれを読んでください。以下は、私自身のマシンで使用したコマンドの概要です。必要ないと思われる元の指示の一部を省略しました。

sudo apt-get install libapache2-mod-jk
sudo vim /etc/apache2/apache2.conf # append the following line to the config
Include ajp.conf
sudo vim /etc/apache2/ajp.conf     # create the following file, change HOST to the target address
ProxyRequests Off
<Proxy *>
Order deny,allow
Deny from all
Allow from localhost
</Proxy>
ProxyPass       / ajp://HOST:8009/
ProxyPassReverse    / ajp://HOST:8009/
sudo a2enmod proxy_http
sudo a2enmod proxy_ajp
sudo systemctl restart apache2

このセットアップを使用することの良い副作用は、AJPプロトコルがいくらかバイナリであるため、設置されているIDS/IPSシステムを阻止する可能性があることですが、これは確認していません。これで、通常のメタスプロイトのトムキャットの脆弱性を127.0.0.1:80に向けるだけで、そのシステムを乗っ取ることができます。以下はメタスプロイトの出力です。

msf  exploit(tomcat_mgr_deploy) > show options

Module options (exploit/multi/http/tomcat_mgr_deploy):

Name      Current Setting  Required  Description
----      ---------------  --------  -----------
PASSWORD  tomcat           no        The password for the specified username
PATH      /manager         yes       The URI path of the manager app (/deploy and /undeploy will be used)
Proxies                    no        Use a proxy chain
RHOST     localhost        yes       The target address
RPORT     80               yes       The target port
USERNAME  tomcat           no        The username to authenticate as
VHOST                      no        HTTP server virtual host

NginxリバースプロキシAJP

オープンなAJPプロキシポート8009 TCPに遭遇した場合、Nginxをajp_moduleと共に使用して「隠れた」Tomcat Managerにアクセスすることができます。以下の手順で、Nginxのソースコードをコンパイルし、必要なモジュールを追加します。

  • Nginxのソースコードをダウンロードします。
  • 必要なモジュールをダウンロードします。
  • ajp_moduleを使用してNginxのソースコードをコンパイルします。
  • AJPポートを指す設定ファイルを作成します。
# Download Nginx code
wget https://nginx.org/download/nginx-1.21.3.tar.gz
tar -xzvf nginx-1.21.3.tar.gz

# Compile Nginx source code with the ajp module
git clone https://github.com/dvershinin/nginx_ajp_module.git
cd nginx-1.21.3
sudo apt install libpcre3-dev
./configure --add-module=`pwd`/../nginx_ajp_module --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules
make
sudo make install
nginx -V

次の行を/etc/nginx/conf/nginx.confhttpブロック内に追加し、serverブロック全体をコメントアウトしてください。

upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}

ローカルホストに対してcURLリクエストを発行して、Nginxが正常に動作しているか確認するために、Nginxを起動してください。

sudo nginx
curl http://127.0.0.1:80

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Apache Tomcat/X.X.XX</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</headas
<body>
<div id="wrapper">
<div id="navigation" class="curved container">
<span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span>
<span id="nav-hosts"><a href="/docs/">Documentation</a></span>
<span id="nav-config"><a href="/docs/config/">Configuration</a></span>
<span id="nav-examples"><a href="/examples/">Examples</a></span>
<span id="nav-wiki"><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></span>
<span id="nav-lists"><a href="https://tomcat.apache.org/lists.html">Mailing Lists</a></span>
<span id="nav-help"><a href="https://tomcat.apache.org/findhelp.html">Find Help</a></span>
<br class="separator" />
</div>
<div id="asf-box">
<h1>Apache Tomcat/X.X.XX</h1>
</div>
<div id="upper" class="curved container">
<div id="congrats" class="curved container">
<h2>If you're seeing this, you've successfully installed Tomcat. Congratulations!</h2>
<SNIP>

参考文献

HackenProofをフォロー して、web3のバグについてさらに学びましょう

🐞 web3のバグチュートリアルを読む

🔔 新しいバグバウンティについて通知を受ける

💬 コミュニティのディスカッションに参加する

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥