Webセキュリティ診断の第一歩、コンテンツスキャンツールdirbをマスターしよう!
dirbとは? 🤔
dirb (Directory Buster) は、Webサーバー上に存在する隠されたディレクトリやファイルを発見するためのWebコンテンツスキャナーです。Webサイトを閲覧しているだけでは見つけられない、管理者用ページ、設定ファイル、バックアップファイルなど、一般に公開されていないリソースを探し出すことを目的としています。
dirbは、指定されたワードリスト(辞書ファイル)に含まれる単語を元に、URLを生成し、実際にアクセスを試みることで、リソースの存在を確認します。これは「辞書攻撃」や「ブルートフォース(総当たり攻撃)」の一種と考えることができます。
ペネトレーションテスト(侵入テスト)やWebアプリケーションの脆弱性診断において、攻撃対象領域(アタックサーフェス)を特定するための重要なツールの一つです。隠されたリソースを発見することで、設定ミスや意図しない情報漏洩などのセキュリティリスクを発見する手がかりを得ることができます。
⚠️ 注意: dirbは強力なツールですが、その性質上、対象サーバーに大量のリクエストを送信します。必ず許可された環境・システムに対してのみ使用してください。許可なく他者のWebサイトに対してdirbを使用することは、不正アクセス行為とみなされ、法的な問題に発展する可能性があります。
dirbのインストール 💻
多くのペネトレーションテスト用Linuxディストリビューション、特にKali Linuxには、dirbがデフォルトでインストールされています。Kali Linuxを使用している場合は、特別なインストール作業は不要なことが多いです。
もし、お使いのDebian/Ubuntu系のLinuxディストリビューションにdirbがインストールされていない場合は、以下のコマンドでインストールできます。
sudo apt-get update
sudo apt-get install dirb
インストールが完了したか、または既にインストールされているかを確認するには、ターミナルで以下のコマンドを実行します。バージョン情報と簡単なヘルプが表示されればOKです。
dirb
基本的な使い方 🚀
dirbの最も基本的な使い方は、スキャン対象のURLを指定するだけです。
dirb <対象URL>
例えば、http://example.com
というサイトをスキャンする場合は、以下のように実行します。
dirb http://example.com
これを実行すると、dirbは内蔵されているデフォルトのワードリスト (common.txt
など、約4000〜5000語を含むものが多い) を使用して、http://example.com/admin
, http://example.com/login
, http://example.com/test
のようなURLへのアクセスを試みます。
スキャンが開始されると、以下のような情報がターミナルに出力されます。
==> SCANNING: http://example.com/
: スキャン対象のURL+ http://example.com/admin/ (CODE:200|SIZE:1234)
: 発見されたディレクトリやファイル。+
マークが目印です。CODE
はHTTPステータスコード (200は成功)、SIZE
はレスポンスのサイズを示します。==> Entering directory: http://example.com/images/
: デフォルトでは、発見されたディレクトリに対して再帰的にスキャンが行われます。
HTTPステータスコードは重要です。
- 200 OK: リソースが存在し、アクセス可能です。最も注目すべき結果です。
- 3xx (リダイレクト): 別のURLに転送されます。転送先も確認する価値がある場合があります。
- 403 Forbidden: アクセスが禁止されています。存在はしていますが、権限がありません。設定によっては重要な情報を示唆することもあります。
- 404 Not Found: リソースが存在しません。dirbは通常これを無視します (
-v
オプションで表示可能)。 - 5xx (サーバーエラー): サーバー側で問題が発生しています。
主要なオプション ⚙️
dirbにはスキャンをカスタマイズするための様々なオプションがあります。ここではよく使われるものをいくつか紹介します。
オプション | 説明 | 例 |
---|---|---|
<wordlist_file(s)> |
デフォルトの代わりに、使用するワードリストファイルを指定します。複数指定も可能です。 | dirb http://example.com /usr/share/wordlists/dirb/big.txt |
-o <output_file> |
スキャン結果を指定したファイルに保存します。 | dirb http://example.com -o results.txt |
-X <extension> |
ワードリストの各単語に指定した拡張子を追加してスキャンします。カンマ区切りで複数指定可能です。(.php, .txt など) | dirb http://example.com -X .php,.html |
-x <extensions_file> |
拡張子がリストされたファイルを指定し、その拡張子を追加してスキャンします。 | dirb http://example.com -x extensions.lst |
-r |
再帰的なスキャンを行いません。発見したディレクトリの内部はスキャンしません。 | dirb http://example.com -r |
-R |
対話的再帰。ディレクトリが見つかるたびに、そのディレクトリをスキャンするかどうかを尋ねます。 | dirb http://example.com -R |
-w |
警告メッセージ (例: ディレクトリリスト表示が可能など) を無視してスキャンを続行します。デフォルトでは警告が出ると停止することがあります。 | dirb http://example.com -w |
-i |
大文字と小文字を区別しない検索を行います。Webサーバーがケースインセンシティブな場合に有効です。 | dirb http://example.com -i |
-v |
詳細表示モード。「Not Found (404)」の結果も表示します。 | dirb http://example.com -v |
-a <agent_string> |
使用するUser-Agent文字列を指定します。デフォルト以外を偽装したい場合に使います。 | dirb http://example.com -a "MyCustomBrowser/1.0" |
-c <cookie_string> |
HTTPリクエストに含めるCookieを指定します。認証が必要なページのスキャンなどに使います。 | dirb http://example.com -c "sessionid=abcdef12345" |
-H <header_string> |
カスタムHTTPヘッダーを追加します。'Header: Value' の形式で指定します。 |
dirb http://example.com -H 'Authorization: Bearer xyz...' |
-u <username:password> |
Basic認証が必要な場合、ユーザー名とパスワードを指定します。 | dirb http://example.com -u admin:password123 |
-p <proxy_url> |
スキャンに使用するプロキシサーバーを指定します。proxy_ip:port の形式です。 |
dirb http://example.com -p 127.0.0.1:8080 |
-N <nf_code> |
“Not Found” とみなすHTTPステータスコードを指定します。標準の404以外を無視したい場合に用います。 | dirb http://example.com -N 403 |
-f |
特殊なケースで「Not Found」ページを検出するための微調整を行います。 | dirb http://example.com -f |
-t |
ディレクトリURLの末尾に / を強制的に付与しません。 |
dirb http://example.com -t |
-S |
サイレントモード。バナー表示を抑制します。 | dirb http://example.com -S |
-z <milisec> |
リクエスト間の遅延時間(ミリ秒)を設定します。サーバーへの負荷を軽減したい場合に使用します。 | dirb http://example.com -z 100 |
ワードリストについて 📚
dirbのスキャン精度は、使用するワードリストの質に大きく依存します。Kali Linuxには /usr/share/wordlists/dirb/
ディレクトリ以下にいくつかのワードリストが標準で含まれています。
common.txt
: 一般的によく使われる基本的なリスト。(デフォルト)big.txt
: common.txtよりも多くの単語を含む大きなリスト。vulns/
ディレクトリ: 特定のCMSやテクノロジー(Apache, ColdFusion, Tomcatなど)に関連する脆弱なファイル名やディレクトリ名を集めたリスト。対象の技術が分かっている場合に有効です。
より包括的なスキャンを行いたい場合は、より大規模なワードリストを利用することもできます。有名なワードリストコレクションとしては、以下のものがあります。
- SecLists: GitHub – danielmiessler/SecLists (非常に広範囲なリスト集)
- Assetnote Wordlists: Assetnote Wordlists (比較的新しく、大規模なリスト)
ワードリストは、対象のWebサイトの言語や使用されている技術に合わせて選択・カスタマイズすることが、効率的なスキャンの鍵となります。自分でカスタムワードリストを作成することも可能です。
# 大規模なリストを使用してPHPファイルを検索し、結果を保存
dirb http://target-site.com /usr/share/wordlists/dirb/big.txt -X .php -o scan_results.log
# Apache特有の脆弱なパスを検索
dirb http://apache-server.com /usr/share/wordlists/dirb/vulns/apache.txt
実践的な例 💪
いくつかのオプションを組み合わせた例を見てみましょう。
例1: 特定の拡張子を探し、結果を保存する
ターゲットサイトで .php
と .bak
という拡張子のファイルを探し、結果を backup_scan.txt
に保存します。
dirb https://vulnerable-site.net -X .php,.bak -o backup_scan.txt
例2: User-Agentを偽装し、プロキシ経由でスキャン
User-AgentをChromeに見せかけ、ローカルのBurp Suiteプロキシ (127.0.0.1:8080
) を経由してスキャンします。
dirb http://internal-app.local -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36" -p 127.0.0.1:8080
例3: カスタムワードリストとCookieを使用
自作のワードリスト my_wordlist.txt
を使い、認証に必要なCookieを設定してスキャンします。
dirb https://members-only.com my_wordlist.txt -c "AUTH_TOKEN=verysecrettoken123"
例4: 再帰せず、特定のステータスコードを無視
再帰検索を無効にし、403 Forbiddenエラーを無視してスキャンします。
dirb http://example.com -r -N 403
結果の解釈と次のステップ 🧐
dirbのスキャン結果が出たら、発見されたディレクトリやファイル(特にステータスコードが 200 OK のもの)を一つずつ確認していくことが重要です。
注目すべき点:
- 管理画面 (例: /admin, /administrator, /login): 不正ログインの試行や、デフォルトパスワードの有無を確認します。
- 設定ファイル (例: /config.php, /settings.ini, /.env): データベースの認証情報やAPIキーなどが含まれていないか確認します。
- バックアップファイル (例: /backup.zip, /site.tar.gz, /index.php.bak): 古いバージョンのコードや機密情報が含まれている可能性があります。
- バージョン管理システムのディレクトリ (例: /.git/, /.svn/): ソースコード全体や過去の変更履歴が漏洩している可能性があります。
- テスト用・デバッグ用ページ (例: /test.php, /debug.asp): 本番環境に残すべきでない情報や機能が含まれていることがあります。
- ディレクトリリスティングが有効なディレクトリ: ディレクトリ内のファイル一覧が見えてしまう状態です。意図しないファイルが公開されている可能性があります。
- APIエンドポイント (例: /api/v1/users): ドキュメント化されていないAPIが見つかることがあります。
発見されたリソースに対しては、ブラウザでアクセスしてみたり、curl
コマンドなどで内容を確認したりします。場合によっては、見つかったパスを起点として、さらに手動での探索や、他の脆弱性スキャンツール(例: Nikto, OWASP ZAP)での分析が必要になることもあります。
倫理的な考慮事項と代替ツール 🙏
繰り返しになりますが、dirbは許可されたシステムに対してのみ使用するべきです。許可なくスキャンを行うことは、対象システムに負荷をかけるだけでなく、法的な問題を引き起こす可能性があります。倫理的なハッキングとペネトレーションテストの範囲内で責任を持って使用してください。
dirbは優れたツールですが、同様の機能を持つ他のツールも存在します。状況に応じて使い分けることも有効です。
- Gobuster: Go言語で書かれており、高速な動作が特徴です。ディレクトリ/ファイル探索の他に、DNSサブドメイン探索などの機能も持ちます。
- ffuf (Fuzz Faster U Fool): Go言語製で非常に高速かつ多機能なWebファジングツールです。柔軟な設定が可能で、ディレクトリ/ファイル探索以外にも様々な用途で利用されます。
- Wfuzz: Python製の多機能なWebファジングツール。ペイロードのエンコードや様々な条件でのフィルタリングなど、高度なカスタマイズが可能です。
- DirBuster: dirbの元になったGUIツール (OWASP)。Javaで動作します。
まとめ ✨
dirbは、Webサーバー上の隠れたコンテンツを発見するための強力で使いやすいツールです。適切なワードリストとオプションを使用することで、Webサイトの潜在的なセキュリティリスクを発見するための重要な情報を得ることができます。
基本的な使い方から、オプションを駆使した応用的なスキャンまで、この記事を参考にdirbをマスターし、Webセキュリティ診断のスキルを高めていきましょう! 💪
ただし、ツールの強力さを理解し、常に倫理的かつ合法的な範囲で使用することを忘れないでください。Happy Hacking! (ethically 😉)
コメント