越权漏洞到底该怎么测?手把手教你挖掘
前言
很多刚入门 Web 安全、准备冲 SRC 挖洞的小伙伴,第一个上手的漏洞就是越权漏洞。在各大 SRC 平台里,越权(访问控制失效)属于高频漏洞,赏金稳定,而且不需要掌握复杂的注入、XSS 知识,新手也能成功挖出有效漏洞。
但很多人踩坑:只会简单改 URL 里的 id,稍微复杂一点的接口、加密参数、JWT Token 场景,就测不出问题;经常误报,提交漏洞被厂商打回。
越权漏洞本质是后端没有做对象级权限校验:系统只判断你是否登录,却没有校验「这个资源是不是属于当前登录用户」。OWASP Top10 中,它归类为访问控制失效(Broken Access Control),也是业务逻辑漏洞里最典型的一类。
本文手把手完整讲解越权漏洞挖掘全流程,包含原理、账号准备、测试思路、GET/POST/JSON 接口实战、常见坑点、特殊绕过技巧、漏洞验证、SRC 提交要点和修复方案。不管是渗透测试练习,还是 SRC 提交挖洞,看完直接就能上手实操。
免责声明:本文内容仅用于网络安全学习、靶场练习、授权范围内的安全测试。严禁在未获得目标系统书面授权的环境进行越权测试,非法测试、越权获取他人隐私信息将承担法律责任。
一、先分清:两种核心越权(水平越权 & 垂直越权)
1.1 水平越权(平行越权,IDOR 不安全的直接对象引用)
同角色、同级别的用户,A 可以查看 / 修改 B 的数据。
通俗例子:
用户 A 登录账号,访问查看订单接口,修改订单 ID,直接看到用户 B 的订单、手机号、收货地址;普通用户 A,可以打开普通用户 B 的个人资料。
核心:权限等级一样,只是访问了别人的资源。
1.2 垂直越权(纵向越权,权限提升)
低权限账号,可以访问高权限账号的功能、接口。
通俗例子:普通登录用户,直接访问管理员后台接口,查看所有用户列表、删除用户、修改全站配置。
核心:角色权限层级不一样,低权限拿到高权限功能。
补充:很多新手容易混淆,简单一句话记忆:
✅ 水平:你看别人的私人数据;
✅ 垂直:普通用户干管理员的事。
二、测试前期准备:账号环境 + 工具准备
2.1 必备账号(重中之重,很多人漏这一步)
至少准备2 个同权限普通账号 + 1 个管理员账号
- 用户 A:普通账号 A,生成属于 A 的订单、资料、文件;
- 用户 B:普通账号 B,生成属于 B 的订单、资料、文件;
- Admin:管理员账号(用来对比高权限接口返回)
原理:越权是跨账号对比,只用一个账号根本测不出水平越权。
2.2 推荐工具
- Burp Suite:抓包、Repeater 重放,核心工具;Autorize 插件可以自动化辅助检测越权,适合批量接口测试
- 浏览器开发者工具:抓前端接口、JS 源码,寻找隐藏接口、参数
- 简单记事本:记录所有接口、参数、每个账号对应的资源 ID(订单 id、user_id、file_id)
2.3 前期踩点
登录账号 A,完整走一遍业务流程,把所有接口全部抓包,梳理业务模块:
个人中心、订单、发票、文件下载、消息通知、修改密码、地址管理、合同预览等。
把接口里所有资源标识参数全部记录下来:id、user_id、order_id、file_id、uid、recordId、billId
这些就是越权测试的重点参数。
三、完整测试流程,手把手实操
步骤 1:登录用户 A,抓正常业务请求
举个 GET 接口例子,查看 A 自己订单:
GET /api/order/detail?order_id=10001 HTTP/1.1 Host: test.com Cookie: session=用户A的session Authorization: Bearer A的token响应返回:用户 A 的订单、姓名、手机号、收货地址。
步骤 2:修改资源 ID,保持 A 的身份凭证不变
把order_id=10001改成用户 B 的订单order_id=10002,Cookie/Token保持 A 账号不变,直接发送请求。
GET /api/order/detail?order_id=10002 HTTP/1.1 Host: test.com Cookie: session=用户A的session Authorization: Bearer A的token判断结果:
- 返回用户 B 的订单敏感数据,200 正常返回 →存在水平越权
- 返回 403 / 提示无权限 / 订单不存在 → 权限校验正常,不存在漏洞
关键点:身份凭证(Cookie/Token)不能换!很多新手错误把 Cookie 换成 B 账号,这样等于正常登录 B,根本不是越权。
步骤 3:POST 请求、JSON 接口越权测试(最容易被忽略)
越权不只是 URL 上的 GET 参数,POST 表单、JSON 请求体里面的user_id、order_id同样是重灾区。
示例 JSON 请求(用户 A 修改自己收货地址):
POST /api/user/updateAddress HTTP/1.1 Host: test.com Content-Type: application/json Authorization: Bearer A-token { "user_id": 2001, "address": "长沙市XX街道" }修改user_id为用户 B 的 id,保持 A 的 Token 不变发包:
{ "user_id": 2002, "address": "长沙市XX街道" }如果成功修改用户 B 的地址,就是越权修改高危漏洞。
划重点:越权不止查询(读),新增、修改、删除操作的越权危害更大,SRC 赏金更高。不要只测查看接口!
步骤 4:垂直越权测试
- 用普通用户 A 登录,抓包拿到 A 的 Token/Cookie
- 寻找管理员接口:
/admin/user/list、/api/admin/delUser、/system/config- 寻找方式:JS 源码、历史接口、robots.txt、目录爆破
- 使用普通用户 A 的身份凭证,直接请求管理员接口
- 成功访问管理员列表、执行管理员操作 → 垂直越权
常见坑:很多前端只是隐藏管理员菜单,接口还保留在后端,前端看不到不代表接口不存在。
四、各类业务场景越权测试清单(直接照着测)
整理 SRC 最常出越权的业务模块,测试的时候逐个覆盖:
- 用户资料模块:查看个人信息、修改手机号、修改头像
参数:user_id、uid - 订单模块:订单详情、物流、发票、取消订单、退款
参数:order_id、bill_no - 文件 / 附件模块:下载合同、身份证图片、报表 PDF
参数:file_id、attach_id,文件下载接口是越权重灾区 - 消息模块:站内私信、聊天记录
参数:msg_id、chat_id - 审批流程:审批记录、待办详情
参数:record_id - 账号管理:重置密码、解绑手机
参数:target_user_id(越权重置别人密码属于高危)
静态资源 URL 也不要放过,很多 OSS 对象存储文件地址依靠 id 编号,没有鉴权,修改 id 直接下载他人文件。
五、进阶:特殊场景越权测试(新手容易漏掉)
5.1 参数加密场景
现在很多系统不会直接明文 id,参数经过 AES、Base64 等加密。
思路:
- 用户 A 请求,拿到加密后的 id 值;
- 用户 B 请求,拿到 B 对应的加密 id;
- 直接把请求里 A 的加密 id 替换为 B 的加密 id,保持 A 的 token 发包。
很多开发者只做前端加密,后端没有校验资源归属,加密只是伪装,依然存在越权。
5.2 JWT Token 越权测试
JWT 场景有两类测试思路:
- 保持原有 JWT 不变,修改请求体 / URL 里的资源 id(最常见);
- 尝试修改 JWT 载荷里面的
userid、role,如果后端未校验签名,直接造成垂直越权。
5.3 批量查询接口越权
批量查询接口,数组形式传递多个 id,例如:
{ "ids":[10001,10002] }用户 A 正常只能查 10001,如果加上 B 的 id 10002,接口同时返回两个人数据,批量越权。
5.4 基于 Referer、前端隐藏控制的假权限
有些开发只依靠前端隐藏按钮、判断 Referer 头做权限控制。这种属于前端控制,后端无校验。
测试方法:Burp 直接重放请求,删掉 Referer 头,绕过前端限制。
记住:前端所有权限控制全部不可信,所有权限判断必须放在后端。
5.5 资源重定向场景
接口 302 重定向到文件地址,很多人只看 302 就跳过测试。
需要跟进重定向后的地址,验证是否可以越权获取其他文件。
六、漏洞判定:怎么区分真越权和误报?
很多新手提交漏洞被厂商驳回,大多是不会判断是否为真实越权。
✅ 真实越权判定标准:
- 使用账号 A 的登录凭证;
- 没有登录账号 B;
- 成功读取 / 修改属于账号 B 的私有资源;
- 响应返回真实、可确认属于 B 的业务数据(手机号、订单号、姓名)
❌ 不属于越权(误报):
- 切换 Cookie 为 B 账号,拿到数据(属于正常登录)
- 返回数据空白、统一提示 “无权限”,没有返回 B 真实信息
- 接口返回通用测试数据,无法确认归属
验证小技巧:提前给 A、B 两个账号设置明显不同信息(例如 A 手机号 13800000001,B 手机号 13800000002),方便一眼区分返回的数据是谁的。
七、越权漏洞挖掘常见踩坑总结
- 只测 GET,不测 POST 和 JSON 接口:大量越权藏在 POST 请求体;
- 只用单个账号测试:没有两个账号对比,根本发现不了水平越权;
- 测试的时候更换 Cookie/Token:直接变成正常登录另一个账号,测试无效;
- 只测试查询接口,忽略修改、删除、退款等高危写接口;
- 看到 id 不是纯数字就跳过:UUID、加密串、字符串编号同样会存在越权;
- 依赖扫描器自动探测:AWVS、Xray 这类自动化工具很难发现越权,越权高度依赖人工业务理解,人工测试是核心。
八、SRC 漏洞报告怎么写(越权模板,直接套用)
提交漏洞时,清晰的复现步骤更容易被厂商确认,模板参考:
漏洞描述
系统订单详情接口存在水平越权漏洞,攻击者登录普通用户账号,修改请求中 order_id 参数,可查看其他用户订单信息,包含手机号、收货地址等敏感个人信息。
复现步骤
- 注册账号 A,创建订单,获取订单 ID:10001;
- 注册账号 B,创建订单,获取订单 ID:10002;
- 登录账号 A,抓包访问自己订单的请求;
- 修改请求内 order_id=10002,Cookie 保持账号 A 不变,发送请求;
- 接口返回账号 B 的订单、手机号、收货地址。
漏洞影响
攻击者可遍历订单 ID,批量获取平台大量用户隐私数据,造成用户信息泄露。
修复建议
后端接口在查询订单时,校验订单所属用户 ID,和当前登录用户身份做比对,数据库查询时增加 where 条件限定 user_id = 当前登录用户,不允许跨用户访问资源。
九、后端修复方案(开发视角,提交漏洞可附带)
越权的核心修复原则:每一次资源访问,后端都校验该资源是否属于当前登录用户。
- 查询 SQL 增加用户归属条件
错误写法:
select * from order where id = #{order_id};安全写法:
select * from order where id = #{order_id} and user_id = #{current_login_userid};- 所有接口做对象级权限校验,不能只校验是否登录;
- 高权限接口增加角色校验,拒绝普通用户访问管理员功能;
- 文件下载、附件接口,增加归属校验,禁止通过遍历 file_id 下载其他用户文件;
- 不要依靠前端隐藏菜单、Referer、JS 控制权限;
- 权限校验逻辑统一封装,全局复用,避免多个接口漏写权限判断。
十、总结
越权漏洞是新手入门 SRC 的首选漏洞,它不依赖复杂的漏洞原理,核心思路一句话:用 A 的身份,尝试访问 B 的资源。
关键点回顾:
- 水平越权:同角色访问别人数据;垂直越权:低权限访问管理员功能;
- 测试必备:至少 2 个普通账号,抓包修改资源 ID,保持身份凭证不变;
- 覆盖 GET、POST、JSON、文件下载、加密参数等全部接口;
- 自动化扫描只能辅助,越权必须人工结合业务测试;
- 漏洞提交时准备好清晰复现步骤、截图,区分真实漏洞和误报。
越权的本质是业务逻辑上的权限缺失,只要后端忘记校验资源归属,就会出现漏洞。多在靶场练习,熟悉不同业务场景,慢慢就能稳定挖到越权漏洞。
本文为 Web 安全学习笔记,适合 SRC 挖洞、渗透测试面试复习。如果对你有帮助,欢迎点赞收藏。
了解网络安全,首先要搞清楚下面这些前提
- 网络安全到底包含哪些技术?是否需要会编程?
- 网络安全行业有哪些职业方向?“我”该如何选择?
- 网络安全的职业发展和成长路线是什么?
如果你是准备学习网络安全(黑客)或者正在学习,下面这些你应该能用得上:
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
一、网络安全(黑客)学习路线
网络安全(黑客)学习路线,形成网络安全领域所有的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、网络安全教程视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
三、网络安全CTF实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这里带来的是CTF&SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
四、网络安全面试题
最后,我们所有的作为都是为就业服务的,所以关键的临门一脚就是咱们的面试题内容,所以面试题板块是咱们不可或缺的部分,这里我给大家准备的就是我在面试期间准备的资料。
网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。
机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!
这份完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】