| category | web |
| name | pentest-login |
| description | 登录与鉴权测试 - Token权限分析、认证绕过、暴力破解、JWT/OAuth攻击、验证码绕过 |
| when_to_use | JS分析和API发现完成后 |
登录与鉴权测试
安全规则
- 密码重置不测试:涉及修改用户数据,必须询问用户确认。放最后当备选
- 锁定策略检测优先:发现锁定后每轮上限=阈值-1。例如5次锁定→最多4次
- 仅测试授权目标
文件组织
tmp/<时间戳>/raw/login/
├── auth_endpoints.txt
├── token_analysis.txt
├── auth_bypass.txt
├── brute_force.txt
├── jwt_analysis.txt
├── oauth_analysis.txt
└── captcha_mfa.txt
前置判断
如果前面阶段已拿到有效账号密码(硬编码/默认凭据)→ 跳过阶段3(绕过)和阶段4(爆破),直接进入阶段2(Token分析)和阶段5-7(JWT/OAuth/MFA)。
阶段1:鉴权接口汇总
从 pentest-js 和 pentest-api 结果提取:登录/注册/Token刷新/登出/验证码/SSO回调。密码重置接口仅收集不测试。
阶段2:Token 权限分析
获取Token优先级:pentest-js硬编码Token > 运行时存储 > 访客注册 > 默认凭据试登录。
JWT解码 payload 提取:role/userId/exp/iss/tenant。
判断角色:guest→尝试越权,user→尝试访问管理接口,admin→验证后跳过越权。
阶段3:认证绕过
核心手段:空Token(Bearer )、伪造Token(Bearer admin)、JWT none算法、自定义认证头(X-Auth-Token/X-User-Id/X-User-Role)、路径修改(去admin前缀/..绕过)、参数覆盖(?role=admin)、IP白名单绕过(X-Forwarded-For: 127.0.0.1)、HTTP方法变换、Content-Type变换。
阶段4:暴力破解
先测锁定策略:连续错误登录10次 → 观察第N次响应差异 → 阈值=N → 后续每轮上限=阈值-1。
用户名枚举:存在vs不存在用户的响应差异、时间侧信道。
弱密码测试:admin/admin/root/test/guest系列,每轮不超过阈值。
阶段5:JWT
- none算法:
{"alg":"none"}.payload.(无签名)
- 算法混淆:RS256→HS256(公钥当secret)
- 弱密钥:secret/123456/password/jwt_secret
- 时效:exp-iat>1天 → 过长;无exp → 永不过期
阶段6:OAuth2
关注点:grant_type共存(password+client_credentials)、scope未细分(用普通client的Token试admin接口)、secret硬编码在JS。
阶段7:验证码/MFA
图形码:重复使用/不绑定Session/响应中返回code。
短信码:4-6位可爆破/有效期过长/响应返回。
MFA:跳过2FA步骤/备用码可枚举。
阶段8:密码重置(最后备选)
必须用户确认后才测试:Token可预测性/响应返回/URL传输(Referer泄露)/验证码爆破/旧Token未失效。