Gobuster ファズモードでのレスポンス長による結果の除外

Beginner
オンラインで実践に進む

はじめに

Gobuster は、ディレクトリおよびファイルの総当たり攻撃 (brute-forcing)、DNS サブドメインの総当たり攻撃、S3 バケット列挙に使用される強力なツールです。ファジング操作、特に Web サーバーに対するファジング操作を実行する際、大量の「ノイズの多い」結果に遭遇することがよくあります。これらには、存在しないパスに対する応答で、一貫した HTTP ステータスコード (例:404 Not Found) と、特に重要なのは、一貫した応答ボディ長が含まれることがよくあります。これにより、出力が煩雑になり、正当な発見を特定することが困難になります。

この実験 (lab) では、ファジングモードで Gobuster の --exclude-length フラグを活用する方法を学びます。この機能により、無視する応答ボディ長を 1 つ以上指定でき、これらのノイズの多い結果を効果的にフィルタリングできます。この実験 (lab) の終わりまでに、関連性の高い応答のみに焦点を当てた、より的を絞った効率的なファジングスキャンを実行できるようになります。

ファジングスキャンを実行し、無効なリクエストの一般的な応答サイズを特定する

このステップでは、ローカル Web サーバーに対して最初の Gobuster ファジングスキャンを実行します。これにより、特に存在しないパスに対する応答サイズなど、典型的な出力を観察し、「ノイズの多い」結果を特定するのに役立ちます。

まず、Web サーバーが実行されていることを確認します。プロセスがアクティブかどうかを確認できます。

ps aux | grep "python3 -m http.server 8000" | grep -v grep

サーバーが実行されていることを示す、以下のような出力が表示されるはずです。

labex       1234  0.0  0.0  12345  6789 ?        Sl   HH:MM   0:00 python3 -m http.server 8000 --directory /tmp/web_root

次に、セットアップで作成した単語リストを使用して Gobuster ファジングスキャンを実行します。ターゲットは http://127.0.0.1:8000 です。

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt

出力を観察します。同じステータスコード (例:404) と、さらに重要なのは、同じサイズを持つ複数のエントリに気づくでしょう。無効なリクエストに対するこの一貫したサイズが、除外の対象となります。たとえば、nonexistentpath123anothernonexistentpath は同じサイズを示すはずです。

/index.html           (Status: 200) [Size: 19]
/admin                (Status: 404) [Size: 19]
/login                (Status: 404) [Size: 19]
/config               (Status: 404) [Size: 19]
/robots.txt           (Status: 404) [Size: 19]
/nonexistentpath123   (Status: 404) [Size: 19]
/anothernonexistentpath (Status: 404) [Size: 19]

出力から、404 (Not Found) エラーの一般的な応答サイズを特定します。この例では 19 です。これは、次のステップでノイズを除外するために使用するサイズです。

特定したサイズで --exclude-length フラグを使用してスキャンを再実行する

このステップでは、Gobuster スキャンを再実行しますが、今回は前のステップで特定した応答サイズに基づいてノイズの多い結果をフィルタリングするために --exclude-length フラグを使用します。

前のステップから、404 エラーの一般的な応答サイズを思い出してください。私たちの例では 19 でした。次に、Gobuster コマンドに --exclude-length 19 を追加します。

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt --exclude-length 19

コマンドを実行し、出力を観察します。

ノイズの多い結果がどのようにフィルタリングされるかを観察する

前のステップでコマンドを実行した後、出力に顕著な違いがあることにすぐに気づくはずです。除外されたサイズに対応するエントリ (例:サイズ 19 の 404 応答) は表示されなくなります。

このスキャンの出力とステップ 1 の出力を比較してください。

期待される出力:

/index.html           (Status: 200) [Size: 19]

/index.html エントリのみが表示されるはずです。これは、異なるコンテンツ長で 200 OK ステータスを返した唯一のエントリです (ただし、この特定のセットアップでは、404 ページもサイズ 19 を持ちますが、これは単純なサーバーの制限です。実際のシナリオでは、404 ページは有効なページとは異なるサイズを持つことがよくあります)。重要なのは、指定されたサイズの応答がすべてフィルタリングされたということです。

これにより、--exclude-length フラグがノイズを効果的に削減し、潜在的に興味深い発見に集中できることがわかります。

長さのカンマ区切りリストで除外を絞り込む

Web サーバーによっては、さまざまな種類の「見つからない」または「無効な」リクエストに対して異なる応答長を返す場合があります。Gobuster では、--exclude-length フラグにカンマ区切りのリストを提供することで、複数の長さを除外できます。

これを実証するために、サーバーがサイズ 1950 の 404 ページを返す可能性があると仮定しましょう。別のサイズのファイルを Web ルートに追加してこれをシミュレートします。

まず、Web ルートに異なるサイズの新しいファイルを追加します。

echo "This is a test page with a different length." > /tmp/web_root/testpage.html

次に、testpage.html を単語リストに追加します。

echo "testpage.html" >> /tmp/wordlist.txt

再度スキャンを実行しますが、今回は 1939 の両方を除外したいと仮定します (testpage.html の長さは 39 です)。

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt --exclude-length 19,39

出力を観察します。元の 404 応答 (長さ 19) と testpage.html 応答 (長さ 39) の両方が除外されているはずです。

クリーンな出力から興味深い発見を分析する

この最終ステップでは、--exclude-length フラグを使用して生成されたクリーンな出力を分析します。目標は、このフィルタリングがファジング操作中に真に興味深い発見を特定するのにどのように役立つかを理解することです。

前のステップでコマンドを実行した後、出力はさらに簡潔になるはずです。除外リストに ない ステータスコードと長さを返した単語リスト内の他のパスがあった場合、それらはここで際立つでしょう。

たとえば、/secret_admin_panel のようなパスがユニークな長さで 200 OK を返した場合、フィルタリングされていないスキャンで何百もの 404 の中に埋もれていた可能性があるのに対し、フィルタリングされた出力では明確に表示されます。

現在のセットアップでは、1939 が除外され、index.html の長さが 19 であるため、すべてのエントリが除外されているため、出力は空になるはずです。これは、正確なフィルタリングの力を示しています。

このテクニックは、実際のペネトレーションテストやバグバウンティハンティングにおいて非常に価値があります。ここでは、大きな単語リストが大量の無関係なデータを生成する可能性があります。一般的な「ノイズ」の長さを体系的に除外することにより、スキャン結果のレビューに必要な手作業を大幅に削減し、隠されたディレクトリやファイルを発見する可能性を高めることができます。

環境をクリーンアップするために、Python Web サーバーを停止できます。

kill $(cat /tmp/web_server_pid)

これで実験は終了です。Gobuster の --exclude-length フラグを使用してファジングスキャンを絞り込む方法を習得しました。

まとめ

この実験では、ファズモードで Gobuster の --exclude-length フラグを使用する実践的な経験を積みました。まず、無効なリクエストに対する一般的な応答長を特定するための初期スキャンを実行し、これらはしばしばノイズを表します。次に、単一の長さで --exclude-length フラグを使用してこれらの無関係な結果を除外し、よりクリーンな出力を得ました。最後に、長さのカンマ区切りリストを提供して除外をさらに絞り込む方法を探り、さまざまな種類のノイズの多い応答を処理する際の柔軟性を示しました。

このテクニックを習得することで、Web アプリケーションのファジング操作の効率と効果を大幅に向上させ、真に興味深い発見に集中し、脆弱性の発見プロセスを加速させることができます。