mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
240 lines
15 KiB
Markdown
240 lines
15 KiB
Markdown
# 8009 - Apache JServ Protocol (AJP)のペンテスト
|
||
|
||
<details>
|
||
|
||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||
|
||
</details>
|
||
|
||
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||
|
||
**遅延なしで報酬を受け取る**\
|
||
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||
|
||
**Web3ペンテストの経験を積む**\
|
||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のWeb3セキュリティをマスターしましょう。
|
||
|
||
**Web3ハッカーレジェンドになる**\
|
||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||
|
||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||
|
||
{% embed url="https://hackenproof.com/register" %}
|
||
|
||
## 基本情報
|
||
|
||
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/)などのスタンドアロンの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'](https://www.chaitin.cn/en/ghostcat)
|
||
|
||
AJPポートが公開されている場合、TomcatはGhostcatの脆弱性に対して脆弱です。この問題に対応する[エクスプロイト](https://www.exploit-db.com/exploits/48143)があります。
|
||
|
||
GhostcatはLFI(Local File Inclusion)の脆弱性ですが、ある特定のパスからのみファイルを取得できます。それでも、これには`WEB-INF/web.xml`などの重要な情報(Tomcatインターフェースの資格情報など)を漏洩させる可能性があります。ただし、サーバーのセットアップによって異なります。
|
||
|
||
修正済みバージョンは9.0.31以上、8.5.51、および7.0.100です。
|
||
|
||
## 列挙
|
||
|
||
### 自動化
|
||
```bash
|
||
nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
|
||
```
|
||
### [**ブルートフォース**](../generic-methodologies-and-resources/brute-force.md#ajp)
|
||
|
||
## AJPプロキシ
|
||
|
||
### Apache AJPプロキシ
|
||
|
||
通常、ポート8009が開いていて他のウェブポートが開いていないことはめったにありません。その場合、既存のツール(例:Metasploit)を使用して侵入することができれば便利です。引用の一つに述べられているように、Apacheを悪用してリクエストをTomcatのポート8009にプロキシすることができます。参考文献には、それを行うための素晴らしいガイドがあります(まずそれを読んでください)。以下は、私自身のマシンで使用したコマンドの概要です。必要ないと思われる一部の元の指示は省略しました。
|
||
```bash
|
||
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に向けるだけで、そのシステムを乗っ取ることができます。以下はメタスプロイトの出力です。
|
||
```bash
|
||
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
|
||
|
||
[Docker化バージョンをチェックアウト](#Dockerized-version)
|
||
|
||
オープンなAJPプロキシポート(8009 TCP)に遭遇した場合、Nginxを`ajp_module`とともに使用して「隠された」Tomcat Managerにアクセスすることができます。これは、次の手順でNginxのソースコードをコンパイルし、必要なモジュールを追加することで実現できます。
|
||
|
||
* Nginxのソースコードをダウンロードする
|
||
* 必要なモジュールをダウンロードする
|
||
* `ajp_module`を使用してNginxのソースコードをコンパイルする
|
||
* AJPポートを指す設定ファイルを作成する
|
||
```bash
|
||
# 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`ブロック全体をコメントアウトしてください。
|
||
```shell-session
|
||
upstream tomcats {
|
||
server <TARGET_SERVER>:8009;
|
||
keepalive 10;
|
||
}
|
||
server {
|
||
listen 80;
|
||
location / {
|
||
ajp_keep_conn on;
|
||
ajp_pass tomcats;
|
||
}
|
||
}
|
||
```
|
||
ローカルホストに対してcURLリクエストを発行して、Nginxが正常に動作しているかを確認するために、Nginxを起動してください。
|
||
```html
|
||
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>
|
||
```
|
||
### Docker化バージョン
|
||
|
||
The Dockerized version of the Apache JServ Protocol (AJP) is a convenient way to set up and test AJP vulnerabilities in a controlled environment. By using Docker, you can easily create and manage containers that contain the necessary components for AJP pentesting.
|
||
|
||
To get started, make sure you have Docker installed on your system. Once Docker is installed, you can pull the AJP Docker image from the Docker Hub repository using the following command:
|
||
|
||
```
|
||
docker pull <image_name>
|
||
```
|
||
|
||
After pulling the image, you can run a container using the following command:
|
||
|
||
```
|
||
docker run -it -p <host_port>:<container_port> <image_name>
|
||
```
|
||
|
||
Replace `<image_name>` with the name of the AJP Docker image you pulled, `<host_port>` with the port number on your host machine that you want to map to the container's port, and `<container_port>` with the port number that the AJP service is running on inside the container.
|
||
|
||
Once the container is running, you can use tools like `nmap` or `curl` to test for AJP vulnerabilities. For example, you can use the following command to check if the AJP service is running on the specified port:
|
||
|
||
```
|
||
nmap -p <port_number> <host_ip>
|
||
```
|
||
|
||
Replace `<port_number>` with the port number you mapped to the container, and `<host_ip>` with the IP address of your host machine.
|
||
|
||
By using the Dockerized version of AJP, you can safely test for vulnerabilities without affecting your production environment. Remember to always obtain proper authorization before conducting any pentesting activities.
|
||
```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
|
||
```
|
||
## 参考文献
|
||
|
||
* [https://academy.hackthebox.com/module/145/section/1295](https://academy.hackthebox.com/module/145/section/1295)
|
||
|
||
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||
|
||
**遅延なしで報酬を受け取る**\
|
||
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||
|
||
**Web3ペントテストの経験を積む**\
|
||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるWeb3セキュリティをマスターしましょう。
|
||
|
||
**Web3ハッカーレジェンドになる**\
|
||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||
|
||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||
|
||
{% embed url="https://hackenproof.com/register" %}
|
||
|
||
<details>
|
||
|
||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **および** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
|
||
|
||
</details>
|