用途:针对 GraphQL API 开展安全测试。适用信号包括目标暴露 /graphql、/graphiql、/v1/graphql、/api/graphql,请求体含 query、mutation、subscription 或 operationName,响应为 {"data": ..., "errors": [...]} 结构,或需要测绘无 schema 的 API。若目标是 REST/gRPC、可直接读源码(应审解析器)或应用本体,应改用其他技能。
模式恢复:先用标准内省 curl -s https://target/graphql -H 'Content-Type: application/json' -d '{"query":"query{__schema{types{name fields{name args{name type{name}}}}}}"}' | jq .;辅助工具有 graphql-cop -t https://target/graphql、clairvoyance https://target/graphql -o schema.json(无内省也可用)、graphw00f -t https://target/graphql(识别引擎)。内省关闭时可用字段建议泄漏恢复,如查询 userr 会提示 Did you mean "user"。其他来源包括客户端 bundle、误暴露的 .graphql 文件、持久化查询清单、公开的 Apollo Studio。不同引擎在批量、建议、深度限制与错误详细度上默认值不同。
主要能力:按字段与解析器而非端点测试授权,涵盖对象级越权、字段级越权、通过嵌套边遍历到受保护对象、直接调用 mutation;遍历关系通常是最高产路径。测试批量与别名滥用,单请求携带多个操作可绕过按请求限流,如多个 a1/a2/a3 登录别名及数组批量。测试查询形状型拒绝服务:深度、宽度(别名放大)、字段重复,检查深度限制、复杂度限制、超时、分页节点上限与 N+1 行为,用小型有界查询证明响应时间梯度而非真实打垮服务。测试解析器注入,包括 SQL/NoSQL、Hasura 式过滤滥用与路径遍历。其他检查:经 GET 或表单编码的 CSRF、生产环境内省、冗余错误、WebSocket 订阅授权、持久化查询回退、multipart 文件上传。
限制:不要在生产上做拒绝服务,须先明确授权并以最小化方式证明;类型约束只限制形状不限制内容;内省关闭不等于 schema 受保护;限流在 HTTP 层对批量与别名无效。ATT&CK 覆盖 T1190。