认证绕过与越权:从登录缺陷到数据拖取
admin
2026-10-26 22:21
150人看过
免费
# 认证绕过与越权:从登录缺陷到数据拖取|红蓝对抗演练视角
> 核心概念区分(演练必考)
> 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注入是数据库层面;越权属于业务逻辑漏洞,**几乎和数据库注入无关,是开发业务逻辑没写权限判断**
一句话速记:
认证绕过是跳过登录;垂直越权是低权限拿管理员功能;水平越权是偷看同级别其他人数据;根治核心是**服务端做好功能权限+数据归属双重校验**。
版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载或以其他方式使用本站原创内容。