11 KiB
8009 - Pentesting Apache JServ Protocol (AJP)
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したいまたはHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksスワッグを入手する
- The PEASS Familyを発見し、独占的なNFTsコレクションを見つける
- **💬 Discordグループ**に参加するか、telegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローする
- HackTricksおよびHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
HackenProof Discordサーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!
ハッキングの洞察
ハッキングのスリルと挑戦に深く入り込むコンテンツに参加する
リアルタイムハックニュース
リアルタイムのニュースと洞察を通じて、迅速なハッキングワールドに最新情報を提供する
最新のアナウンス
最新のバグバウンティの開始や重要なプラットフォームのアップデートに関する情報を提供する
**Discord**に参加して、今日からトップハッカーと協力を始めましょう!
基本情報
出典: 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サーバーはサーブレットコンテナへの費用のかかるソケット作成プロセスを削減し、複数のリクエスト/レスポンスサイクルで接続を再利用しようとします
デフォルトポート: 8009
PORT STATE SERVICE
8009/tcp open ajp13
CVE-2020-1938 'Ghostcat'
AJPポートが公開されている場合、TomcatはGhostcat脆弱性の影響を受ける可能性があります。この問題に対応するエクスプロイトがあります。
GhostcatはLFI脆弱性ですが、ある特定のパスからのみファイルを取得できる制限があります。それでも、これには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>
Brute force
AJPプロキシ
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
- server {
- listen 80 default_server;
- server_name _;
- return 444;
- }
+ location / {
+ proxy_pass http://127.0.0.1:8080;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}
Nginxを起動し、すべてが正常に動作しているかを確認するために、ローカルホストにcURLリクエストを送信してください。
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>
NginxのDocker化バージョン
git clone https://github.com/ScribblerCoder/nginx-ajp-docker
cd nginx-ajp-docker
nginx.conf
ファイル内の TARGET-IP
を AJP IP に置き換えてビルドして実行します。
docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy
Apache AJP Proxy
ポート8009が他のアクセス可能なWebポートがない状況に遭遇することは稀です。しかし、Metasploitを使用してそれを悪用することは可能です。Apacheをプロキシとして活用することで、リクエストをポート8009上のTomcatにリダイレクトすることができます。
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
に通常のMetasploit Tomcatエクスプロイトを向けることで、対象システムを効果的に制御することができます。
msf exploit(tomcat_mgr_deploy) > show options
参考文献
- https://github.com/yaoweibin/nginx_ajp_module
- https://academy.hackthebox.com/module/145/section/1295
HackenProof Discord サーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!
ハッキングの洞察
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう
リアルタイムハックニュース
リアルタイムのニュースと洞察を通じて、ハッキングの世界を追いかけましょう
最新の発表
最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう
Discord に参加して、今日からトップハッカーと協力しましょう!
**htARTE (HackTricks AWS Red Team Expert)** でAWSハッキングをゼロからヒーローまで学びましょう!
HackTricks をサポートする他の方法:
- HackTricks で企業を宣伝したい または HackTricks をPDFでダウンロードしたい 場合は SUBSCRIPTION PLANS をチェックしてください!
- 公式PEASS&HackTricksのグッズを入手する
- The PEASS Family を発見し、独占的な NFTs コレクションを見つける
- 💬 Discord グループ または telegram グループ に参加するか、Twitter 🐦 @carlospolopm をフォローする
- HackTricks と HackTricks Cloud の GitHub リポジトリに PR を提出して、あなたのハッキングトリックを共有する