# Auth Access Control

> 当出现注册/登录/找回密码/验证码/绑定手机/实名认证/OAuth/SSO/2FA/JWT等认证功能，前后端分离应用出现路由守卫/前端鉴权绕过，或发现ID可替换、角色参数可控、租户ID可控、接口存在越权迹象时调用。负责认证绕过、前端鉴权绕过、会话安全、验证码安全、水平/垂直越权、多租户隔离、密码重置、加密与随机性弱点分析。

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

---


# auth-access-control — 认证授权与越权专项深度挖掘

## 何时调用（触发条件）

- 注册/登录/找回密码/绑定换绑/实名认证/第三方登录/SSO/2FA 功能
- JWT/Token/Session 机制存在或可疑
- 发现对象ID可控（订单、用户、地址、收藏）
- 发现 role/admin/tenant_id 等参数可控
- 同一接口不同角色返回差异
- 加密/签名参数需要逆向分析（自研加密、弱哈希、可预测随机数；公网可取的 RSA/AES/uuid 当鉴权 → `unauth-path-key-hunt`）
- 前后端分离应用的路由守卫/前端鉴权（Vue/React 路由守卫、localStorage 登录态、前端 role 字段）

## 一、身份认证与会话安全

| 类型 | 场景 | 挖掘要点 |
|---|---|---|
| A1. 弱口令/默认口令 | 管理后台、运维面板、测试账号残留 | 字典策略、验证码绕过、MFA检查 |
| A2. 认证绕过 | 客户端校验、异常路径放行 | 不同header/cookie/参数组合对比 |
| A3. 会话固定/劫持 | 登录前后session不变 | Secure/HttpOnly/SameSite检查 |
| A4. JWT/Token风险 | 弱密钥、alg混淆、过期不校验 | token校验逻辑、重放测试 |

## 二、前端鉴权绕过 / 路由守卫绕过

> 适用场景：Vue / React / Angular 等前后端分离应用，前端通过 `router.beforeEach`、`AuthGuard`、本地 role 字段、localStorage/sessionStorage 中的登录态控制页面访问；服务端接口未做二次校验或校验可被绕过。

### 2.1 常见前端鉴权模式与绕过点

| 模式 | 绕过思路 | 验证方法 |
|---|---|---|
| 前端路由守卫（Vue Router / React Router） | 直接请求后端 API 或构造 URL 访问目标页，绕过守卫 | 拦截 `/login` 后的跳转，直接访问 `/admin#/dashboard` |
| localStorage/sessionStorage 存储登录态 | 修改/伪造 `token`、`role`、`isAdmin` 等字段 | 控制台 `localStorage.setItem('role','admin')` 后刷新 |
| 前端 role/admin 字段控制菜单/按钮 | 接口返回 `role` 字段，前端仅隐藏入口；直接调用后端管理接口 | 抓包改 role，观察后端是否真正校验 |
| JS 源码中硬编码角色/权限 | source map/解包后搜索 `admin`、`role`、`permission` | webpack/source map 还原、Chrome Sources 定位 |
| 路由异常路径 / Hash 模式差异 | 未定义路由、404、错误分支被放行；Hash 模式 `#/admin` 绕过服务端路径限制 | 对比 `/admin` 与 `/#/admin`；构造 `#/admin/不存在路径` 观察是否放行 |

### 2.2 挖掘步骤

1. **识别前端框架**：查看 JS bundle、路由库（vue-router、react-router-dom）、构建产物（webpack、vite、umi）。
2. **提取路由表**：从 `router.js`、JS map、反编译产物中提取所有路由路径，特别是 `/admin`、`/manage`、`/console`、`/system` 等管理路由（JS/source map 还原详见 `recon-js-analysis`）。
3. **分析路由守卫逻辑**：定位 `beforeEach`、`onEnter`、`AuthGuard`、`PrivateRoute`，确认校验依赖的是前端存储还是后端接口。
4. **绕过验证**：按 2.1 表格验证方法逐项执行；另测删除/篡改路由守卫 JS（Chrome Overrides、Burp 替换响应体）。
5. **后端接口二次校验**：即使绕过前端页面，也要测试对应 API 是否真正鉴权；前端绕过 ≠ 后端未授权，后者才是有效漏洞。

## 三、验证码安全专项

> 适用场景：注册/登录/找回密码/绑定手机/敏感操作（改密/转账/提现）前的图片、短信、邮件、滑动/点选、行为验证码。

### 3.1 类型特有攻击面

| 类型 | 特有攻击点 |
|---|---|
| 图片验证码 | OCR 识别、干扰弱、时效长 |
| 短信/邮件验证码 | 轰炸（对他人手机号/邮箱无限发）、4-6 位短码可爆破、与接收渠道未绑定 |
| 滑动/点选验证码 | 轨迹伪造、拦截校验接口伪造 `success=true` / `riskLevel=0` |
| 行为验证码（无感） | 设备指纹伪造、风控阈值宽松 |

### 3.2 通用绕过手法（所有类型先过一遍）

1. **置空/删除参数**：删掉 `captcha`/`code` 字段或传空字符串
2. **复用**：同一验证码连续多次提交
3. **不刷新**：失败后用原验证码继续爆破
4. **响应回显**：验证码/结果在 JSON、Set-Cookie、响应头中返回
5. **万能码**：`000000` / `123456` / `888888` / `666666`
6. **并发**：同时多发请求利用校验竞态
7. **渠道未绑定**：A 手机收码，B 手机提交同一验证码
8. **可预测**：短码 + 弱随机数（时间戳/递增/固定种子）
9. **仅前端校验**：JS 校验格式，服务端不校验
10. **跳步**：直接请求下一步接口绕过验证码环节
11. **敏感操作确认**：改密/转账前的验证码是否必需且服务端真正生效

