
Apache JServ Protocol (ajp13)用のコマンドラインファザー
AJPFuzzer は、Apache JServ Protocol (ajp13) 向けの基本的なファザーです。
libajp13 をベースに構築されており、このツールは使いやすいコマンドラインインターフェースを使用して AJP メッセージを作成・送信できます。AJPFuzzer は、適切な形式の AJP13 メッセージ (すべてのメッセージタイプ) に加え、突然変異 (ビットフリッピング、型不一致メッセージなど) を作成でき、これにより Web サーバーの AJP モジュールや J2EE コンテナなど、AJP ベースのサービスを対象としたセキュリティテストを容易にします。
リリースページ から最新の AJPFuzzer jar をダウンロードします。
ダウンロードした jar を以下のコマンドで実行します:
$ java -jar ajpfuzzer_v0.7.jar
ツールがシェルを起動します。?list と入力すると、利用可能なコマンドの一覧が表示されます。この時点で、以下のようにしてターゲットに接続できます:
AJPFuzzer> connect 127.0.0.1 8009
次に、10 と入力するだけで CPing メッセージ (タイプ 10) を送信できます (このメッセージには引数は不要です)
AJPFuzzer/127.0.0.1:8009> 10
以下のスクリーンショットは実行全体を示しています:
もちろん、適切なテストケースと引数を指定することで、より複雑なメッセージを送信することも可能です。特定のコマンドの詳細については、?list <command> を参照してください。
例えば、完全にカスタマイズされた ForwardRequest タイプのメッセージを以下のように送信できます:
> forwardrequest 2 "HTTP/1.1" "/api/" 127.0.0.1 localhost porto 8009 false "Cookie:AAAA=BBBB" ""
また、任意の要素をファジングする ForwardRequest メッセージを送信することも可能です:
> genericfuzz 2 "HTTP/1.1" "/test.html" "127.0.0.1" "127.0.0.1" "server.name.test" 8009 false "Cookie:AAAA=BBBB" "secret:FUZZ" /tmp/list.txt
現在、AJPFuzzer は以下のテストケースを提供しています:
新しいテストケースは、AJPTestCases.java クラスを拡張することで追加できます。@Command アノテーションを使用することで、ツールが追加のコマンドを認識し、CLIから利用可能になります。
| Id | Name | Description |
|---|
| 1 | body | WebサーバーからJ2EEコンテナへボディメッセージを送信 |
| 2 | forwardrequest | WebサーバーからJ2EEコンテナへのリクエスト処理サイクルを開始 |
| 3 | sendbodychunk | J2EEコンテナからWebサーバーへボディのチャンクを送信 |
| 4 | sendheaders | J2EEコンテナからWebサーバーへレスポンスヘッダーを送信 |
| 5 | endresponse | J2EEコンテナからWebサーバーへのレスポンスの終了を通知 |
| 6 | getbodychunk | リクエスト元からさらなるデータを取得。J2EEコンテナからWebサーバーへのメッセージ |
| 7 | shutdown | 標準のシャットダウンAJP13パケットを送信 |
| 8 | ping | ピング (CPingではない) AJP13パケットを送信 |
| 9 | cpong | CPong AJP13パケットを送信 |
| 10 | cping | CPing AJP13パケットを送信 |
| 11 | forwardreqalltypes | すべての可能なパケットタイプでForwardRequest AJP13パケットを送信 |
| 12 | verbtampering | AJP13を介して複数のリクエストを送信しHTTP Verb Tamperingを行い、認証バイパスの欠陥を検出 |
| 13 | jettyleak | JettyLeakスタイルのAJP13パケットを送信 |
| 14 | hugelengthsmallbody | 大きなContent-Lengthと小さなボディでForwardRequest+Bodyメッセージを送信 |
| 15 | hugeheader | ヘッダー長が0x9999を超える (例: A010) 2つのAJP13 ForwardRequestパケットを送信 |
| 16 | fuzzbit | 複雑なAJP13 ForwardRequestを作成しビットフリッピングを開始 |
| 17 | fuzzslice | AJP13 ForwardRequest、SendHeaders、ShutDown、0xFF、0x00を作成。スライスして送信 |
| 18 | servletpath | 任意の'servlet_path'属性を持つAJP13 ForwardRequestを作成 |
| 19 | bypassauthnull | auth_typeを'null'に設定した2つのAJP13 ForwardRequestを作成 |
| 20 | envars | req_attribute_code (10) を使用して任意の環境変数を設定するAJP13 ForwardRequestを作成 |
| 21 | hugepacketsize | サイズが8192バイトを超える2つのAJP13リクエストを作成 |
| 22 | genericfuzz | FUZZキーワードを使用して任意のメッセージ要素をファジングできるAJP13 ForwardRequest (GET) を作成 |