| name | testing-mobile-api-authentication |
| description | 测试移动应用 API 的认证与授权机制,识别认证失效、不安全的令牌管理、会话固定、 权限提升和 IDOR 漏洞。适用于对移动应用后端进行 API 安全评估、测试 JWT 实现、 评估 OAuth 流程或评估会话管理的场景。适合涉及移动 API 认证测试、令牌安全评估、 OAuth 移动端流程测试或 API 授权绕过的相关请求。
|
| domain | cybersecurity |
| subdomain | mobile-security |
| author | mahipal |
| tags | ["mobile-security","android","ios","api-security","authentication","penetration-testing"] |
| version | 1.0.0 |
| license | Apache-2.0 |
测试移动应用 API 认证
适用场景
适用于以下情况:
- 在渗透测试中评估移动应用后端 API 认证机制
- 测试 JWT 实现中的常见漏洞(none 算法、弱签名密钥)
- 评估移动应用中 OAuth 2.0 / OIDC 流程的重定向、PKCE 和权限范围问题
- 测试 API 端点中的 BOLA/IDOR(对象级授权失效)漏洞
不适用场景:未经明确授权且无速率限制意识,不得对生产 API 使用此技能。
前置条件
- Burp Suite 或 mitmproxy 已配置为移动设备代理
- 目标应用已绕过 SSL 固定(如已实现)
- 目标应用的有效测试账户凭据
- Postman 或 curl 用于构造 API 请求
- jwt.io 或 PyJWT 用于 JWT 分析与篡改
工作流程
步骤 1:映射认证端点
拦截移动应用流量,识别认证相关端点:
POST /api/v1/auth/login - 初始认证
POST /api/v1/auth/register - 账户注册
POST /api/v1/auth/refresh - Token 刷新
POST /api/v1/auth/logout - 会话终止
POST /api/v1/auth/forgot-password - 密码重置
POST /api/v1/auth/verify-otp - OTP 验证
GET /api/v1/auth/me - 已认证用户信息
步骤 2:分析 Token 格式与安全性
JWT 分析:
echo "eyJhbGciOiJIUzI1NiIs..." | cut -d. -f2 | base64 -d 2>/dev/null
hashcat -m 16500 jwt.txt wordlist.txt
不透明 Token 分析:
- 测试 Token 长度和熵值
- 检查 Token 是否具有顺序性或可预测性
- 测试登出后 Token 是否可复用
- 验证密码修改后 Token 是否失效
步骤 3:测试认证绕过
curl -X GET https://api.target.com/api/v1/users/profile
curl -X GET https://api.target.com/api/v1/users/profile \
-H "Authorization: Bearer "
curl -X GET https://api.target.com/api/v1/users/profile \
-H "Authorization: Bearer null"
curl -X GET https://api.target.com/api/v1/users/profile \
-H "Authorization: Bearer <过期_token>"
curl -X GET https://api.target.com/api/v1/users/123/profile \
-H "Authorization: Bearer <用户456的_token>"
步骤 4:测试 IDOR(对象级授权失效)
curl -X GET https://api.target.com/api/v1/users/123/orders \
-H "Authorization: Bearer <用户456的_token>"
curl -X PUT https://api.target.com/api/v1/orders/789 \
-H "Authorization: Bearer <用户456的_token>" \
-d '{"status": "cancelled"}'
curl -X GET https://api.target.com/api/v1/admin/users \
-H "Authorization: Bearer <普通用户_token>"
步骤 5:测试会话管理
TOKEN=$(curl -s -X POST https://api.target.com/api/v1/auth/login \
-d '{"email":"test@test.com","password":"pass"}' | jq -r '.token')
curl -X POST https://api.target.com/api/v1/auth/logout \
-H "Authorization: Bearer $TOKEN"
curl -X GET https://api.target.com/api/v1/users/me \
-H "Authorization: Bearer $TOKEN"
步骤 6:测试 OAuth 2.0 / OIDC 移动端流程
核心概念
| 术语 | 定义 |
|---|
| BOLA/IDOR | 对象级授权失效——通过修改标识符访问资源,而服务端未进行授权检查 |
| JWT | JSON Web Token——包含 Header、Payload 和 Signature 的自包含认证令牌 |
| PKCE | Proof Key for Code Exchange——防止移动应用授权码被拦截的 OAuth 2.0 扩展 |
| Token 刷新 | 使用长期有效的刷新令牌获取新访问令牌的机制,无需重新认证 |
| 会话固定(Session Fixation) | 攻击者在受害者认证前预设已知会话 ID,随后劫持该会话的攻击方式 |
工具与系统
- Burp Suite:HTTP 代理,用于拦截和修改认证请求
- jwt_tool:Python 工具,用于测试 JWT 漏洞(none 算法、密钥混淆、声明篡改)
- Postman:API 测试客户端,用于构造认证请求
- hashcat:密码/JWT secret 爆破工具,用于测试 HMAC 签名密钥强度
- Autorize:Burp Suite 插件,用于自动化授权测试
常见问题
- 速率限制掩盖问题:API 可能对测试请求进行速率限制。需在请求间添加延迟,并先从测试者已授权的视角进行测试。
- URL 中的 Token:部分移动 API 将 Token 作为 URL 查询参数传递,使其暴露在服务器日志和浏览器历史中。即使授权功能正常,也应标记为发现项。
- 刷新令牌轮换:部分 API 在每次使用刷新令牌后进行轮换。若测试使刷新令牌失效,可能导致测试账户被锁定。
- 移动端特定 OAuth:移动应用使用自定义 URI Scheme 进行 OAuth 重定向,可能被注册了相同 Scheme 的恶意应用拦截。