### 3.3 修复建议

- 服务端生成 + 服务端校验，一次有效，用后即失效
- 验证码与接收渠道绑定（手机号/邮箱/图片 session）
- 短信码 ≥6 位 + 失败锁定 + 单号日发送上限；图片码加干扰/扭曲/时效
- 敏感操作验证码作为独立服务端校验步骤，不依赖前端

## 四、JWT/Token 专项

- 弱密钥爆破（`jwt_tool` / hashcat）
- alg 混淆：`RS256→HS256`，用公钥当私钥签名
- 过期 token 是否仍可用、注销是否失效
- 重放测试：同 token 多端使用、跨环境使用
- 签名算法是否强制校验（none 算法）

## 五、访问控制与越权

| 类型 | 场景 | 挖掘要点 |
|---|---|---|
| B1. 水平越权（IDOR） | `/order?id=xxx` | 同角色不同用户资源ID替换 |
| B2. 垂直越权 | 管理接口未鉴权 | 对比管理员/用户接口差异 |
| B3. 多租户隔离失败 | tenantId可控 | 更换租户标识跨租户访问 |

### 权限验证三问（每次越权测试必答）

- 我是谁（认证）→ 身份是否可伪造
- 我能干什么（授权）→ 角色是否可篡改
- 我能操作哪个对象（对象级校验）→ 资源 ID 是否可替换

## 六、用户认证类场景表（全景）

| 场景 | 漏洞类型 | 挖掘要点 |
|---|---|---|
| 用户注册 | 批量注册/手机号遍历/邮箱轰炸 | 无验证码、验证码可绕过、无频率限制 |
| 用户登录 | 暴力破解/凭证泄露/登录绕过 | 无锁定机制、错误信息泄露用户存在性 |
| 密码找回 | 任意用户密码重置 | token可预测、验证码回显、用户凭证可控 |
| 短信/邮件验证码 | 验证码绕过/轰炸/回显 | 见「三、验证码安全专项」 |
| 手机号绑定/换绑 | 任意绑定/覆盖绑定 | 旧手机验证可绕过、直接绑定无验证 |
| 实名认证 | 绕过/伪造/信息泄露 | 前端校验、接口未验证、返回他人信息 |
| OAuth/第三方登录 | 账号劫持/绑定覆盖 | redirect_uri校验不严、state可预测 |
| SSO单点登录 | 票据伪造/会话固定 | ticket可重放、跨域token泄露 |
| 双因素认证(2FA) | 绕过/降级攻击 | 备用验证弱、可直接跳过2FA步骤 |

## 七、权限控制类场景表（全景）

| 场景 | 漏洞类型 | 挖掘要点 |
|---|---|---|
| 订单/交易详情 | 水平越权(IDOR) | 订单号遍历、无归属校验 |
| 个人信息/地址管理 | 越权查看/修改/删除 | ID可控、无用户绑定校验 |
| 后台管理接口 | 垂直越权/未授权访问 | 普通用户直接调用管理接口 |
| 角色/权限管理 | 越权提权 | role参数可控、权限ID可猜测 |
| 多租户系统 | 租户隔离失败 | tenant_id可控、跨租户访问 |
| 数据导出/报表 | 越权导出他人数据 | 导出范围可控、无权限过滤 |
| 批量操作接口 | 批量越权 | ids参数含他人资源ID |
| 审批/工作流 | 越权审批/跳过流程 | 直接修改审批状态、绕过前置节点 |

## 八、加密与随机性弱点（M类）

- 自研加密算法：逆向分析密钥、固定IV、可逆算法
- 弱哈希：MD5/SHA1 无盐、可预测随机数生成 token/验证码
- token/验证码可预测性：时间戳、递增序列、固定种子
- 加密参数篡改：修改密文中的用户ID/金额字段是否生效
- 取钥接口公网可打、加密只保护查询字不证明身份 → `unauth-path-key-hunt`

## 九、挖掘步骤

1. **收集凭证流转**：注册→登录→找回密码→绑定→解绑，记录每个步骤的凭证传递
2. **对比测试**：A用户 token 访问 B用户资源；无 token/过期 token/伪 token 访问
3. **角色篡改**：注册时或请求中注入 role=admin / isAdmin=true / group_id
4. **对象绑定**：遍历资源 ID（订单号、用户ID、uuid），观察归属校验
5. **租户切换**：修改 tenant_id/org_id，验证跨租户访问
6. **验证码专项**：按「三、验证码安全专项」3.2 十一条手法逐项测试
7. **密码重置链**：验证码绕过 → token 预测 → 任意用户重置 → 登录目标账号
8. **OAuth/SSO**：redirect_uri 白名单绕过、state 缺失/可预测、绑定覆盖

## 十、验证要点

- 响应差异：状态码、响应体字段、错误措辞（用户存在性枚举）
- 越权判定：能读到/改到他人数据即确认，无需深入
- 多用户矩阵：A↔B 双向测试，同角色/跨角色/跨租户
- 报告需标注：前置条件（登录态/角色/网络位置）、影响对象数量

## 十一、修复建议

- 服务端统一鉴权：每个接口强制校验身份与资源归属
- 对象ID不可预测（UUID）+ 归属校验（owner_id 比对）
- 验证码：见「三、验证码安全专项」3.3
- JWT：强密钥、强制算法白名单、短时效+撤销机制
- 密码重置 token：高熵随机、一次性、绑定会话
- 敏感操作（改密/绑手机/资金）增加二次验证

