如何用 Lonkero 测试 GraphQL API?9 种攻击手法全解析
如何用 Lonkero 测试 GraphQL API?9 种攻击手法全解析
【免费下载链接】lonkeroLonkero - Wraps around your attack surface. Professional-grade scanner for real penetration testing. Fast. Modular. Rust.项目地址: https://gitcode.com/gh_mirrors/lo/lonkero
GraphQL API 正在成为越来越多 Web 应用的首选接口方案,但它的 introspection、批量查询、别名放大等特性也带来了全新的攻击面。Lonkero是一款用 Rust 编写的专业级 Web 安全扫描器,内置多个 GraphQL 专项扫描模块,能够自动探测端点、提取 Schema 并逐一验证 9 大类攻击手法。本文面向安全测试新手,手把手带你跑通一次完整的 GraphQL API 安全测试。
一、为什么 GraphQL 比 REST 更难测?🤔
REST 接口的攻击模式相对固定(路径 + 参数),而 GraphQL 有几个让传统扫描器"抓瞎"的特点:
- 单一端点:所有操作都走同一个
/graphql,靠查询内容区分业务,路径扫描基本失效 - Schema 即文档:一旦 introspection 开启,攻击者等于拿到整份"接口说明书"
- 查询即代码:深度嵌套、批量、别名都可以在一条请求里放大资源消耗
Lonkero 的 graphql.rs 与 graphql_batching.rs 正是针对这些特性设计的,下面逐一拆解它检测的 9 种攻击手法。
二、快速开始:一条命令测试 GraphQL 安全
先安装并跑起来,具体安装步骤可参考 README.md:
# 方式一:crates.io 直接安装 cargo install lonkero # 方式二:从源码构建 git clone https://gitcode.com/gh_mirrors/lo/lonkero cd lonkero && cargo build --release# 扫描目标,自动发现 GraphQL 端点并执行全套测试 lonkero scan https://example.com --crawl # 只跑 GraphQL 相关模块,输出 JSON 报告 lonkero scan https://example.com --only graphql --format json -o gql-report.json💡 小贴士:扫描器会自动尝试
/graphql、/api/graphql、/gql、/query等常见路径,即使你不知道端点也能测。
三、9 种 GraphQL 攻击手法逐项解析 🔍
1. 端点探测与 GraphQL 识别
一切测试的前提是确认目标是不是 GraphQL。Lonkero 会向常见路径发送{__typename}探测查询,根据返回中的__typename、data、errors特征判断端点类型。这一逻辑在 graphql.rs 中实现,还会结合 crawler.rs 和 js_miner.rs 从 JS 源码中挖出隐藏端点。
2. Introspection 模式攻击(Schema 泄露)📜
这是 GraphQL 最经典的漏洞:introspection 未关闭时,任何人都能拉取完整 Schema,包括所有类型、字段、参数、枚举甚至已废弃字段。
Lonkero 会发送完整 introspection 查询并解析出结构化 Schema(见 graphql_introspection.rs),进而为后续注入、越权测试提供精准的"地图"。判定标准是响应中同时出现__schema与types,命中即报High严重级别。
query IntrospectionQuery { __schema { types { name kind fields { name type { name } } } } }3. GraphQL 注入(SQL / NoSQL)
GraphQL 的参数本质上是字符串输入,如果后端拼接查询或查询语句,就会引入注入点。扫描器会测试1' OR '1'='1、1; DROP TABLE users--等 SQL 注入载荷,以及$ne这类 NoSQL 注入载荷,命中即标记Critical(对应 CWE-89)。测试逻辑见 graphql_security.rs。
4. 深度嵌套查询 DoS(资源耗尽)🕳️
GraphQL 允许查询无限嵌套,user → posts → author → posts…可以构造 20 层甚至更深的查询,让数据库和服务器做指数级计算,从而拖垮服务。
Lonkero 发送 20 层嵌套查询,如果服务器返回 200 且没有depth/complexity报错,说明没有深度限制,标记为Medium级 DoS 风险(见 graphql.rs)。
5. 批量查询(Batching)与限流绕过
GraphQL 允许在一次请求中携带多个查询操作(数组形式)。攻击者可以利用这一点:
- 一次发送上百个登录尝试,绕过按请求计数的限流
- 一次性拉取大量数据,放大资源消耗
扫描器会发送包含多个__typename查询的批量请求,若响应中命中多次且状态码 200,即判定"批量查询未限制",可用于 DoS 或暴力破解(详见 graphql_batching.rs)。
6. Alias 别名放大攻击 ⚡
Alias(别名)是比批量更隐蔽的放大手段:同一个字段可以被赋予多个别名,一条请求内重复执行 N 次。
query { a1: expensiveQuery { data } a2: expensiveQuery { data } a3: expensiveQuery { data } # ... 100 个别名 = 100 倍服务器负载 }Lonkero 会构造 50+ 别名的查询测试,若全部执行成功,即确认别名放大漏洞,可能造成限流绕过与资源耗尽。
7. 授权绕过(敏感字段未授权访问)🔓
许多 GraphQL 应用只在"查询级别"做鉴权,却忘了在字段级别加保护。扫描器会直接尝试未授权查询users { id email password }、admin { id email }等敏感操作:
- 只有响应包含真实
data(而非纯错误)才算命中 - 命中条件:出现
password+email/username组合,或ssn、credit_card等 PII 字段 - 一旦命中标记为Critical,CVSS 高达 8.2,这正是 graphql.rs 中最关键的检测之一
8. 字段建议与错误信息泄露
- 字段建议泄露:查询不存在的字段时,GraphQL 可能返回"你是否想查询 xxx?"的字段建议,这等于变相泄露 Schema 信息(见 graphql_security.rs)
- 详细错误泄露:扫描器发送非法查询,检查响应中是否出现
stack、exception、文件路径、SQL 语句、源码路径等真正危险的信号(至少命中 2 个才会报告,避免误报)
9. 高级滥用:Fragment 展开、成本分析与持久化查询 🧠
最后一组是更进阶的手法,graphql_security.rs 与 graphql_batching.rs 均有覆盖:
| 手法 | 危害 |
|---|---|
| Fragment 展开攻击 | 通过 fragment 递归嵌套造成栈溢出 |
| 成本分析滥用 | 故意触发高成本 resolver,耗尽计算资源 |
| 持久化查询篡改 | 操纵查询哈希实现缓存投毒 |
| 指令(Directive)滥用 | 利用自定义指令绕过鉴权 |
| 订阅漏洞 | 滥用实时订阅通道造成数据泄露 |
四、扫描结果怎么看?📊
Lonkero 的每个漏洞记录都包含完整字段:vuln_type、severity、confidence、cwe、cvss、payload、evidence和修复建议(remediation),例如 introspection 漏洞会直接给出生产环境关闭 introspection 的配置代码。配合--format pdf/json/sarif可导出报告,方便同步给开发团队。
如果你希望更深入了解某项攻击的判定细节,直接阅读对应源码模块即可:
- 基础扫描:src/scanners/graphql.rs
- 批量与别名攻击:src/scanners/graphql_batching.rs
- 高级 GraphQL 安全:src/scanners/graphql_security.rs
- Schema 解析引擎:src/graphql_introspection.rs
五、总结与实战建议 ✅
Lonkero 的 GraphQL 测试体系覆盖了从端点发现 → Schema 提取 → 注入测试 → DoS 放大 → 越权验证的完整链路,9 种攻击手法一次扫描全部覆盖,特别适合渗透测试和 CI/CD 安全流水线。
给你的三点建议:
- 先跑基础扫描:
lonkero scan 目标 --crawl自动发现 GraphQL 端点 - 善用 only 参数:确认端点后只跑 GraphQL 模块,速度快、噪音小
- 结合报告修复:重点关注 introspection(High)与授权绕过(Critical)两项,它们是最常见的真实漏洞
现在就去 clone 项目,对着你自己的测试环境跑一遍,你会直观感受到什么叫"一条命令测完 GraphQL 全部攻击面"。🚀
【免费下载链接】lonkeroLonkero - Wraps around your attack surface. Professional-grade scanner for real penetration testing. Fast. Modular. Rust.项目地址: https://gitcode.com/gh_mirrors/lo/lonkero
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
