SuperAPI AI 工具集

performing-graphql-security-assessment

安全与审计

查看项目

更新于 10-15 15:22

技能介绍

用途

该技能用于在获得书面授权的渗透测试、漏洞赏金或安全评估中,对目标应用的 GraphQL API 端点进行安全评估。适用场景包括:目标应用使用 GraphQL API;评估通过 GraphQL 通信的单页应用(React、Vue、Angular);评估暴露 GraphQL 端点的移动应用后端;测试使用 GraphQL 网关或联邦的微服务架构;针对 GraphQL API 的漏洞赏金项目。

前置条件

  • 授权:针对目标签署的书面渗透测试协议。
  • Burp Suite Professional:配合 InQL 扩展进行 GraphQL 扫描。
  • GraphQL Voyager:Schema 可视化工具。
  • InQL Scanner:用于 GraphQL 内省与查询生成的 Burp 扩展。
  • Altair GraphQL Client:用于交互式测试的桌面 GraphQL 客户端。
  • clairvoyance:在内省被禁用时进行 GraphQL Schema 枚举。
  • curl:用于手动提交 GraphQL 查询。

主要能力与工作流

第 1 步:发现与指纹识别 GraphQL 端点

定位 GraphQL 端点并确认 GraphQL 正在运行。技能提供常见端点路径的批量探测命令(graphql、graphiql、playground、query、gql、api/graphql、v1/graphql、v2/graphql、graphql/console),通过发送 {"query":"{__typename}"} 并观察 HTTP 状态码判断。同时检查 GraphiQL、Playground 等 GraphQL IDE 是否暴露,通过响应特征指纹识别 GraphQL 引擎(如 Apollo 返回 "Query",Hasura 返回 "query_root"),并检查 WebSocket GraphQL 订阅(ws:// 或 wss://)。

第 2 步:执行 Schema 内省

提取完整 GraphQL Schema 以了解 API 攻击面。技能提供完整内省查询与综合内省查询(IntrospectionQuery)的 curl 示例,可将结果保存为 schema.json。若内省被禁用,使用 clairvoyance 配合字段名字典进行 Schema 枚举,输出 discovered-schema.json。随后可将 schema.json 上传至 GraphQL Voyager 进行可视化。

第 3 步:测试查询与变更的授权

验证访问控制是否在字段和对象级别强制执行。测试项包括:查询全部用户(应要求管理员权限)、访问自身用户上的敏感字段(如 ssn、creditCard、internalNotes)、使用普通用户令牌执行管理员变更(deleteUser、updateUserRole)、以及完全不带认证的查询。

第 4 步:测试注入漏洞

评估 GraphQL 查询中的 SQL 注入、NoSQL 注入及其他注入类型。技能给出在 GraphQL 参数中注入 SQL 的示例、MongoDB NoSQL 注入(如 $ne 过滤器)、通过 GraphQL 的 SSRF(如请求云元数据地址 169.254.169.254)、通过变更的存储型 XSS、以及 GraphQL 指令注入的测试命令。

第 5 步:测试拒绝服务攻击

评估查询复杂度限制与资源消耗控制。测试项包括:深度嵌套攻击(query depth)、宽度攻击(请求大量字段)、批量查询攻击、基于片段的循环引用、以及无界分页(如 first: 1000000)。

第 6 步:测试批量查询导致的认证绕过

利用查询批处理暴力破解凭据或绕过速率限制。技能给出批量登录尝试、批量 OTP 验证尝试、以及基于别名(alias)的批处理(同一操作、不同别名)的示例命令。

关键概念

  • 内省(Introspection):暴露完整 Schema、类型、字段与变更的 GraphQL 特性。
  • 查询深度(Query Depth):GraphQL 查询的嵌套层级;过深查询可导致 DoS。
  • 查询复杂度(Query Complexity):根据解析查询中每个字段成本计算的分值。
  • 批处理(Batching):在单个 HTTP 请求中发送多个查询以并行执行。
  • 别名(Aliases):允许以不同参数多次查询同一字段的 GraphQL 特性。
  • 片段(Fragments):可复用的字段选择,若未校验可导致循环引用。
  • N+1 问题:未优化的解析器对嵌套字段产生指数级数据库查询。
  • 字段级授权(Field-level Authorization):应用于单个字段而非整个类型的访问控制。

工具与系统

  • InQL(Burp 扩展):用于 Burp Suite 的 GraphQL 内省扫描器与查询生成器。
  • GraphQL Voyager:交互式 Schema 可视化工具。
  • Altair GraphQL Client:用于构造和测试查询的桌面 GraphQL IDE。
  • clairvoyance:内省被禁用时的 Schema 枚举工具。
  • graphql-cop:GraphQL 安全审计工具(pip install graphql-cop)。
  • BatchQL:用于绕过速率限制的 GraphQL 批处理攻击工具。

常见场景

  1. 内省暴露内部 Schema:生产环境启用内省,泄露 AdminSettings、InternalUser 等内部类型及 deleteAllUsers 等变更,为后续攻击提供完整路线图。
  2. 缺少字段级授权:User 类型暴露 passwordHash、ssn、internalNotes 字段;前端只查询 name 和 email,但任何已认证用户都可直接请求敏感字段。
  3. 批量登录绕过:GraphQL 端点接受批量查询,在单个 HTTP 请求中发送 1000 次登录变更尝试,绕过仅统计 HTTP 请求数的基于 IP 的速率限制。
  4. 嵌套查询 DoS:社交网络 API 允许无限深度查询 friends { friends { friends { ... } } },10 层嵌套查询导致服务器处理数百万次数据库查询,造成拒绝服务。

输出格式

技能提供结构化报告模板,包含目标、引擎、评估日期、发现摘要表(发现项、严重性、状态),以及按严重性分级的详细发现(位置、载荷、影响)与修复建议。示例建议包括:在生产环境禁用内省、对所有敏感字段实施字段级授权、设置查询深度限制(最大 7-10 层)、设置查询复杂度限制与成本分析、禁用或限制批量查询、从生产环境移除 GraphiQL/Playground、在解析器中对所有数据库查询进行参数化。

限制

该技能仅限在获得书面授权的测试中使用。技能资料未提供具体收费、价格或平台支持信息。