
テスト済み環境: Windows、MAC、Linux、Windows Subsystem for Linux(WSL)
このプロジェクトをスポンサーになることで支援してください。以下の素晴らしいスポンサーをご覧ください:
Oxylabs は、195か国以上の国々に展開する1億以上のIPを持つプレミアムプロキシと、すぐに使えるScraper APIを提供しています。特別プロモコードboost35をご利用いただくと、Residential、Mobileプロキシ、Web Unblocker、Scraper APIが35%オフになります。
レスポンスをクロールして隠れたエンドポイントを発見(リクエストを送信するか、ローカルのレスポンスファイルから)
ソース内で見つかったJavaScript変数のリストを作成
ウェブサイトからすべてのソーシャルメディアリンクを抽出し、リンク切れを特定
ワードリストを使用したホストのブルートフォース
URLリストのステータスコード取得 / ホストリストから生存ドメインをフィルタリング
上記の全機能は高速に実行されます。
SourceWolfはrequestsライブラリのSessionモジュールを使用しており、TCP接続を再利用するため非常に高速です。
SourceWolfでは、レスポンスファイルをローカルでクロールするオプションを提供しており、すでにレスポンスのコピーがあるエンドポイントに対して再度リクエストを送信する必要がありません。
最終的なエンドポイントはhttps://example.com/api/adminのように完全な形(ホスト付き)で表示され、/api/adminのようにはなりません。これはホストリストをスキャンする際に便利です。
> python3 sourcewolf.py -h
-l LIST, --list LIST JavaScript URLのリスト
-u URL, --url URL 単一のURL
-t THREADS, --threads THREADS
使用する同時スレッド数(デフォルトは5)
-o OUTPUT_DIR, --output directory-name OUTPUT_DIR
さらに分析するためにURLレスポンステキストをディレクトリに保存
-s STATUS_CODE_FILE, --store-status-code STATUS_CODE_FILE
ステータスコードをファイルに保存
-b BRUTE, --brute BRUTE
FUZZキーワードを使用してURLをブルートフォース(--wordlistも併用必須)
-w WORDLIST, --wordlist WORDLIST
ブルートフォース用のワードリスト
-v, --verbose 冗長モード(送信されるすべてのリクエストを表示)
-c CRAWL_OUTPUT, --crawl-output CRAWL_OUTPUT
クロール出力を保存するディレクトリ
-d DELAY, --delay DELAY
リクエストの遅延(秒)
--timeout TIMEOUT 接続タイムアウトまでの最大待機時間(秒)
--headers HEADERS カスタムヘッダーを追加({'Token': 'YOUR-TOKEN-HERE'}の形式で指定)→ 辞書形式
--cookies COOKIES クッキーを追加({'Cookie': 'YOUR-COOKIE-HERE'}の形式で指定)→ 辞書形式
--only-success 2XXレスポンスのみ表示
--local LOCAL クロール対象のローカルレスポンスファイルが格納されたディレクトリ
--no-colors 出力から色を除去
--update-info 最新バージョンを確認し、必要に応じて更新
完全な使用例:
python3 sourcewolf.py -l domains -o output/ -c crawl_output
domainsはクロール対象のURLリストで、以下の形式です:
https://example.com/
https://exisiting.example.com/
https://exisiting.example.com/dashboard
https://example.com/hitme
output/は、入力ファイルのレスポンステキストファイルを保存するディレクトリです。
保存形式は、output/2XX、output/3XX、output/4XX、output/5XX です。
output/2XXには2XXステータスコードのレスポンスが保存され、以降も同様です。
crawl_outputは-cフラグで指定し、SourceWolfがoutput/ディレクトリ内のHTTPレスポンスファイルをクロールして生成した出力を保存するディレクトリです(現時点ではエンドポイントのみ)。
crawl_output/ディレクトリには以下が含まれます:
endpoints - 見つかったすべてのエンドポイント
jsvars - すべてのJavaScript変数
今後、モジュールや機能が追加されるにつれ、ディレクトリ内のファイルは増えていきます。
(または)
単一のURLの場合:
python3 sourcewolf.py -u example.com/api/endpoint -o output/ -c crawl_output
-lフラグが-uに置き換わるだけで、他はすべて同じです。
python3 sourcewolf.py -b https://hackerone.com/FUZZ -w /path/to/wordlist -s status
-wフラグは省略可能です。指定しない場合、デフォルトのワードリスト(6124語)が使用されます。
SourceWolfは、-bの値にあるFUZZキーワードをワードリストの単語で置き換え、リクエストを送信します。これにより、GETパラメータの値もブルートフォース可能です。
-sは出力をstatusというファイルに保存します。
出力は「レスポンスクロールモード」と似ているため、スクリーンショットは省略します。
python3 sourcewolf -l domains -s live
domainsファイルには、サブドメイン、エンドポイント、JSファイルなど何でも含めることができます。
-sフラグはレスポンスをliveファイルに書き込みます。
ブルートフォースモードとプロービングモードでは、デフォルトで404以外のすべてのステータスコードが表示されます。
--only-successフラグを使用して、2XXレスポンスのみ表示するように変更できます。
SourceWolfはマルチスレッドも活用しています。
すべてのモードのデフォルトスレッド数は5です。-tフラグでスレッド数を増やすことができます。
上記3つのモードに加えて、ローカルでクロールするオプションもあります。その場合は、レスポンスファイルをローカルに保存し、SourceWolf互換の命名規則に従っている必要があります。
すべてのレスポンスをresponses/などのディレクトリに保存します。
python3 sourcewolf.py --local responses/
これにより、ローカルディレクトリをクロールして結果を取得します。
サブドメイン列挙
|
|
SourceWolf
|
|
生存サブドメインのフィルタリング
|
|
レスポンスの保存と隠れたエンドポイントの発見 / ディレクトリブルートフォース
この時点で、スキャン実行時にWebページからリアルタイムで抽出された、ターゲットに関する多数のエンドポイントが得られます。
SourceWolfの核となる目的は、隠れたエンドポイントの発見だけでなく、手動でレスポンスファイルを検索して行うすべてのタスクを自動化するという、より広いビジョンに基づいています。
その一例として、ソース内で漏洩したキーを手動で検索する作業が挙げられます。
この核となる目的は、ファイルがモジュール方式で記述されている理由を説明しています。
リポジトリを再度クローンしなくても、ターミナルから直接SourceWolfを更新できます。
SourceWolfは実行時に毎回更新をチェックし、更新がある場合はその概要とともにユーザーに通知します。
以下のコマンドを実行:
python3 sourcewolf.py --update-info
で更新の詳細情報を取得できます。
更新がある場合は、update.pyファイルをSourceWolfディレクトリの外に移動し、以下を実行する必要があります。
警告: これにより、SourceWolfディレクトリ内のすべてのファイルとフォルダが削除されます。
python3 update.py /path/to/SourceWolf
これにより、ディレクトリが削除され、リポジトリが再度クローンされます。
現在、SourceWolfはソースからの隠れたエンドポイントの発見のみをサポートしていますが、今後他の機能も統合される予定です。
どのような貢献が可能ですか?
主に、SourceWolfへのモジュール統合に関する貢献が必要ですが、たとえタイポの修正でもPRを送ってください。
プルリクエストを送る前に、最新バージョンを使用していることを確認してください。
> 新機能を追加する場合は、まずIssueを開いて、その機能が必要かどうかを確認してください。不要な機能を作成するために時間を無駄にしないでください。
発生した問題は自由に報告してください。
問題を報告する際は、オペレーティングシステム、実行したコマンド、可能であればスクリーンショットを含めてください。そうすることで、問題の再現が容易になります。
Issueを開くことで、新機能のリクエストや既存機能の改善も行えます。
ローカルでファイルをクロールするには、特定の命名規則に従う必要があります。これらの規則は、SourceWolfがホスト名を直接識別し、相対パスを含むすべてのエンドポイントを解析するために設けられています。
URL https://example.com/api/ を例に考えます。
example.com/apiexample.com@api最終的なファイル名は [email protected] のようになります。
ロゴデザイン: Murugan artworks
SourceWolfはMITライセンスを使用しています。