# 8009 - Pentesting Apache JServ Protocol (AJP) {{#include ../banners/hacktricks-training.md}} ## 基本情報 From [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/) > AJPはワイヤプロトコルです。これは、[Apache](http://httpd.apache.org/)のようなスタンドアロンのウェブサーバーがTomcatと通信できるようにするために最適化されたHTTPプロトコルのバージョンです。歴史的に、Apacheは静的コンテンツを提供する際にTomcatよりもはるかに高速でした。アイデアは、可能な限りApacheに静的コンテンツを提供させ、Tomcat関連のコンテンツについてはTomcatにリクエストをプロキシすることです。 また興味深い点: > ajp13プロトコルはパケット指向です。パフォーマンスの理由から、より読みやすいプレーンテキストよりもバイナリ形式が選ばれたと推測されます。ウェブサーバーはTCP接続を介してサーブレットコンテナと通信します。ソケット作成の高コストなプロセスを削減するために、ウェブサーバーはサーブレットコンテナへの持続的なTCP接続を維持し、複数のリクエスト/レスポンスサイクルのために接続を再利用しようとします。 **デフォルトポート:** 8009 ``` PORT STATE SERVICE 8009/tcp open ajp13 ``` ## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat) これは、認証情報を含む `WEB-INF/web.xml` のようなファイルを取得できるLFI脆弱性です。これは、脆弱性を悪用するための[エクスプロイト](https://www.exploit-db.com/exploits/48143)であり、AJPが公開しているポートはこれに対して脆弱である可能性があります。 パッチが適用されたバージョンは、9.0.31、8.5.51、および7.0.100以上です。 ## 列挙 ### 自動 ```bash nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 ``` ### [**ブルートフォース**](../generic-hacking/brute-force.md#ajp) ## AJPプロキシ ### Nginxリバースプロキシ + AJP ([Docker化されたバージョンをチェック](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version)) オープンなAJPプロキシポート(8009 TCP)と通信することが可能で、Nginxの`ajp_module` Apacheモジュールを使用してこのポートからTomcatマネージャーにアクセスでき、最終的には脆弱なサーバーでのRCEにつながる可能性があります。 - [https://nginx.org/en/download.html](https://nginx.org/en/download.html) からNginxのダウンロードを開始し、ajpモジュールでコンパイルします: ```bash # Compile Nginx with the ajp module git clone https://github.com/dvershinin/nginx_ajp_module.git cd nginx-version 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.conf`の`http`ブロックに以下を追加します。 ```json upstream tomcats { server :8009; keepalive 10; } server { listen 80; location / { ajp_keep_conn on; ajp_pass tomcats; } } ``` - 最後に、nginxを起動します(`sudo nginx`)そして、`http://127.0.0.1`にアクセスして動作を確認します。 ### NginxのDocker化バージョン ```bash git clone https://github.com/ScribblerCoder/nginx-ajp-docker cd nginx-ajp-docker ``` `nginx.conf`の`TARGET-IP`をAJP IPに置き換え、その後ビルドして実行します。 ```bash docker build . -t nginx-ajp-proxy docker run -it --rm -p 80:80 nginx-ajp-proxy ``` ### Apache AJP プロキシ **Nginx** の代わりにそのポートにアクセスするために **Apache AJP プロキシ** を使用することも可能です。 ## 参考文献 - [https://github.com/yaoweibin/nginx_ajp_module](https://github.com/yaoweibin/nginx_ajp_module) {{#include ../banners/hacktricks-training.md}}