# Pentest Login

> 登录与鉴权测试 - Token权限分析、认证绕过、暴力破解、JWT/OAuth攻击、验证码绕过

- Skill: `openaisec/pentest-login` (Agent Skill)
- Install (CLI): `npx skillmds@latest add openaisec/pentest-login`
- Raw SKILL.md: https://api.skillmd.com/api/skills/openaisec/pentest-login/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: openaisec (https://skillmd.com/u/openaisec)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/openaisec/pentest-login

---


# 登录与鉴权测试

## 安全规则

- **密码重置不测试**：涉及修改用户数据，必须询问用户确认。放最后当备选
- **锁定策略检测优先**：发现锁定后每轮上限=阈值-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未失效。

