Shikata Ga Nai

Private? There is no such things.

APIエンドポイントの特定 – 効果的な情報収集の方法

Hello there, ('ω')ノ

APIのエンドポイントを特定することは、APIテストの重要なステップです。APIドキュメントが存在する場合でも、実際のアプリケーションを調査することで、ドキュメントに記載されていないエンドポイントや、仕様と異なる挙動を持つエンドポイントを発見できる可能性があります。


1. APIエンドポイントを調査する理由

  • ドキュメントが不完全または古くなっている可能性がある
  • 非公開APIや内部APIが存在する可能性がある
  • 開発者が意図していないエンドポイントが見つかる可能性がある

2. アプリケーションを解析してAPIエンドポイントを特定する方法

(1) Burp Scannerでアプリケーションをクロールする

  • Burp Scanner を使用して、アプリケーション全体をクロール(自動探索)する。
  • 検出されたAPIエンドポイントを手動で確認し、攻撃対象を特定する。

(2) URL構造からAPIエンドポイントを推測する

  • 「/api/」のようなパターンを探す
    /api/users /api/orders /api/v1/products
  • バージョン番号を含むエンドポイント(例: /v1/, /v2/)をチェック
  • 管理者向けエンドポイント(例: /admin/api/)を特定

(3) JavaScriptファイルを解析する

アプリケーションがAPIを利用する場合、JavaScriptファイル内にエンドポイントの情報が含まれていることがあります。

JavaScriptファイルの調査方法
  • Burp SuiteのProxy > HTTP historyでJSファイルを探す
  • Burpの機能を使ってJavaScriptを手動解析する
  • JS Link Finder BAppを使用してAPIエンドポイントを自動抽出する
JavaScript内でAPIエンドポイントを検索する方法
  • fetch("https://example.com/api/")
  • xhr.open("GET", "/api/products")
  • baseURL: "https://api.example.com/v1/"

JavaScript内にハードコードされたAPIエンドポイントを見つけることで、通常のブラウザ操作では発見できないAPIを特定できる可能性があります。


3. APIエンドポイント調査のコツ

エラーメッセージを活用する
- 無効なリクエストを送信して、APIのエラーメッセージからエンドポイントの構造を推測する。

robots.txtやsitemap.xmlを確認する
- robots.txt にAPIエンドポイントが記載されていることがある。
- sitemap.xml にAPIのパスが含まれている可能性がある。

ディレクトリブルートフォースを試す
- ffufdirb を使用し、一般的なAPIパスの総当たりを行う。

クライアントサイドのコードを解析する
- Webアプリのフロントエンドコードを調査し、APIリクエストの発生源を特定する。


まとめ

APIエンドポイントを特定するためには、ドキュメントだけでなく、アプリケーションを実際に操作し、Burp SuiteやJavaScript解析を活用することが重要です。隠れたエンドポイントや未公開APIを発見することで、新たな攻撃ベクターを見つけることができます。

Best regards, (^^ゞ