【SRC漏洞挖掘系列】第10期:GraphQL & API 安全 —— 现代 API 的“裸奔”时代

上期回顾 :我们用 XXE 读了系统文件,用反序列化给程序"下毒"。本期换个口味,聊聊现代开发最爱用的 GraphQL ​ 和那些年我们挖过的 API 坑

如果你还在用传统 Web 漏洞的思路去测 API,那你就像是在用算盘算火箭轨道------完全不对路。🚀


一、GraphQL:一把双刃剑

GraphQL 是一种用于 API 的查询语言。它的优点是:前端要什么数据,后端给什么数据(按需分配)。

缺点也很明显:开发者经常忘了鉴权

1. 内省查询(Introspection):把后端的底裤扒光

GraphQL 默认开启"内省"功能。这意味着你可以像问数据库一样,问服务器:"你有哪些表?有哪些字段?"

Payload

graphql

复制代码
{
  __schema {
    types {
      name
      fields {
        name
        type {
          name
        }
      }
    }
  }
}

结果

服务器会返回一份完整的 API 文档

你看到了 UserOrderAdmin等对象,以及它们的字段(如 passwordHash, email)。

SRC 提示 :如果生产环境没关内省,直接给 中危

2. 批量查询(Batch Query):DoS 攻击

GraphQL 允许在一个请求里查 N 个数据。

攻击思路

graphql

复制代码
query {
  user1: user(id: 1) { name }
  user2: user(id: 2) { name }
  # ... 重复一万次
  user10000: user(id: 10000) { name }
}

结果:服务器 CPU 直接飙满,拒绝服务(DoS)。

3. 越权查询(IDOR in GraphQL)

这是最致命的。

请求

graphql

复制代码
{
  user(id: "1001") {
    username
    email
    isAdmin
    passwordHash  # 甚至能查密码哈希!
  }
}

操作 :把 id1001改成 1000(管理员)。

结果:直接拖出管理员账号信息。


二、RESTful API 的经典"翻车"现场

除了 GraphQL,传统的 API 也有一堆坑。

1. 参数污染(HPP)

场景 :API 接收 ?id=1

攻击?id=1&id=2&id=3

后端解析

  • PHP/Apache:只取最后一个 id=3

  • Node.js:得到数组 [1,2,3]

    利用:绕过 WAF 对某些参数的过滤,或者导致逻辑混乱。

2. JWT 认证绕过

JWT (JSON Web Token) 常用于 API 认证。

漏洞点

  • None 算法 :把 alg改成 none,去掉签名,服务器可能照单全收。

  • 弱密钥 :用工具 jwt_tool爆破密钥。如果密钥是 secret,一秒破解。

    Payload

json

复制代码
{
  "alg": "none",
  "typ": "JWT"
}

结果:伪造管理员 Token,接管账号。

3. 过度数据暴露(Over-exposure)

场景:前端只显示昵称,但 API 返回了全部信息。

请求GET /api/user/1

响应

json

复制代码
{
  "nickname": "老王",
  "phone": "13800138000",
  "idCard": "110101199003071234", // 敏感信息泄露
  "isAdmin": false
}

SRC 评级高危。虽然前端没显示,但数据已经泄露了。


三、实战案例:API 组合拳

  1. 发现/graphql端点开启内省。

  2. 枚举 :找到 query { users { id, email } }

  3. 越权 :尝试查询 users(id: "admin")成功。

  4. 接管 :如果 API 有修改密码接口 POST /api/user/resetPassword,结合越权,直接改掉管理员密码。


四、SRC 报告撰写指南

漏洞描述 厂商看法 评级
GraphQL 开启内省 知道了,关掉 低危/中危
API 返回明文密码 严重事故 高危
GraphQL 越权拖库 灾难级 **严重 (Critical)**​

报告话术

"由于 GraphQL 接口未对查询权限进行校验,攻击者可构造恶意查询语句,批量导出全站用户的敏感信息(手机号、邮箱、密码哈希),导致大规模数据泄露。"


五、互动与思考

💬 互动话题

大家挖 API 漏洞时,最喜欢用什么工具?

PostmanBurp Suite ​ 的 Autorize ​ 插件,还是专门挖 GraphQL 的 InQL

有没有遇到过那种"API 返回了整个数据库"的爽文时刻?😂


⚠️ 法律红线警示

  1. 严禁 利用 GraphQL 内省查询进行大规模数据爬取拖库

  2. 严禁尝试爆破 JWT 密钥后,伪造他人身份登录系统。

  3. 严禁 利用批量查询进行真实的 DoS/DDoS​ 攻击,测试时请将数量限制在 10-20 次以内。

  4. 测试原则

    • 仅在自己的测试账号下验证数据过度暴露。

    • 不要尝试修改他人的数据。

    • 发现越权漏洞,验证 1-2 个账号即可停止。

      **API 是数据的通道,请只做通道的检查者,不要做数据的搬运工。**​ 🛡️

下一期,我们将进入 "移动端安全(Android/iOS)"------ APP 里的那些猫腻"。想知道怎么绕过 SSL Pinning 抓 HTTPS 包吗?敬请期待!📱

相关推荐
ZhengEnCi2 小时前
01-如何监听接口调用情况?
java·spring boot·后端
云栖梦泽在2 小时前
AI安全实战:AI系统应急响应的实战演练案例
大数据·人工智能·安全
Chockmans3 小时前
春秋云境CVE-2020-21652(极速版)
计算机网络·安全·web安全·网络安全·安全威胁分析·春秋云境·cve-2020-21652
小马爱打代码3 小时前
Spring源码 第九篇:Spring 5 源码深度拆解 - Spring 事件驱动模型
java·后端·spring
ForgeAI码匠4 小时前
ForgeAdmin|Spring Boot 3 后台框架的自动配置设计:少写配置,多做组合
java·spring boot·后端
IT_陈寒4 小时前
为什么 Java 的 Optional 让我调试到深夜?
前端·人工智能·后端
Raink老师4 小时前
【AI面试临阵磨枪-76】社交 AI:内容生成、审核、智能回复、多模态理解、安全治理
人工智能·安全·面试
用户8356290780515 小时前
用 Python 实现 Excel 散点图绘制与定制
后端·python
怪兽陪你看日出B5 小时前
一文彻底搞懂本地缓存之王-Caffeine
后端