8009 - Pentesting Apache JServ Protocol (AJP)

Support HackTricks

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!

基本情報

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

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

Also interesting:

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

デフォルトポート: 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以上のパッチ適用済みバージョンでこの問題は修正されています。

Enumeration

Automatic

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

AJPプロキシ

NginxリバースプロキシとAJP

Docker化されたバージョンをチェックアウト

オープンなAJPプロキシポート(8009 TCP)に遭遇した場合、ajp_moduleを使用してNginxを利用し、「隠れた」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ブロック全体をコメントアウトし、/etc/nginx/conf/nginx.confhttpブロック内に以下の行を追加します。

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.confTARGET-IPをAJP IPに置き換え、その後ビルドして実行します。

docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy

Apache AJP Proxy

ポート8009が他のアクセス可能なウェブポートなしで開いているのは珍しい。しかし、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)を回避する可能性を提供しますが、この能力は確認されていません。通常のMetasploit Tomcatエクスプロイトを127.0.0.1:80に向けることで、ターゲットシステムを効果的に制御することができます。

msf  exploit(tomcat_mgr_deploy) > show options

参考文献

経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために、HackenProof Discordサーバーに参加しましょう!

ハッキングの洞察 ハッキングのスリルと課題に深く掘り下げたコンテンツに参加しましょう

リアルタイムハックニュース リアルタイムのニュースと洞察を通じて、急速に変化するハッキングの世界に遅れずについていきましょう

最新のお知らせ 新しいバグバウンティの開始や重要なプラットフォームの更新について情報を得ましょう

今日、Discordで私たちに参加し、トップハッカーとコラボレーションを始めましょう!

HackTricksをサポートする

Last updated