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, (^^ゞ