--- name: auth-access-control description: 当出现注册/登录/找回密码/验证码/绑定手机/实名认证/OAuth/SSO/2FA/JWT等认证功能,前后端分离应用出现路由守卫/前端鉴权绕过,或发现ID可替换、角色参数可控、租户ID可控、接口存在越权迹象时调用。负责认证绕过、前端鉴权绕过、会话安全、验证码安全、水平/垂直越权、多租户隔离、密码重置、加密与随机性弱点分析。 --- # 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:高熵随机、一次性、绑定会话 - 敏感操作(改密/绑手机/资金)增加二次验证