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 挖掘步骤
- 识别前端框架:查看 JS bundle、路由库(vue-router、react-router-dom)、构建产物(webpack、vite、umi)。
- 提取路由表:从
router.js、JS map、反编译产物中提取所有路由路径,特别是/admin、/manage、/console、/system等管理路由(JS/source map 还原详见recon-js-analysis)。 - 分析路由守卫逻辑:定位
beforeEach、onEnter、AuthGuard、PrivateRoute,确认校验依赖的是前端存储还是后端接口。 - 绕过验证:按 2.1 表格验证方法逐项执行;另测删除/篡改路由守卫 JS(Chrome Overrides、Burp 替换响应体)。
- 后端接口二次校验:即使绕过前端页面,也要测试对应 API 是否真正鉴权;前端绕过 ≠ 后端未授权,后者才是有效漏洞。
三、验证码安全专项
适用场景:注册/登录/找回密码/绑定手机/敏感操作(改密/转账/提现)前的图片、短信、邮件、滑动/点选、行为验证码。
3.1 类型特有攻击面
| 类型 | 特有攻击点 |
|---|---|
| 图片验证码 | OCR 识别、干扰弱、时效长 |
| 短信/邮件验证码 | 轰炸(对他人手机号/邮箱无限发)、4-6 位短码可爆破、与接收渠道未绑定 |
| 滑动/点选验证码 | 轨迹伪造、拦截校验接口伪造 success=true / riskLevel=0 |
| 行为验证码(无感) | 设备指纹伪造、风控阈值宽松 |
3.2 通用绕过手法(所有类型先过一遍)
- 置空/删除参数:删掉
captcha/code字段或传空字符串 - 复用:同一验证码连续多次提交
- 不刷新:失败后用原验证码继续爆破
- 响应回显:验证码/结果在 JSON、Set-Cookie、响应头中返回
- 万能码:
000000/123456/888888/666666 - 并发:同时多发请求利用校验竞态
- 渠道未绑定:A 手机收码,B 手机提交同一验证码
- 可预测:短码 + 弱随机数(时间戳/递增/固定种子)
- 仅前端校验:JS 校验格式,服务端不校验
- 跳步:直接请求下一步接口绕过验证码环节
- 敏感操作确认:改密/转账前的验证码是否必需且服务端真正生效
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
九、挖掘步骤
- 收集凭证流转:注册→登录→找回密码→绑定→解绑,记录每个步骤的凭证传递
- 对比测试:A用户 token 访问 B用户资源;无 token/过期 token/伪 token 访问
- 角色篡改:注册时或请求中注入 role=admin / isAdmin=true / group_id
- 对象绑定:遍历资源 ID(订单号、用户ID、uuid),观察归属校验
- 租户切换:修改 tenant_id/org_id,验证跨租户访问
- 验证码专项:按「三、验证码安全专项」3.2 十一条手法逐项测试
- 密码重置链:验证码绕过 → token 预测 → 任意用户重置 → 登录目标账号
- OAuth/SSO:redirect_uri 白名单绕过、state 缺失/可预测、绑定覆盖
十、验证要点
- 响应差异:状态码、响应体字段、错误措辞(用户存在性枚举)
- 越权判定:能读到/改到他人数据即确认,无需深入
- 多用户矩阵:A↔B 双向测试,同角色/跨角色/跨租户
- 报告需标注:前置条件(登录态/角色/网络位置)、影响对象数量
十一、修复建议
- 服务端统一鉴权:每个接口强制校验身份与资源归属
- 对象ID不可预测(UUID)+ 归属校验(owner_id 比对)
- 验证码:见「三、验证码安全专项」3.3
- JWT:强密钥、强制算法白名单、短时效+撤销机制
- 密码重置 token:高熵随机、一次性、绑定会话
- 敏感操作(改密/绑手机/资金)增加二次验证