効率的な偵察(リコnaissance)のための強力なツール
gospiderとは? 🤔
gospiderは、Go言語で書かれた高速なウェブクローラーです。主な目的は、指定されたウェブサイトから関連するURL、JavaScriptファイル、サブドメイン、APIエンドポイント、隠されたパラメータなどを効率的に発見することです。セキュリティテストの初期段階である偵察(リコnaissance)フェーズにおいて、攻撃対象領域(Attack Surface)を把握するために非常に役立ちます。
従来のクローラーと比較して、gospiderは速度と網羅性に重点を置いて設計されています。JavaScriptファイル内やサイトマップ、robots.txtなどを解析し、通常のブラウジングでは見つけにくいリソースを発見する能力を持っています。これにより、潜在的な脆弱性が存在する可能性のあるエンドポイントや、機密情報が含まれているかもしれないファイルなどを特定する手助けとなります。
gospiderの主な特徴 ✨
- 高速なクローリング: Go言語の並行処理能力を活かし、多数のURLを同時に効率よく処理します。
- 広範な情報収集:
- robots.txt の解析
- サイトマップ (sitemap.xml) の解析
- HTML内のリンク (
<a>
,<link>
タグなど) の抽出 - JavaScriptファイル内のURLやエンドポイントの抽出
- Wayback Machine (Archive.org), Common Crawl, VirusTotal などの外部ソースからのURL収集
- サブドメインの検出
- フォーム (
<form>
タグ) の発見 - コメント内の潜在的な情報抽出
- カスタマイズ可能なオプション: クローリングの深さ、並行処理数、ユーザーエージェント、ヘッダー、ブラックリスト/ホワイトリストなどを細かく設定できます。
- 多様な出力形式: 発見したURLや情報を標準出力に表示するほか、ファイルに保存することも可能です。
- 他ツールとの連携: 発見したURLリストを、他のセキュリティスキャナー(例: Nuclei, ffuf)やディレクトリ探索ツールへの入力として容易に利用できます。
- クロスプラットフォーム: Go言語で書かれているため、Linux, macOS, Windowsなど、主要なOSで動作します。
インストール方法 💻
gospiderのインストールは比較的簡単です。Go言語の環境がセットアップされていることが前提となります。
Go言語環境がある場合
以下のコマンドを実行することで、go install
コマンドを使用して gospider をインストールできます。これにより、$GOPATH/bin
ディレクトリ(または $HOME/go/bin
)に実行ファイルが配置されます。パスが通っていれば、どのディレクトリからでも gospider
コマンドを実行できるようになります。
go install github.com/jaeles-project/gospider@latest
インストール後、正しくインストールされたかを確認します。
gospider -h
ヘルプメッセージが表示されれば、インストールは成功です。
リリース済みバイナリを使用する場合
Go言語の環境がない場合や、手軽に試したい場合は、GitHubのリリースセクションから、お使いのOSに対応したコンパイル済みのバイナリファイルをダウンロードすることも可能です。ダウンロードしたファイルを解凍し、実行権限を与えてパスの通ったディレクトリに配置するか、フルパスで実行します。
例えば、Linux (amd64) の場合:
# リリースページから適切なファイルをダウンロード (例: gospider_vX.Y.Z_linux_amd64.tar.gz)
wget https://github.com/jaeles-project/gospider/releases/download/vX.Y.Z/gospider_vX.Y.Z_linux_amd64.tar.gz
tar xzvf gospider_vX.Y.Z_linux_amd64.tar.gz
sudo mv gospider /usr/local/bin/
gospider -h
基本的な使い方 🚀
gospiderの最も基本的な使い方は、-s
(または --site
) オプションで対象のURLを指定することです。
gospider -s "https://example.com"
これにより、https://example.com
を起点としてクローリングが開始され、発見されたURLや情報が標準出力にリアルタイムで表示されます。
複数のサイトを一度にスキャンしたい場合は、-s
オプションを複数回指定するか、URLリストをファイルに保存して -S
(または --sites
) オプションで読み込ませます。
複数サイトの指定:
gospider -s "https://site1.com" -s "https://site2.org"
ファイルからサイトリストを読み込む:
まず、targets.txt
のようなファイルにURLを一行ずつ記述します。
# targets.txt の内容
https://target1.com
http://target2.net
https://sub.target3.org
次に、-S
オプションでファイルを指定します。
gospider -S targets.txt
結果をファイルに保存する
発見したURLリストを後で利用するためにファイルに保存したい場合は、-o
(または --output
) オプションで出力先のディレクトリを指定します。
gospider -s "https://example.com" -o output_directory
このコマンドを実行すると、output_directory
という名前のディレクトリが作成され、その中に example.com
という名前のファイル(ホスト名に基づいたファイル名)が生成され、発見されたURLが書き込まれます。
主要なオプション解説 ⚙️
gospiderには多くのオプションがあり、クローリングの挙動を細かく制御できます。以下に主要なオプションとその説明をまとめます。
オプション (短い形式) | オプション (長い形式) | 説明 | 例 |
---|---|---|---|
-s |
--site |
クローリング対象の単一サイトURLを指定します。複数指定可能です。 | -s "https://example.com" |
-S |
--sites |
クローリング対象サイトのURLリストが書かれたファイルを指定します。 | -S targets.txt |
-o |
--output |
結果を出力するディレクトリを指定します。 | -o ./gospider_results |
-c |
--concurrent |
同時に実行するクローリング処理の最大数(ゴルーチン数)を指定します。デフォルトは50です。 | -c 100 |
-d |
--depth |
クローリングの深さを指定します。起点URLからのリンクを何階層まで辿るかを決めます。デフォルトは1です。 | -d 3 |
-t |
--threads |
各サイトに対して同時に実行するスレッド数を指定します。(古いバージョンのオプションかもしれません。-c の方が一般的です) |
-t 10 |
-u |
--user-agent |
HTTPリクエストで使用するUser-Agentを指定します。web (一般的なブラウザ), mobi (モバイルブラウザ), random (ランダム) から選択するか、カスタム文字列を指定できます。デフォルトは web です。 |
-u "MyCustomSpider/1.0" または -u mobi |
-H |
--header |
カスタムHTTPヘッダーを追加します。複数指定可能です。認証が必要なサイトなどで使用します。 | -H "Authorization: Bearer token" -H "X-Custom: value" |
--timeout |
HTTPリクエストのタイムアウト時間を秒単位で指定します。デフォルトは10秒です。 | --timeout 30 |
|
--delay |
各リクエスト間の遅延時間をミリ秒単位で指定します。サーバーへの負荷を軽減したい場合に使用します。 | --delay 500 (0.5秒) |
|
--robots |
robots.txt の Disallow ルールを尊重します。デフォルトでは無視されます(つまり、Disallowされているパスもクロールします)。 | --robots |
|
--other-source |
Wayback Machine (Archive.org) などの外部ソースからもURLを収集します。より網羅的な探索が可能になりますが、時間がかかる場合があります。 | --other-source |
|
--include-subs |
対象サイトのサブドメインもクロールの範囲に含めます。 | --include-subs |
|
--blacklist |
指定した正規表現にマッチするURLを除外します。特定の拡張子(例: .css, .jpg)やパス(例: /logout)を除外したい場合に使用します。 | --blacklist "\\.(css|jpg|png)$" |
|
--whitelist |
指定した正規表現にマッチするURLのみをクロール対象とします。 | --whitelist "/admin" |
|
--proxy |
HTTP/HTTPSリクエストに使用するプロキシサーバーを指定します (例: http://127.0.0.1:8080 )。 |
--proxy http://127.0.0.1:8080 |
|
-v |
--verbose |
詳細なログ(デバッグ情報など)を出力します。 | -v |
--json |
出力をJSON形式にします。他のツールと連携する際に便利です。 | --json |
実践的なユースケース 🎯
gospiderは様々なシナリオで活用できます。
1. 攻撃対象領域(Attack Surface)のマッピング
セキュリティテストの最初のステップとして、対象ウェブサイトの全体像を把握することは非常に重要です。gospider を使用して、サイト内の全URL、サブドメイン、JavaScriptファイル、APIエンドポイントをリストアップします。
# example.com とそのサブドメインをクロールし、外部ソースも利用して結果を保存
gospider -s "https://example.com" --include-subs --other-source -o results -c 50 -d 3
results/example.com
ファイルに出力されたURLリストを確認することで、どのようなページや機能が存在するかを把握できます。
2. 隠れたエンドポイントやパラメータの発見
通常のブラウジングではアクセスしないような管理画面のパス (例: /admin
, /dashboard
) や、開発中に残されたテスト用エンドポイント、APIドキュメント (例: /api-docs
, /swagger.json
) などが見つかることがあります。gospiderはJavaScriptファイル内も解析するため、フロントエンドで動的に呼び出されているAPIエンドポイントなども発見できる可能性があります。
# JavaScript内のリンクやAPIエンドポイントを重点的に探す(デフォルトで有効)
gospider -s "https://api.example.com" -o api_results
3. 他のツールへの入力データ生成
gospiderで収集したURLリストは、他のセキュリティツールへの入力として非常に有用です。
Nuclei (脆弱性スキャナー) との連携:
# 1. gospiderでURLリストを生成
gospider -s "https://vulnerable.site" -o gospider_out -c 20
# 2. 生成されたURLリストをNucleiに渡してスキャン
nuclei -l gospider_out/vulnerable.site -o nuclei_report.txt
ffuf (ファジングツール) との連携:
発見したURLをベースに、さらに隠れたファイルやディレクトリを探査します。
# 1. gospiderでベースURLリストを生成 (例: gospider_out/target.com)
# 2. ffufでディレクトリ/ファイルファジング (gospiderの結果を元に)
# (注意: この例は概念的なもので、実際のコマンドは調整が必要です)
cat gospider_out/target.com | while read url; do ffuf -u "${url}/FUZZ" -w /path/to/wordlist.txt -mc 200,403; done
4. 特定のファイルタイプや情報の探索
--blacklist
や --whitelist
オプション、または出力結果を grep
などでフィルタリングすることで、特定の情報を探すことができます。
# robots.txt と sitemap.xml のみを標準出力に表示
gospider -s "https://example.com" | grep -E 'robots\.txt|sitemap\.xml'
# JavaScriptファイルのみを出力 (-o で保存後、grep する方が確実)
gospider -s "https://example.com" -o js_files -c 30
grep '\.js' js_files/example.com > javascript_urls.txt
利用上の注意点とベストプラクティス 💡
- ⚠️ 許可のないサイトへのスキャンは絶対に避ける: gospiderを含むクローラーやスキャナーは、対象サーバーに負荷をかける可能性があります。必ず、自身が管理しているサイト、または明示的に許可を得ているサイトに対してのみ使用してください。無許可のスキャンは法律に抵触する可能性があります。
- サーバー負荷への配慮:
-c
(concurrent) や--delay
オプションを調整し、対象サーバーに過度な負荷をかけないように注意しましょう。特に小規模なサイトや共有サーバーに対しては、低い同時接続数や適切な遅延を設定することが推奨されます。 - スコープ(対象範囲)の確認:
--include-subs
や--blacklist
/--whitelist
オプションを適切に使用し、意図しない範囲までクロールしないように設定を確認しましょう。特に大規模なサイトでは、スコープ外のクロールはリソースの無駄遣いになるだけでなく、問題を引き起こす可能性もあります。 - robots.txt の扱い: デフォルトではgospiderは
robots.txt
を無視します。これは隠れた情報を見つけるためには有効ですが、サイト運営者の意図を尊重する場合は--robots
オプションを使用しましょう。 - 外部ソース利用時の注意:
--other-source
オプションは非常に強力ですが、収集されるURLの量が膨大になることがあります。また、Wayback Machineなどに含まれる古いURLや、現在はアクセスできないURLも含まれるため、結果の精査が必要です。 - 定期的なアップデート: gospiderは活発に開発されています。新しい機能の追加やバグ修正が行われるため、定期的に
go install github.com/jaeles-project/gospider@latest
を実行するか、リリースページを確認して最新版を利用するようにしましょう。 - 結果の確認と分析: gospiderが出力するのはあくまでURLや情報のリストです。発見されたURLが実際にアクセス可能か、どのようなコンテンツが含まれているか、潜在的な脆弱性があるかなどは、手動での確認や他のツールによる詳細な分析が必要です。
まとめ 🎉
gospiderは、ウェブサイトの偵察フェーズにおいて、隠れたURL、サブドメイン、JavaScript内のエンドポイントなどを高速かつ効率的に発見するための強力なツールです。豊富なオプションにより、特定のニーズに合わせてクローリングの挙動をカスタマイズできます。
収集した情報は、攻撃対象領域の理解を深め、さらなる脆弱性診断やペネトレーションテストの精度を高めるために不可欠です。他のツールと連携させることで、その価値はさらに高まります。
ただし、その強力さゆえに、利用には注意が必要です。必ず許可された対象に対してのみ使用し、サーバー負荷にも配慮しながら、倫理的かつ合法的に活用しましょう。
ぜひ gospider を試してみて、あなたのセキュリティテストや情報収集活動に役立ててください! 👍
コメント