# 认证绕过与越权:从登录缺陷到数据拖取|红蓝对抗演练视角 > 核心概念区分(演练必考) > 1. **认证(Authentication)**:你是谁(登录,账号密码、token校验) > **认证绕过**:不用正常登录流程,直接进入系统、拿到登录后的会话。 > 2. **授权(Authorization)**:你能做什么、能看哪些数据(权限控制) > **越权漏洞**:成功登录后,**水平/垂直**访问不属于自己的数据、功能。 > > 一句话总结:**认证绕过=不用进门钥匙直接闯进屋子;越权=进了门之后,翻看别人房间的东西。** ## 一、认证绕过:跳过登录校验,直接获得访问权限 ### 常见漏洞场景 1. **参数篡改绕过** 登录判断逻辑有缺陷,修改GET/POST参数直接标记登录成功。 例:`login?user=test&isLogin=false`,修改为 `isLogin=true`,后端直接判定登录。 2. **Cookie/Session伪造** Cookie中存储身份(`userid=1001;role=user`),前端可控,直接修改role=admin,后端未做服务端校验。 3. **路径/接口未做登录拦截** 后台接口、管理页面,**只在前端加登录判断,后端无校验**;直接访问接口地址,跳过登录页面。 4. **条件判断缺陷、SQL逻辑绕过** 登录SQL:`select * from user where username='$user' and password='$pass'` 传入payload:`admin' or 1=1--`,SQL注入直接绕过登录,不需要密码。 5. **JWT认证缺陷** JWT签名未校验、密钥弱、可修改payload,篡改身份,伪造管理员token。 > 攻击效果:攻击者无需账号密码,直接进入系统,拿到业务功能访问权限。 ## 二、越权漏洞两大类(重点区分水平越权 / 垂直越权) ### 1. 水平越权(同角色,访问别人数据) 同一权限等级用户,A能查看B的私有数据。 场景举例: 用户A订单地址接口:`/api/getOrder?orderId=10001` 攻击者修改orderId=10002,直接读取另一个用户的订单、手机号、身份证。 > 本质:只校验用户是否登录,**没有校验这条数据是否属于当前登录用户**。 ### 2. 垂直越权(低权限 → 高权限功能) 普通用户账号,访问管理员才可以使用的接口。 例:普通员工登录,直接调用 `/api/admin/addUser`、删除用户、修改系统配置。 > 本质:接口只校验登录状态,**没有校验当前用户角色是否拥有该功能权限**。 ## 三、完整攻击链路:认证绕过/越权 → 拖取数据 1. 探测:浏览应用、抓包,观察接口参数(id、orderId、userId、role) 2. 尝试认证绕过:尝试跳过登录、伪造Cookie/JWT,直接访问后台接口 3. 登录普通账号,测试越权:修改ID参数,测试能否读取他人数据/管理员功能 4. 验证漏洞:成功读取其他用户敏感信息、执行高权限操作 5. 批量遍历ID,循环请求接口,批量获取用户数据 → 拖库 6. 导出手机号、身份证、订单、隐私数据,完成数据窃取 ## 四、Payload简单示例 水平越权示例: ``` 原始请求:GET /user/getInfo?uid=1001 修改:GET /user/getInfo?uid=1002 ``` 后端只判断是否登录,不校验`uid=1002`是不是当前登录用户,直接返回别人信息。 JWT认证绕过:修改payload里`role:user`改为`role:admin`,后端未校验签名。 ## 五、蓝队审计、检测方法 ### 代码审计核心检查点 1. 所有后台接口**后端必须校验登录状态**,不能只靠前端隐藏按钮 2. 每一条数据查询接口:**必须校验这条数据归属当前登录用户(数据权限)** 3. 管理类接口:校验用户角色(功能权限) 4. JWT、Cookie身份凭证:服务端校验签名,不能前端可控 ### 流量&日志特征 - 同一账号,短时间大量遍历ID(uid、orderId递增)的请求,大概率越权批量爬取数据 - 未登录状态,直接访问后台管理接口 - 普通用户账号,频繁调用管理员接口 ## 六、防御方案 1. **认证:所有接口服务端校验会话,禁止前端控制身份状态** JWT密钥妥善保管,校验签名;Cookie身份不能前端随意篡改。 2. **垂直权限控制(功能权限)** 基于RBAC角色权限模型,接口校验角色,低权限账号禁止访问管理员API。 3. **水平权限控制(数据权限,最容易漏)** 查询数据库时,SQL强制带上`user_id = 当前登录用户id`,**不能只根据传入的id查询**。 ❌错误:`select * from order where id = #{orderId}` ✅正确:`select * from order where id = #{orderId} AND user_id = #{loginUserId}` 4. 权限校验统一封装成中间件/拦截器,不要每个接口手写(容易漏写) 5. 敏感操作增加审计日志,记录数据查询行为 ## 七、高频易混淆考点 1. 认证绕过:**没有登录,直接进入系统** 2. 垂直越权:登录了,普通用户用管理员功能 3. 水平越权:登录了,同角色看别人的数据 4. 和SQL注入区分:SQL注入是数据库层面;越权属于业务逻辑漏洞,**几乎和数据库注入无关,是开发业务逻辑没写权限判断** 一句话速记: 认证绕过是跳过登录;垂直越权是低权限拿管理员功能;水平越权是偷看同级别其他人数据;根治核心是**服务端做好功能权限+数据归属双重校验**。