实验:私有 GraphQL 字段的意外泄露
发布: (2026年1月14日 GMT+8 12:26)
2 min read
原文: Dev.to
Source: Dev.to
实验概述
本实验的用户管理功能由 GraphQL 端点提供。访问控制漏洞导致 API 泄露私有凭证字段。目标是使用管理员账户登录并删除用户名 carlos。
实验链接:
访问 GraphQL 端点
- 打开 My account,尝试使用任意凭证登录。
- 登录请求是一个指向
/graphql的 POST,其中包含带有username和password的 GraphQL mutation。 - 该 mutation 未能通过身份验证,但请求仍然到达 GraphQL 服务器。
自省
服务器启用了自省功能,能够发现完整的模式(schema)。
- 在代理(如 Burp Suite)中拦截登录 mutation。
- 将拦截的请求发送到 Repeater。
- 在请求体中右键 → GraphQL → Set introspection query。
- 发送请求。响应会返回完整的 schema。
提示: 使用 InQL 浏览器扩展可以更方便地查看 schema。
利用漏洞
getUser 查询包含敏感字段(username、password)。构造查询以获取这些字段:
query {
getUser(id: 1) {
username
password
}
}
将此查询发送到 /graphql 端点(例如通过 Repeater 或 GraphQL 客户端)。响应会显示管理员的用户名和密码。
解决方案
- 使用泄露的凭证登录为管理员。
- 删除用户名为 carlos 的用户。
完成后实验即标记为已完成。