はじめに
この実験 (Lab) では、ディレクトリおよびファイルの総当たり攻撃に強力なツールである Gobuster を使用する際に発生する可能性のある一般的な接続エラーを特定し、解決するための実践的な経験を積みます。これらのエラーを理解することは、効果的な Web 列挙およびペネトレーションテストにとって非常に重要です。さまざまなネットワークシナリオをシミュレートし、Gobuster の動作を観察し、エラーメッセージを解釈してスキャン戦略を調整する方法を学びます。この実践的なアプローチにより、実際のシナリオで Gobuster の問題を効率的にトラブルシューティングするスキルを習得できます。
ポートが閉じているターゲットを対象に「Connection Refused」エラーをシミュレートする
このステップでは、「Connection Refused」エラーをシミュレートします。このエラーは通常、Gobuster がターゲットホストとポートに接続しようとした際に、そのポートでサービスがリッスンしていないか、ファイアウォールが積極的に接続を拒否している場合に発生します。ここでは、一般的な Web サイトの存在しないポートを対象にして、このエラーを発生させます。
ターミナルを開き、以下の gobuster コマンドを実行します。ここでは example.com を、開いている可能性が低い高いポート(例:65530)でターゲットにし、確実に connection refused エラーを発生させます。また、エラーを迅速に確認するために、小さな単語リストを使用します。
gobuster dir -u http://example.com:65530 -w /usr/share/wordlists/dirb/common.txt -t 1 -k -q
-u http://example.com:65530: 閉じているポートを持つターゲット URL を指定します。-w /usr/share/wordlists/dirb/common.txt: 小さく一般的な単語リストを使用します。-t 1: エラーをより明確にするために、同時実行スレッド数を 1 に設定します。-k: SSL 証明書の検証をスキップします(ここでは厳密には必要ありませんが、一般的な Web スキャンでは良い習慣です)。-q: バナーと進行状況の出力を抑制し、エラーに焦点を当てます。
以下のような出力が表示され、接続拒否エラーが示されるはずです。
[!] Could not connect to http://example.com:65530: dial tcp XX.XX.XX.XX:65530: connect: connection refused
この出力は、ターゲットによって接続が積極的に拒否されたため、Gobuster が接続を確立できなかったことを明確に示しています。
低い --timeout を設定して遅いサーバーを対象に「Timeout」エラーをシミュレートする
このステップでは、「Timeout」エラーをシミュレートします。タイムアウトは、Gobuster がサーバーに接続しようとしたり、データの送受信を行おうとしたりした際に、その操作が指定されたタイムアウト期間よりも長くかかる場合に発生します。これは、遅いサーバー、ネットワークの輻輳、またはサーバーが意図的に応答を遅延させている場合に発生する可能性があります。ここでは、公開されている「遅いサーバー」のエンドポイントを使用し、非常に低いタイムアウト値を設定してこのエラーを強制します。
以下の gobuster コマンドを実行します。ここでは、1 秒の遅延を導入する http://slowwly.robertomurray.co.uk/delay/1000/url/http://www.google.com を対象とし、gobuster のタイムアウトを 500ms(0.5 秒)に設定します。
gobuster dir -u http://slowwly.robertomurray.co.uk/delay/1000/url/http://www.google.com -w /usr/share/wordlists/dirb/common.txt -t 1 --timeout 500ms -k -q
-u http://slowwly.robertomurray.co.uk/delay/1000/url/http://www.google.com: 遅延を導入する URL です。--timeout 500ms: 接続タイムアウトを 500 ミリ秒に設定します。サーバーは 1000ms 遅延するため、これによりタイムアウトが発生します。
以下のような出力が表示され、タイムアウトエラーが示されるはずです。
[!] Could not connect to http://slowwly.robertomurray.co.uk/delay/1000/url/http://www.google.com: Get "http://slowwly.robertomurray.co.uk/delay/1000/url/http://www.google.com/admin": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
これは、応答を受信する前に Gobuster の接続試行がタイムアウトしたことを示しています。
存在しないドメインをターゲットにして DNS エラーを理解する
このステップでは、DNS エラーに遭遇します。このタイプのエラーは、Gobuster がターゲット URL のホスト名を IP アドレスに解決できない場合に発生します。これは通常、ドメイン名がスペルミスされている、存在しない、または DNS リゾルバに問題がある場合に発生します。
明らかに存在しないドメイン(例:nonexistentdomain12345.com)をターゲットにした、以下の gobuster コマンドを実行します。
gobuster dir -u http://nonexistentdomain12345.com -w /usr/share/wordlists/dirb/common.txt -t 1 -k -q
-u http://nonexistentdomain12345.com: 解決されないはずのドメインをターゲットにします。
以下のような出力が表示され、DNS ルックアップの失敗が示されるはずです。
[!] Could not connect to http://nonexistentdomain12345.com: dial tcp: lookup nonexistentdomain12345.com: no such host
このエラーメッセージ no such host は、ドメイン名が DNS システムによって解決できなかったことを明確に示しています。
--no-error フラグを使用してこれらのメッセージを抑制する
このステップでは、Gobuster で --no-error フラグを使用する方法を学びます。エラーの理解はトラブルシューティングに重要ですが、特に接続問題がいくつか予想され、成功した発見のみに関心がある大規模なスキャンでは、冗長なエラーメッセージを抑制したい場合があります。--no-error フラグは、Gobuster に接続エラーを出力しないように指示します。
ステップ 1 のコマンドを再度実行しますが、今回は --no-error フラグを追加します。
gobuster dir -u http://example.com:65530 -w /usr/share/wordlists/dirb/common.txt -t 1 -k -q --no-error
接続が拒否されている場合でも、Gobuster はコンソールに [!] Could not connect... メッセージを出力しないことに注意してください。出力ははるかにクリーンになり、成功した発見のみ(もしあれば。ポートが閉じている場合は可能性は低い)または最終的な概要のみが表示される可能性があります。
## 接続拒否に関連するエラーメッセージは表示されません。
このフラグは、接続エラーログに圧倒されることなく、スキャンの成功した結果のみに焦点を当てたい場合に役立ちます。
エラーの解釈方法を学び、スキャンパラメータを調整する
このステップでは、Gobuster のエラーの解釈方法についての理解を深め、その知識を活用してより効果的な結果を得るためにスキャンパラメータを調整する方法を学びます。重要なのは、エラーの種類によって異なる解決策が示唆されるということです。
- 「Connection Refused」: これは、そのポートでサービスが実行されていない、ファイアウォールがブロックしている、またはホストがダウンしていることを意味することがよくあります。
- 対処法: ターゲット URL とポートを再確認してください。サービスが存在するはずだと確信している場合は、ファイアウォールルールやネットワーク接続を調査してください。別のポートまたはターゲットに切り替える必要があるかもしれません。
- 「Timeout」: これは、サーバーが遅い、ネットワーク遅延が高い、またはサーバーが意図的に応答を遅延させていることを示します。
- 対処法:
--timeoutの値を増やします(例:--timeout 5s)。ターゲットまたはネットワークへの負荷を軽減するために、スレッド数(-t)を減らすことも検討できます。
- 対処法:
- 「No such host」(DNS エラー): ドメイン名を解決できません。
- 対処法: ドメイン名のスペルミスを確認してください。DNS 設定を確認するか、別の DNS リゾルバを使用してみてください。ドメインが本当に存在しない場合は、間違った場所にターゲットを合わせています。
ターゲットをスキャンしていて、「Timeout」エラーが頻繁に発生するシナリオを考えてみましょう。学んだことに基づいて、タイムアウトを増やすことでコマンドを調整します。たとえば、最初のコマンドが次のようであった場合:
gobuster dir -u http://target.com -w /usr/share/wordlists/dirb/common.txt -t 20
そして多くのタイムアウトが発生した場合、次のように変更します。
gobuster dir -u http://target.com -w /usr/share/wordlists/dirb/common.txt -t 10 --timeout 5s
ここでは、スレッドを 10 に減らし、タイムアウトを 5 秒に増やしました。これにより、遅いサーバーに対するリクエストの成功率が向上する可能性が高くなります。
Gobuster を実行し、エラーを観察し、パラメータを調整するというこの反復的なプロセスは、効率的な Web 列挙のための基本的なスキルです。
まとめ
この実験では、一般的な Gobuster の接続エラーを特定し、トラブルシューティングする方法を習得しました。それぞれのエラーの根本原因を理解しながら、「Connection Refused」、「Timeout」、「No such host」(DNS エラー)をシミュレートしました。また、よりクリーンな出力を得るために --no-error フラグを使用してエラーメッセージを抑制する方法も学びました。最も重要なのは、これらのエラーを解釈して Gobuster のスキャンパラメータを効果的に調整する方法を理解したことです。これにより、タイムアウトの増加やターゲット URL の検証などを行い、Web 列挙の効率と成功率を向上させることができます。この実践的な知識は、Web ペネトレーションテストやバグバウンティハンティングを行うすべての人にとって非常に価値があります。
