Shikata Ga Nai

Private? There is no such things.

GraphQLエンドポイントの見つけ方と検出テクニック

Hello there, ('ω')ノ

🔍 GraphQLエンドポイントとは?

GraphQLはすべてのクエリを1つのエンドポイント(URL)に集約する仕組みになっています。そのため、このエンドポイントを特定できれば、すべてのデータ操作の入り口を発見したことになります。


🛠️ エンドポイント検出のテクニック

✅ ユニバーサルクエリを使った検出

以下のGraphQLクエリを送信します:

query { __typename }

もし対象がGraphQLサーバーであれば、次のようなレスポンスが返ってきます

{"data": {"__typename": "query"}}

この__typenameはすべてのGraphQLエンドポイントに存在する予約語です。


📌 試すべき典型的なURLパス

試すパスの例
/graphql
/api
/api/graphql
/graphql/api
/graphql/graphql
/graphql/v1

これらのパスに対して上記のユニバーサルクエリをPOSTしてみましょう。


📬 リクエストメソッドとContent-Typeに注意

🔄 HTTPメソッドの試行

  • 標準的にはPOSTで送る(推奨)
  • 一部ではGETも受け付ける場合あり

📄 Content-Typeのパターン

  • 一般的:application/json
  • 一部対応:application/x-www-form-urlencoded

CSRF対策が不十分な場合、GETやフォーム形式のPOSTにも応答してしまうことがあります。


🧪 Burp Suiteでの検出

  • Burp Scannerは自動的にGraphQLエンドポイントを探索
  • レスポンスに「GraphQL endpoint found」と表示されれば検出成功
  • Burp ProxyのHTTP historyを確認して、実際にどのURLにGraphQLリクエストが飛んでいるかを追跡する

🧠 攻略のポイント

  • イントロスペクション機能が有効かどうかを確認する前に、まずはエンドポイントを探す
  • サイト内でフォーム送信やSPA動作(React/Vueなど)がある部分はGraphQLの可能性が高い
  • GraphQL特有のエラーメッセージ(例:"Must provide query string.")が返るURLは要注目

Best regards, (^^ゞ