はじめに
この実験 (Lab) では、Web 列挙に広く使われているツールである Gobuster を用いたディレクトリスキャンの際に、単語リスト (wordlist) が果たす重要な役割を探求します。ディレクトリスキャンは、Web アプリケーションのペネトレーションテストにおける基本的なステップであり、機密情報を含む可能性のある隠しディレクトリやファイルを発見したり、攻撃ベクトルを提供したりするのに役立ちます。このプロセスの有効性と効率性は、使用される単語リストに大きく依存します。本実験では、Kali Linux におけるデフォルトの単語リストの場所を特定し、異なるサイズの単語リストでスキャンを実行し、スキャン時間と発見されたエントリ数への影響を分析します。これにより、列挙タスクに適した単語リストを選択する際のトレードオフについて実践的な理解を得ることができます。
Kali におけるデフォルトの単語リストの場所を特定する
このステップでは、Gobuster のようなツールに不可欠な、Kali Linux に提供されているデフォルトの単語リストの場所を特定します。Kali Linux には、seclists ディレクトリに保存された豊富な単語リストのコレクションが付属しています。これらの単語リストは、ディレクトリ列挙、パスワードクラッキング、ファジングなど、さまざまな目的に分類されています。
まず、seclists ディレクトリに移動します。これらの単語リストの一般的なパスは /usr/share/seclists です。
ls -l /usr/share/seclists
さまざまなサブディレクトリが表示されます。Web 列挙においては、Discovery ディレクトリが特に重要です。Discovery の中には Web-Content があり、Web ディレクトリやファイルを見つけるために特別に設計された単語リストが含まれています。
ls -l /usr/share/seclists/Discovery/Web-Content/
これらのうち、common.txt は比較的サイズの小さい単語リストであり、directory-list-2.3-medium.txt はより大きく包括的な単語リストです。次のステップでは、これら 2 つの単語リストを使用して、単語リストのサイズが Gobuster スキャンに与える影響を観察します。
ls -l /usr/share/seclists/Discovery/Web-Content/common.txt
ls -l /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
common.txt の最初の数行を表示して、その内容を把握することもできます。
head /usr/share/seclists/Discovery/Web-Content/common.txt
期待される出力(一部抜粋):
.git
.svn
.DS_Store
.htaccess
.htpasswd
.bash_history
.bash_logout
.bashrc
.profile
.ssh
小さな単語リスト (common.txt) を使用したスキャンの実行
このステップでは、Gobuster を使用して、より小さい common.txt 単語リストでディレクトリスキャンを実行します。これにより、あまり一般的でないディレクトリを見逃す可能性はありますが、高速なスキャンを実証します。
スキャンのターゲットは、ローカルのポート 8000 で実行されているシンプルな Python Web サーバーとします。URL は http://127.0.0.1:8000 です。
Gobuster を実行するには、次のコマンドを使用します。
dir: ディレクトリ/ファイルのブルートフォースを実行することを指定します。-u: ターゲット URL を指定します。-w: 単語リストへのパスを指定します。-o: 結果を保存するための出力ファイルを指定します。
gobuster dir -u http://127.0.0.1:8000 -w /usr/share/seclists/Discovery/Web-Content/common.txt -o ~/project/gobuster_common_results.txt
スキャンが実行され、その進捗が表示されます。完了したら、~/project/gobuster_common_results.txt に保存された結果を表示できます。
cat ~/project/gobuster_common_results.txt
期待される出力(common.txt の内容やサーバーの設定によって若干異なる場合があります):
/admin (Status: 200)
/backup (Status: 200)
/common.html (Status: 200)
スキャンが完了するまでにかかった時間を確認してください。これは、次のステップでより大きな単語リストを使用したスキャンと比較されます。
より大きな単語リスト (directory-list-2.3-medium.txt) を使用したスキャンの実行
このステップでは、Gobuster を使用してディレクトリスキャンを再度実行しますが、今回ははるかに大きい directory-list-2.3-medium.txt 単語リストを使用します。これにより、より包括的な単語リストがより多くのエントリを見つけることができる一方で、スキャン時間が長くなるというトレードオフがあることを実証します。
gobuster dir -u http://127.0.0.1:8000 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -o ~/project/gobuster_medium_results.txt
このスキャンは、単語リストのサイズのため、前回のスキャンよりも大幅に時間がかかります。実行中は辛抱強くお待ちください。完了したら、結果を確認してください。
cat ~/project/gobuster_medium_results.txt
期待される出力(/admin、/backup、/common.html など、common.txt のスキャンよりも多くのエントリが含まれ、さらに多くのエントリが含まれる可能性があります):
/admin (Status: 200)
/backup (Status: 200)
/common.html (Status: 200)
/css (Status: 200)
/js (Status: 200)
/images (Status: 200)
... (さらに多くのエントリ)
発見されたエントリの数と、前回のスキャンと比較した合計時間を比較してください。
両方のスキャンの時間と結果の比較
このステップでは、両方のスキャンの結果と、おおよその所要時間を明確に比較します。Gobuster は出力に正確な所要時間を提供しませんが、実行中に観察した時間や、出力ファイルのファイルサイズまたは行数を確認することで推測できます。
まず、両方の出力ファイルの行数(発見されたエントリ数に対応します)を比較しましょう。
echo "Results from common.txt scan:"
wc -l ~/project/gobuster_common_results.txt
echo "Results from directory-list-2.3-medium.txt scan:"
wc -l ~/project/gobuster_medium_results.txt
期待される出力(行数は異なります):
Results from common.txt scan:
3 /home/labex/project/gobuster_common_results.txt
Results from directory-list-2.3-medium.txt scan:
X /home/labex/project/gobuster_medium_results.txt (X ははるかに大きな数)
directory-list-2.3-medium.txt を使用したスキャンの方が、はるかに多くのエントリを発見したことがわかるはずです。
時間に関しては、common.txt を使用したスキャンは非常に速く完了した(おそらく数秒)のに対し、directory-list-2.3-medium.txt を使用したスキャンははるかに時間がかかった(システムリソースやネットワーク速度によっては数分かかる可能性もある)ことに気づいたはずです。これは、単語リストのサイズとスキャン時間の直接的な関係を示しています。
単語リストのサイズとスキャン時間のトレードオフを理解する
この最終ステップでは、単語リストのサイズ、スキャン時間、および結果の網羅性に関するトレードオフに焦点を当て、前回のスキャンから得られた重要なポイントをまとめます。
より大きな単語リスト:
- 利点: 隠されたディレクトリやファイルを発見する可能性が高く、より徹底的な列挙につながります。これは、脆弱性や機密データが含まれる可能性のある、一般的でないパスやカスタム名のパスを見つけるために重要です。
- 欠点: スキャン時間が大幅に増加し、より多くのシステムリソースを消費し、分析が困難な大量の出力を生成します。また、より多くのノイズ(誤検知または無関係なエントリ)を生成する可能性もあります。
より小さな単語リスト:
- 利点: スキャン時間が大幅に短縮され、リソース消費が少なく、管理しやすい出力を生成します。迅速なチェックや、一般的なパスについてある程度把握している場合に理想的です。
- 欠点: あまり一般的でない、またはカスタム名のディレクトリやファイルを見逃す可能性があり、不完全な列挙につながり、重要な情報を見落とす可能性があります。
適切な単語リストの選択: 単語リストの選択は、目的と利用可能な時間によって異なります。
- 初期偵察や迅速なチェックには、
common.txtのような小さくターゲットを絞った単語リストがしばしば十分です。 - 包括的で詳細な評価には、
directory-list-2.3-medium.txtのようなより大きな単語リスト、またはさらに大きなもの(例:directory-list-2.3-big.txt)が必要です。 - 場合によっては、組み合わせアプローチが最適です。まず小さな単語リストで速度を重視し、初期の発見でさらに深く調査する必要がある場合は、より大きな単語リストでフォローアップします。
- 特定のターゲットまたはテクノロジースタックに合わせてカスタマイズされたカスタム単語リストも非常に効果的です。
この理解は、効率的かつ効果的な Web アプリケーションのペネトレーションテストにとって不可欠です。
まとめ
この実験では、Gobuster を使用したディレクトリスキャンの際に、単語リストのサイズが与える影響を効果的に調査しました。Kali Linux におけるデフォルトの単語リストの場所を特定し、小さい単語リスト(common.txt)と大きい単語リスト(directory-list-2.3-medium.txt)の両方を使用してスキャンを実行し、それらの結果と概算スキャン時間を比較しました。このプロセスを通じて、トレードオフについての実践的な理解を得ることができました。具体的には、より大きな単語リストはより包括的な結果をもたらしますが、大幅な時間を要するのに対し、より小さな単語リストはより迅速なスキャンを提供しますが、一般的でないエントリを見逃すリスクがあります。この知識は、ペネトレーションテストにおける Web 列挙タスク中に、情報に基づいた意思決定を行う上で非常に重要です。
