ディレクトリ探索ツール「Gobuster」
2025年7月18日
セキュリティエンジニアの曽我です。今回のtoolsシリーズ第12回は、高速なディレクトリ探索ツール「Gobuster」について詳しく解説します。ウェブサーバー上の隠しディレクトリやファイルの発見は、ペネトレーションテストやセキュリティ評価において重要なステップであり、Gobusterはこの作業を効率的に行うための強力なツールです。
本記事では、Gobusterの基本的な使い方から実践的な活用法まで、具体的なコマンド例と出力結果を交えながら解説します。ウェブアプリケーションのセキュリティテストやバグバウンティに携わるセキュリティエンジニアの方々に役立つ内容となっています。
目次
- Gobusterとは
- インストール方法
- 基本的な使い方 3.1. ディレクトリ探索モード 3.2. ファイル探索 3.3. DNS探索モード 3.4. VHOST探索モード
- 高度な使用方法 4.1. フィルタリングオプション 4.2. スレッド設定 4.3. レート制限と遅延 4.4. 認証とプロキシ
- 実践的な活用例 5.1. ウェブアプリケーション評価 5.2. ドメイン列挙 5.3. コンテンツディスカバリワークフロー
- 検出結果の分析と対策
- まとめ
- 参考資料
1. Gobusterとは
Gobusterは、Go言語で書かれた高速なディレクトリ/ファイル、DNS、およびVHostの探索ツールです。Kali Linuxには標準搭載されており、マルチスレッドを活用した並列処理により、大規模なワードリストを使用しても高速にスキャンを完了できます。
Gobusterの主な特徴:
- 高速なマルチスレッド設計
- 複数の探索モード(DIR, DNS, VHOST, FUZZ)
- 豊富なフィルタリングオプション
- ステータスコードベースの結果フィルタリング
- Cookieやヘッダーのサポート
- Basic認証のサポート
- プロキシサポート
- レート制限と遅延オプション
- ワイルドカードのサポート
- 作業の保存と再開機能
Gobusterは、その高速性と使いやすさから、多くのセキュリティ専門家に利用されています。特に大規模なサイトやアプリケーションのテストでは、効率的に隠れたコンテンツを発見する能力が重宝されています。
2. インストール方法
Kali Linuxには標準でインストールされていますが、他のディストリビューションへのインストール方法も記載します。
Debian/Ubuntuベースのシステム:
sudo apt update
sudo apt install gobuster
Snapを使用する場合:
sudo snap install gobuster
Go言語環境からのインストール:
Go環境がすでにセットアップされている場合:
go install github.com/OJ/gobuster/v3@latest
リリースバイナリからのインストール:
GitHub Releaseページから直接バイナリをダウンロードすることもできます:
wget https://github.com/OJ/gobuster/releases/download/v3.4.0/gobuster_3.4.0_Linux_x86_64.tar.gz
tar -xzvf gobuster_3.4.0_Linux_x86_64.tar.gz
sudo mv gobuster /usr/local/bin/
インストールが完了したら、以下のコマンドでバージョンを確認できます:
gobuster version
出力例:
Gobuster v3.4.0
また、利用可能なモードを確認するには:
gobuster -h
3. 基本的な使い方
3.1. ディレクトリ探索モード
最も一般的な使用法は、ウェブサーバー上のディレクトリを探索することです:
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt
このコマンドは、example.comに対して、common.txtワードリストを使用したディレクトリ探索を実行します。
出力例:
===============================================================
Gobuster v3.4.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: https://example.com
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.4.0
[+] Timeout: 10s
===============================================================
2025/10/01 15:30:45 Starting gobuster in directory enumeration mode
===============================================================
/images (Status: 301) [Size: 169] [--> https://example.com/images/]
/admin (Status: 301) [Size: 169] [--> https://example.com/admin/]
/css (Status: 301) [Size: 169] [--> https://example.com/css/]
/js (Status: 301) [Size: 169] [--> https://example.com/js/]
/backup (Status: 301) [Size: 169] [--> https://example.com/backup/]
/config (Status: 403) [Size: 1234]
/.htaccess (Status: 403) [Size: 199]
/robots.txt (Status: 200) [Size: 24]
===============================================================
2025/10/01 15:32:35 Finished
===============================================================
3.2. ファイル探索
特定のファイル拡張子を持つファイルを探索する場合:
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -x php,txt,html
このコマンドは、.php、.txt、.html拡張子を持つファイルを探索します。
出力例(一部):
/index.html (Status: 200) [Size: 1024]
/login.php (Status: 200) [Size: 2048]
/config.php (Status: 403) [Size: 199]
/readme.txt (Status: 200) [Size: 512]
/backup.zip (Status: 200) [Size: 2097152]
/admin.php (Status: 302) [Size: 0] [--> https://example.com/login.php]
3.3. DNS探索モード
サブドメインを探索する場合:
gobuster dns -d example.com -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
このコマンドは、example.comのサブドメインを探索します。
出力例:
===============================================================
Gobuster v3.4.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Domain: example.com
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
[+] Timeout: 1s
===============================================================
2025/10/01 15:35:10 Starting gobuster in DNS enumeration mode
===============================================================
Found: mail.example.com
Found: www.example.com
Found: blog.example.com
Found: dev.example.com
Found: admin.example.com
Found: api.example.com
Found: staging.example.com
===============================================================
2025/10/01 15:37:22 Finished
===============================================================
3.4. VHOST探索モード
Virtual Hostを探索する場合:
gobuster vhost -u https://example.com -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
このコマンドは、example.comのバーチャルホストを探索します。これはDNS探索とは異なり、実際にHTTPリクエストを送信して応答を分析します。
4. 高度な使用方法
4.1. フィルタリングオプション
特定のステータスコードのみを表示する場合:
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -s 200,301,302
このコマンドは、ステータスコード200(OK)、301(永続的リダイレクト)、302(一時的リダイレクト)の結果のみを表示します。
特定のステータスコードを除外する場合:
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -b 404,403
このコマンドは、ステータスコード404(Not Found)と403(Forbidden)の結果を除外します。
特定のサイズの応答を除外する場合:
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt --exclude-length 0
このコマンドは、応答サイズが0バイトの結果を除外します。
4.2. スレッド設定
スレッド数を増やして高速化する場合:
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -t 50
このコマンドは、50スレッドを使用して探索を実行します(デフォルトは10)。
注意:スレッド数を増やすとより高速になりますが、対象サーバーの負荷が増加し、また接続エラーが発生する可能性が高まります。
4.3. レート制限と遅延
リクエスト間に遅延を追加する場合:
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt --delay 100ms
このコマンドは、各リクエスト間に100ミリ秒の遅延を追加します。
ワイルドカードレスポンスを処理する場合:
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt --wildcard
このオプションは、ワイルドカードレスポンス(すべてのリクエストに同じ応答を返すサーバー)を処理します。
4.4. 認証とプロキシ
Basic認証を使用する場合:
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -U admin -P password
このコマンドは、Basic認証でユーザー名「admin」とパスワード「password」を使用してスキャンを実行します。
Cookieを使用する場合:
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -c "PHPSESSID=1234567890abcdef"
このコマンドは、指定したCookieを含めてリクエストを送信します。
カスタムヘッダーを追加する場合:
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
このコマンドは、カスタムのAuthorizationヘッダーを追加してリクエストを送信します。
プロキシを使用する場合:
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt --proxy http://127.0.0.1:8080
このコマンドは、指定したプロキシ(例:Burp Suiteなど)を経由してリクエストを送信します。
5. 実践的な活用例
5.1. ウェブアプリケーション評価
Webアプリケーションの隠しコンテンツを包括的に探索するシナリオ:
# ステップ1: 基本的なディレクトリ探索
gobuster dir -u https://target-app.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 50 -o dirs.txt
# ステップ2: 一般的なファイル拡張子を探索
gobuster dir -u https://target-app.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,asp,aspx,jsp,html,txt,pdf,config -t 30 -o files.txt
# ステップ3: 発見したディレクトリに対する再帰的な探索
for dir in $(cat dirs.txt | grep -E '(Status: 301|Status: 200)' | cut -d ' ' -f1); do
gobuster dir -u https://target-app.com$dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 30 -o "$dir.txt"
done
このワークフローでは、まず基本的なディレクトリを探索し、次に一般的なファイル拡張子を持つファイルを探索し、最後に発見したディレクトリに対して再帰的に探索を行います。
5.2. ドメイン列挙
大規模な組織のドメイン構造を探索するシナリオ:
# ステップ1: DNSモードでサブドメインを探索
gobuster dns -d example.com -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-20000.txt -t 100 -o subdomains.txt
# ステップ2: 発見したサブドメインに対するVHOST探索
for subdomain in $(cat subdomains.txt | cut -d ' ' -f2); do
gobuster vhost -u https://$subdomain -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -t 50 -o "vhost-$subdomain.txt"
done
このワークフローでは、まずDNSモードでサブドメインを探索し、次に発見したサブドメインに対してVHOST探索を行います。
5.3. コンテンツディスカバリワークフロー
包括的なコンテンツディスカバリを行うシナリオ:
# ステップ1: 一般的なディレクトリと一般的なファイル拡張子
gobuster dir -u https://target-app.com -w /usr/share/wordlists/dirb/common.txt -t 30 -x php,html,txt,config,bak,old
# ステップ2: ターゲット特化のワードリストを生成
cewl https://target-app.com -m 5 -d 3 --with-numbers > target-words.txt
# ステップ3: 生成したワードリストを使用した探索
gobuster dir -u https://target-app.com -w target-words.txt -t 30 -x php,html,txt,config,bak,old
このワークフローでは、まず一般的なディレクトリとファイルを探索し、次にターゲットサイトの内容から生成したワードリストを使用して探索を行います。これにより、ターゲット特有の命名規則に基づいたファイルやディレクトリを発見できる可能性が高まります。
6. 検出結果の分析と対策
Gobusterによって発見された隠しコンテンツに対する主な対策は以下の通りです:
-
不要なコンテンツの削除:
- 使用されていないファイルやディレクトリの削除
- テストファイル、バックアップファイルの削除
- 開発環境の残骸の除去
- サンプルコードやドキュメントの削除
-
アクセス制御の強化:
- 管理ページに対する適切な認証の実装
- IPベースのアクセス制限
- 多要素認証の導入
- 最小権限の原則の適用
-
セキュアなWebサーバー設定:
- ディレクトリリスティングの無効化
- 適切なファイルパーミッションの設定
- エラーメッセージの最小化
- 不要なHTTPメソッドの無効化
-
Web Application Firewall(WAF)の導入:
- 一般的なスキャンパターンのブロック
- レート制限の実装
- 異常なリクエストの検出と遮断
- 自動化されたツールの特徴的なパターンのブロック
-
定期的なセキュリティテスト:
- Gobusterなどのツールを使用した定期的な自己評価
- セキュリティ設定の継続的な改善
- 新しいコンテンツのデプロイ前のセキュリティチェック
- セキュリティポリシーの見直しと更新
-
監視とログ分析:
- アクセスログの定期的な分析
- 不審なリクエストパターンの検出
- セキュリティアラートの設定
- インシデント対応計画の準備
7. まとめ
Gobusterは、その高速性と使いやすさから、多くのセキュリティ専門家に愛用されているディレクトリ探索ツールです。Go言語で書かれた効率的なマルチスレッド設計により、大規模なワードリストを使用しても短時間でスキャンを完了できます。
特筆すべき点は、様々な探索モード(DIR、DNS、VHOST、FUZZ)と豊富なフィルタリングオプションです。これにより、使用者は特定のニーズに合わせたカスタマイズが可能となり、効率的な探索が実現します。
ディレクトリ探索は、Webアプリケーションセキュリティ評価の初期段階において重要なステップです。隠されたディレクトリやファイルの中には、機密情報やデバッグ機能、管理インターフェースなどが含まれている可能性があり、これらは潜在的なセキュリティリスクとなり得ます。Gobusterを使用することで、こうした隠れたコンテンツを効率的に発見し、適切な対策を講じることができます。
セキュリティエンジニアを目指す方は、Gobusterの使い方を習得することで、ウェブアプリケーションセキュリティ評価のスキルを効果的に向上させることができるでしょう。ただし、このツールの使用は必ず適切な許可を得た上で、教育目的または許可されたセキュリティテストの範囲内でのみ行うことが重要です。
最後に、Gobusterはあくまでもディレクトリ探索ツールであり、完全なウェブアプリケーションセキュリティスキャナーではないことを理解しておく必要があります。包括的なセキュリティ評価には、Gobusterのような探索ツールだけでなく、脆弱性スキャナー、手動のペネトレーションテスト、コードレビューなど、複数のアプローチを組み合わせることが推奨されます。
8. 参考資料
- Gobuster 公式GitHub リポジトリ
- Kali Linux Tools: Gobuster
- OWASP: Web Security Testing Guide
- OWASP: Directory Traversal
- PortSwigger: Directory enumeration
- SecLists: Discovery Wordlists
- HackTricks: Web Enumeration
- IppSec YouTube Channel: Gobuster Tutorials
※本記事の内容は、教育目的および正当なセキュリティテストのためのものです。Gobusterの使用は、自分が所有または正当な許可を得たシステムに限定してください。許可なく他者のシステムに対して使用することは、法律違反となる可能性があります。必ず適切な許可を得た上で実行してください。