13 KiB
8009 - Apache JServ Protocol (AJP)のペンテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
HackenProofはすべての暗号バグバウンティの場所です。
遅延なしで報酬を受け取る
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
Web3ペンテストの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のWeb3セキュリティをマスターしましょう。
Web3ハッカーレジェンドになる
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
HackenProofでサインアップしてハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
基本情報
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はLFI(Local 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.conf
のhttp
ブロック内に追加し、server
ブロック全体をコメントアウトしてください。
upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}
ローカルホストに対してcURLリクエストを発行して、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はすべての暗号バグ報奨金の場所です。
遅延なしで報酬を受け取る
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
Web3ペントテストの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるWeb3セキュリティをマスターしましょう。
Web3ハッカーレジェンドになる
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
HackenProofでサインアップしてハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、hacktricks repo および hacktricks-cloud repo にPRを提出してください。