
一次简单越权漏洞复现带你看懂权限控制缺陷前言在 Web 安全漏洞中越权漏洞属于业务逻辑类漏洞没有复杂的内存操作、不需要特殊的 Payload却是各类 SRC、渗透测试、CTF Web 题目里高频出现的一类漏洞。很多新手刚接触 Web 安全时会优先学习 SQL 注入、XSS 跨站脚本、文件上传这类有明显特征的漏洞很容易忽略越权。越权漏洞本质不是语言、框架本身的底层漏洞而是开发者在做业务权限校验时考虑不周没有在服务端做严格的身份与权限校验仅仅依靠前端控制页面展示、依靠客户端传参判断用户身份。很多人觉得越权很难理解其实一句话概括A 用户可以直接访问、查看、修改 B 用户才有权限操作的数据这就是越权。越权分为两大类型水平越权、垂直越权这也是本文重点讲解的核心。本文会搭建简易测试环境完整复现水平越权拆解漏洞原理、漏洞成因、复现步骤、漏洞危害、修复方案同时区分水平越权和垂直越权还会补充实战中挖掘越权的常用思路。适合零基础入门 Web 安全、准备 SRC 漏洞挖掘、学习业务逻辑漏洞的同学阅读。⚠️ 免责声明本文所有内容仅用于本地自建靶场学习、安全授权环境测试文中演示的漏洞环境仅限内网本地搭建。严禁在未授权的网站、业务系统上进行漏洞测试未经授权的渗透测试、越权访问属于违法行为一切违规行为由操作者自行承担法律责任。一、越权漏洞基础概念1.1 什么是越权Web 系统在设计时会给不同用户分配不同权限普通用户只能看自己的数据管理员可以查看全部用户数据。越权就是用户绕过系统权限判断访问超出自己身份允许范围的数据或者功能。越权分为两大类这是面试、SRC 提交漏洞报告里必须分清的水平越权同级别越权同角色、同权限等级的用户互相访问对方的数据。举例用户 Aid1001、用户 Bid1002都是普通会员。A 修改请求参数直接读取 B 的个人订单、个人资料A 和 B 权限级别相同只是数据归属不同这就是水平越权。垂直越权高低权限越权低权限账号直接使用高权限管理员功能。举例普通用户直接访问后台管理员页面、新增用户、删除数据普通用户没有管理员权限直接拿到管理员功能属于垂直越权。简单记忆水平越权 平级之间偷看别人的数据垂直越权 低权限账号拿到管理员功能1.2 越权漏洞产生的根本原因一句话只在前端做权限判断后端没有二次校验用户身份和数据归属关系。很多开发的错误写法前端页面隐藏按钮认为用户看不到就不能操作页面请求使用user_id、order_id这类参数直接从客户端 GET/POST 传入后端拿到参数后直接去数据库查询这条记录没有校验这条记录是不是当前登录用户拥有的数据。前端的所有内容、参数用户都可以通过 Burp Suite 修改。前端隐藏按钮、灰色输入框仅仅是视觉上的限制不能作为安全防护。任何权限校验必须在服务端完成。1.3 越权漏洞的危害越权漏洞看起来没有执行代码、拖库那么震撼但业务危害往往很大水平越权泄露其他用户手机号、收货地址、订单信息、身份证等隐私数据修改他人订单、取消别人业务申请。垂直越权普通用户直接新增、删除账号修改全站配置接管整个后台系统。企业场景越权可批量爬取大量用户隐私数据造成大量信息泄露违反《网络安全法》《个人信息保护法》。漏洞上报越权漏洞在 SRC 平台属于中高危漏洞根据影响范围定级。二、靶场环境准备为了方便复现我们搭建简易 PHPMySQL 靶场模拟一个订单查询系统。环境说明本地搭建使用 PHPStudy / XAMPPMySQL 数据库浏览器 Burp Suite 抓包工具。2.1 数据库表设计创建用户表user_infoidusernamepasswordrole1userA123456user2userB123456user3adminadmin123admin创建订单表order_listorder_idorder_contentowner_userid1001手机订单11002耳机订单2业务逻辑用户登录之后通过传入 order_id 查看订单详情正常逻辑用户 userAid1只能查看 owner_userid1 的订单order_id1001用户 userBid2只能查看 owner_userid2 的订单order_id10022.2 存在漏洞的后端代码存在水平越权缺陷?php session_start(); // 获取前端传过来的订单id $order_id $_GET[order_id]; $conn mysqli_connect(localhost,root,root,test); // 直接根据order_id查询订单没有校验订单归属 $sql select * from order_list where order_id $order_id; $result mysqli_query($conn,$sql); $row mysqli_fetch_assoc($result); echo 订单内容.$row[order_content]; echo 订单所属用户ID.$row[owner_userid]; ?漏洞关键点后端拿到 order_id 之后仅仅查询 order_id 对应的记录没有判断当前登录 session 里的用户 id是否等于订单的 owner_userid。只要修改 order_id 参数任何人都能读取任意订单。正确安全代码逻辑拿到 order_id 之后额外增加条件where order_id$order_id and owner_userid 当前登录用户id双重限制。三、水平越权完整复现步骤步骤 1登录 userA 账号打开系统登录页面输入账号 userA密码 123456登录成功。登录之后服务端 session 记录当前用户 id1。访问订单页面查询自己订单请求 URLhttp://127.0.0.1/order.php?order_id1001页面返回 userA 自己的手机订单正常访问。步骤 2抓包修改参数尝试越权访问 userB 订单打开 Burp Suite开启代理抓包保持 userA 账号处于登录状态Cookie、Session 不变依然是 userA 身份。修改 URL 参数把 order_id 改为 1002http://127.0.0.1/order.php?order_id1002发送请求页面直接返回耳机订单所属用户 ID2。✅ 漏洞复现成功userA 在自己账号登录状态下直接查看 userB 的订单数据。重点全程没有切换账号Session 还是 userA仅仅修改 GET 请求里的 order_id 参数就读取其他用户数据典型水平越权。步骤 3思考拓展POST 型参数越权很多业务不是 GET 传参而是 POST 表单提交原理完全一样。比如修改个人资料接口POST 参数userid1。登录 userA抓包把 POST 参数 userid 改成 2提交请求如果后端直接修改 id2 用户资料就产生水平越权可以修改别人资料。四、垂直越权简单演示思路同样这套系统普通用户角色为 user管理员角色 admin管理员地址/admin/user_list.php功能查看所有账号。如果系统仅仅在前端判断角色后端没有校验角色权限。普通用户登录后直接在浏览器访问/admin/user_list.php成功进入管理员页面查看全部账号就是垂直越权。垂直越权常见场景后台管理页面、用户新增接口、数据删除接口。五、实战挖掘越权的常用思路渗透测试实战技巧学会复现之后我们来看真实 SRC 挖漏洞时怎么寻找越权寻找可控 ID 类参数URL、POST 请求里面常见参数userid、id、uid、order_id、goods_id、article_id、card_id、record_id这类数字 ID 是越权最高发位置。拿到 A 用户的 ID替换成 B 用户 ID 尝试访问。准备两个测试账号挖掘水平越权必备注册两个普通账号 A、B。先用 A 操作产生一条业务数据拿到数据 ID保持 A 登录修改 ID 为 B 的数据 ID看是否能读取 / 修改。观察 Cookie 与 Session权限是依托 Session/Cookie 识别身份。只要 Cookie 不变代表当前用户身份不变只修改请求参数测试越权。增删改查接口全部测试不仅仅是查询接口读数据修改、删除、提交类接口越权危害更大查询越权 → 信息泄露修改 / 删除越权 → 篡改他人业务数据。测试垂直越权注册低权限普通账号直接尝试访问后台管理地址、管理员接口抓包查看管理员接口请求用普通账号 Cookie 重放请求。注意 Cookie 中存放用户 ID 的情况部分系统直接把 uid 写在 Cookie 里面修改 Cookie 内 uid 值重放请求也可能触发越权。越权测试常见误区❌ 误区 1页面看不到按钮代表没有漏洞页面按钮是前端渲染Burp 可以直接构造请求调用接口。❌ 误区 2需要登录就不存在越权越权前提就是登录登录之后访问不属于自己的数据。❌ 误区 3参数是 POST 就不会越权GET 和 POST 只是传参方式权限校验缺陷和提交方式无关。六、越权漏洞的修复方案开发必看漏洞报告必备越权的核心修复思路一句话所有接口在服务端校验两层权限角色权限 数据归属权限。水平越权修复每次查询、修改、删除数据接口时在 SQL 语句增加当前登录用户 ID 的限制条件。示例安全 SQLselect * from order_list where order_id ? and owner_userid 当前登录用户ID无论前端传入什么 order_id数据库只会查询属于当前登录用户的数据。不要信任前端传入的 userid、ownerid用户身份必须从 Session、Token 里面获取不能由客户端提交。垂直越权修复接口访问前在服务端校验当前用户角色。访问管理员接口先读取 Session 里用户角色如果角色不是 admin直接拒绝访问返回 403 无权限不能只前端隐藏入口。通用安全加固建议用户身份信息用户 ID、角色保存在服务端 Session 或者 JWT Token不能由前端可控参数传入禁止直接使用前端传递的 ID 作为唯一查询条件必须校验数据归属统一权限中间件所有接口统一做权限拦截不要每个接口手写权限容易漏写权限校验放在后端前端仅做页面展示优化前端不承担安全控制上线前业务逻辑测试使用多账号交叉测试覆盖增删改查所有接口日志记录敏感操作当出现越权访问行为能够告警溯源。七、越权和其他漏洞对比容易混淆的知识点越权 vs 未授权访问未授权访问不需要登录直接访问页面接口越权需要登录登录之后访问超出权限的数据。两者容易混淆漏洞报告描述要区分清楚。越权 vs SQL 注入SQL 注入是控制 SQL 语句执行越权是业务逻辑缺陷没有注入语句SQL 语句本身没有问题缺少业务权限判断。八、实战漏洞报告简单模板SRC 提交参考漏洞类型水平越权漏洞漏洞描述系统订单查询接口后端未校验订单数据归属普通用户可修改 order_id 参数读取其他用户订单信息造成用户隐私泄露。复现步骤使用账号 userA 登录系统Burp 抓包访问订单接口修改 order_id 参数为其他用户订单 ID服务端返回其他用户订单详情漏洞危害攻击者可遍历 order_id 批量获取大量用户订单、个人隐私信息修复建议后端增加校验查询订单时校验订单 ownerid 与当前登录用户 ID 一致。结尾越权漏洞属于业务逻辑漏洞没有复杂 Payload但是在真实渗透、SRC 挖掘中出现频率极高。很多开发很容易忽略 “数据归属校验” 这个点只做登录校验却不校验这条数据是不是当前用户的。记住核心判断逻辑登录成功不等于有权操作这条数据必须校验数据归属关系。水平越权看同账号之间的数据隔离垂直越权看高低角色功能隔离。新手学习 Web 安全一定要重视业务逻辑漏洞。很多时候防火墙、WAF 可以拦截注入、XSS但是很难拦截越权因为越权请求都是正常业务请求只是访问了不属于自己的数据。读完本文大家可以在 DVWA、WebGoat 靶场找到越权模块练习自己搭建多账号环境亲手抓包修改参数复现加深理解。如果对你有帮助欢迎点赞、收藏后续会持续更新 Web 安全漏洞复现系列文章。一次简单越权漏洞复现带你看懂权限控制缺陷前言在 Web 安全漏洞中越权漏洞属于业务逻辑类漏洞没有复杂的内存操作、不需要特殊的 Payload却是各类 SRC、渗透测试、CTF Web 题目里高频出现的一类漏洞。很多新手刚接触 Web 安全时会优先学习 SQL 注入、XSS 跨站脚本、文件上传这类有明显特征的漏洞很容易忽略越权。越权漏洞本质不是语言、框架本身的底层漏洞而是开发者在做业务权限校验时考虑不周没有在服务端做严格的身份与权限校验仅仅依靠前端控制页面展示、依靠客户端传参判断用户身份。很多人觉得越权很难理解其实一句话概括A 用户可以直接访问、查看、修改 B 用户才有权限操作的数据这就是越权。越权分为两大类型水平越权、垂直越权这也是本文重点讲解的核心。本文会搭建简易测试环境完整复现水平越权拆解漏洞原理、漏洞成因、复现步骤、漏洞危害、修复方案同时区分水平越权和垂直越权还会补充实战中挖掘越权的常用思路。适合零基础入门 Web 安全、准备 SRC 漏洞挖掘、学习业务逻辑漏洞的同学阅读。⚠️ 免责声明本文所有内容仅用于本地自建靶场学习、安全授权环境测试文中演示的漏洞环境仅限内网本地搭建。严禁在未授权的网站、业务系统上进行漏洞测试未经授权的渗透测试、越权访问属于违法行为一切违规行为由操作者自行承担法律责任。一、越权漏洞基础概念1.1 什么是越权Web 系统在设计时会给不同用户分配不同权限普通用户只能看自己的数据管理员可以查看全部用户数据。越权就是用户绕过系统权限判断访问超出自己身份允许范围的数据或者功能。越权分为两大类这是面试、SRC 提交漏洞报告里必须分清的水平越权同级别越权同角色、同权限等级的用户互相访问对方的数据。举例用户 Aid1001、用户 Bid1002都是普通会员。A 修改请求参数直接读取 B 的个人订单、个人资料A 和 B 权限级别相同只是数据归属不同这就是水平越权。垂直越权高低权限越权低权限账号直接使用高权限管理员功能。举例普通用户直接访问后台管理员页面、新增用户、删除数据普通用户没有管理员权限直接拿到管理员功能属于垂直越权。简单记忆水平越权 平级之间偷看别人的数据垂直越权 低权限账号拿到管理员功能1.2 越权漏洞产生的根本原因一句话只在前端做权限判断后端没有二次校验用户身份和数据归属关系。很多开发的错误写法前端页面隐藏按钮认为用户看不到就不能操作页面请求使用user_id、order_id这类参数直接从客户端 GET/POST 传入后端拿到参数后直接去数据库查询这条记录没有校验这条记录是不是当前登录用户拥有的数据。前端的所有内容、参数用户都可以通过 Burp Suite 修改。前端隐藏按钮、灰色输入框仅仅是视觉上的限制不能作为安全防护。任何权限校验必须在服务端完成。1.3 越权漏洞的危害越权漏洞看起来没有执行代码、拖库那么震撼但业务危害往往很大水平越权泄露其他用户手机号、收货地址、订单信息、身份证等隐私数据修改他人订单、取消别人业务申请。垂直越权普通用户直接新增、删除账号修改全站配置接管整个后台系统。企业场景越权可批量爬取大量用户隐私数据造成大量信息泄露违反《网络安全法》《个人信息保护法》。漏洞上报越权漏洞在 SRC 平台属于中高危漏洞根据影响范围定级。二、靶场环境准备为了方便复现我们搭建简易 PHPMySQL 靶场模拟一个订单查询系统。环境说明本地搭建使用 PHPStudy / XAMPPMySQL 数据库浏览器 Burp Suite 抓包工具。2.1 数据库表设计创建用户表user_infoidusernamepasswordrole1userA123456user2userB123456user3adminadmin123admin创建订单表order_listorder_idorder_contentowner_userid1001手机订单11002耳机订单2业务逻辑用户登录之后通过传入 order_id 查看订单详情正常逻辑用户 userAid1只能查看 owner_userid1 的订单order_id1001用户 userBid2只能查看 owner_userid2 的订单order_id10022.2 存在漏洞的后端代码存在水平越权缺陷?php session_start(); // 获取前端传过来的订单id $order_id $_GET[order_id]; $conn mysqli_connect(localhost,root,root,test); // 直接根据order_id查询订单没有校验订单归属 $sql select * from order_list where order_id $order_id; $result mysqli_query($conn,$sql); $row mysqli_fetch_assoc($result); echo 订单内容.$row[order_content]; echo 订单所属用户ID.$row[owner_userid]; ?漏洞关键点后端拿到 order_id 之后仅仅查询 order_id 对应的记录没有判断当前登录 session 里的用户 id是否等于订单的 owner_userid。只要修改 order_id 参数任何人都能读取任意订单。正确安全代码逻辑拿到 order_id 之后额外增加条件where order_id$order_id and owner_userid 当前登录用户id双重限制。三、水平越权完整复现步骤步骤 1登录 userA 账号打开系统登录页面输入账号 userA密码 123456登录成功。登录之后服务端 session 记录当前用户 id1。访问订单页面查询自己订单请求 URLhttp://127.0.0.1/order.php?order_id1001页面返回 userA 自己的手机订单正常访问。步骤 2抓包修改参数尝试越权访问 userB 订单打开 Burp Suite开启代理抓包保持 userA 账号处于登录状态Cookie、Session 不变依然是 userA 身份。修改 URL 参数把 order_id 改为 1002http://127.0.0.1/order.php?order_id1002发送请求页面直接返回耳机订单所属用户 ID2。✅ 漏洞复现成功userA 在自己账号登录状态下直接查看 userB 的订单数据。重点全程没有切换账号Session 还是 userA仅仅修改 GET 请求里的 order_id 参数就读取其他用户数据典型水平越权。步骤 3思考拓展POST 型参数越权很多业务不是 GET 传参而是 POST 表单提交原理完全一样。比如修改个人资料接口POST 参数userid1。登录 userA抓包把 POST 参数 userid 改成 2提交请求如果后端直接修改 id2 用户资料就产生水平越权可以修改别人资料。四、垂直越权简单演示思路同样这套系统普通用户角色为 user管理员角色 admin管理员地址/admin/user_list.php功能查看所有账号。如果系统仅仅在前端判断角色后端没有校验角色权限。普通用户登录后直接在浏览器访问/admin/user_list.php成功进入管理员页面查看全部账号就是垂直越权。垂直越权常见场景后台管理页面、用户新增接口、数据删除接口。五、实战挖掘越权的常用思路渗透测试实战技巧学会复现之后我们来看真实 SRC 挖漏洞时怎么寻找越权寻找可控 ID 类参数URL、POST 请求里面常见参数userid、id、uid、order_id、goods_id、article_id、card_id、record_id这类数字 ID 是越权最高发位置。拿到 A 用户的 ID替换成 B 用户 ID 尝试访问。准备两个测试账号挖掘水平越权必备注册两个普通账号 A、B。先用 A 操作产生一条业务数据拿到数据 ID保持 A 登录修改 ID 为 B 的数据 ID看是否能读取 / 修改。观察 Cookie 与 Session权限是依托 Session/Cookie 识别身份。只要 Cookie 不变代表当前用户身份不变只修改请求参数测试越权。增删改查接口全部测试不仅仅是查询接口读数据修改、删除、提交类接口越权危害更大查询越权 → 信息泄露修改 / 删除越权 → 篡改他人业务数据。测试垂直越权注册低权限普通账号直接尝试访问后台管理地址、管理员接口抓包查看管理员接口请求用普通账号 Cookie 重放请求。注意 Cookie 中存放用户 ID 的情况部分系统直接把 uid 写在 Cookie 里面修改 Cookie 内 uid 值重放请求也可能触发越权。越权测试常见误区❌ 误区 1页面看不到按钮代表没有漏洞页面按钮是前端渲染Burp 可以直接构造请求调用接口。❌ 误区 2需要登录就不存在越权越权前提就是登录登录之后访问不属于自己的数据。❌ 误区 3参数是 POST 就不会越权GET 和 POST 只是传参方式权限校验缺陷和提交方式无关。六、越权漏洞的修复方案开发必看漏洞报告必备越权的核心修复思路一句话所有接口在服务端校验两层权限角色权限 数据归属权限。水平越权修复每次查询、修改、删除数据接口时在 SQL 语句增加当前登录用户 ID 的限制条件。示例安全 SQLselect * from order_list where order_id ? and owner_userid 当前登录用户ID无论前端传入什么 order_id数据库只会查询属于当前登录用户的数据。不要信任前端传入的 userid、ownerid用户身份必须从 Session、Token 里面获取不能由客户端提交。垂直越权修复接口访问前在服务端校验当前用户角色。访问管理员接口先读取 Session 里用户角色如果角色不是 admin直接拒绝访问返回 403 无权限不能只前端隐藏入口。通用安全加固建议用户身份信息用户 ID、角色保存在服务端 Session 或者 JWT Token不能由前端可控参数传入禁止直接使用前端传递的 ID 作为唯一查询条件必须校验数据归属统一权限中间件所有接口统一做权限拦截不要每个接口手写权限容易漏写权限校验放在后端前端仅做页面展示优化前端不承担安全控制上线前业务逻辑测试使用多账号交叉测试覆盖增删改查所有接口日志记录敏感操作当出现越权访问行为能够告警溯源。七、越权和其他漏洞对比容易混淆的知识点越权 vs 未授权访问未授权访问不需要登录直接访问页面接口越权需要登录登录之后访问超出权限的数据。两者容易混淆漏洞报告描述要区分清楚。越权 vs SQL 注入SQL 注入是控制 SQL 语句执行越权是业务逻辑缺陷没有注入语句SQL 语句本身没有问题缺少业务权限判断。八、实战漏洞报告简单模板SRC 提交参考漏洞类型水平越权漏洞漏洞描述系统订单查询接口后端未校验订单数据归属普通用户可修改 order_id 参数读取其他用户订单信息造成用户隐私泄露。复现步骤使用账号 userA 登录系统Burp 抓包访问订单接口修改 order_id 参数为其他用户订单 ID服务端返回其他用户订单详情漏洞危害攻击者可遍历 order_id 批量获取大量用户订单、个人隐私信息修复建议后端增加校验查询订单时校验订单 ownerid 与当前登录用户 ID 一致。结尾越权漏洞属于业务逻辑漏洞没有复杂 Payload但是在真实渗透、SRC 挖掘中出现频率极高。很多开发很容易忽略 “数据归属校验” 这个点只做登录校验却不校验这条数据是不是当前用户的。记住核心判断逻辑登录成功不等于有权操作这条数据必须校验数据归属关系。水平越权看同账号之间的数据隔离垂直越权看高低角色功能隔离。新手学习 Web 安全一定要重视业务逻辑漏洞。很多时候防火墙、WAF 可以拦截注入、XSS但是很难拦截越权因为越权请求都是正常业务请求只是访问了不属于自己的数据。读完本文大家可以在 DVWA、WebGoat 靶场找到越权模块练习自己搭建多账号环境亲手抓包修改参数复现加深理解。如果对你有帮助欢迎点赞、收藏后续会持续更新 Web 安全漏洞复现系列文章。如何系统学习网络安全网络安全作为数字时代的核心技术基石已成为保障各行业安全稳定运行的坚实屏障。筑牢网络安全的防线掌握先进的防护策略和技能正上升为国家与企业发展的战略优先级。构建稳固的网络安全能力是一个体系的工程需要从夯实基础理论出发持续深化到攻防对抗与应急响应的实战层面。如果你是准备学习网络安全黑客或者正在学习我可以把我自用的360独家内部资料分享给你包含以下内容你应该能用得上①网络安全学习路线②20份渗透测试电子书③安全攻防357页笔记④50份安全攻防面试指南⑤安全红队渗透工具包⑥网络安全必备书籍⑦100个漏洞实战案例⑧安全大厂内部视频资源⑨历年CTF夺旗赛题解析一、网络安全黑客学习路线网络安全黑客学习路线形成网络安全领域所有的知识点汇总它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。二、网络安全教程视频我们在看视频学习的时候不能光动眼动脑不动手比较科学的学习方法是在理解之后运用它们这时候练手项目就很适合了。三、网络安全CTF实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这里带来的是CTFSRC资料HW资料毕竟实战是检验真理的唯一标准嘛~四、网络安全面试题最后我们所有的作为都是为就业服务的所以关键的临门一脚就是咱们的面试题内容所以面试题板块是咱们不可或缺的部分这里我给大家准备的就是我在面试期间准备的资料。网安其实不难难的是坚持和相信自己我的经验是既然已经选定网安你就要相信它相信它能成为你日后进阶的高效渠道这样自己才会更有信念去学习才能在碰到困难的时候坚持下去。机会属于有准备的人这是一个实力的时代。人和人之间的差距不在于智商而在于如何利用业余时间只要你想学习什么时候开始都不晚不要担心这担心那你只需努力剩下的交给时间这份完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】