在当今数字化时代,Web应用安全已成为企业不可忽视的重要议题。其中,越权漏洞(Broken Access Control)因其高发性和严重危害,在OWASP Top 10 2021中高居榜首(A01),成为安全测试人员必须掌握的核心技能之一。

那么,越权漏洞怎么测试?本文将从基础概念出发,系统梳理越权漏洞的类型、成因,并结合真实案例,详细介绍手工与自动化测试方法,帮助开发者和安全测试人员全面提升漏洞发现与防御能力。
什么是越权漏洞?
越权漏洞,顾名思义,是指用户超越自身权限访问了本不应被允许的资源或执行了非法操作。这类漏洞的本质是应用程序在处理用户请求时,未对用户身份和权限进行严格校验或校验不严谨。
常见的越权类型包括:
1. 水平越权(Horizontal Privilege Escalation)
相同权限级别的用户之间互相访问对方资源。
例如:用户A可以查看或修改用户B的个人信息、订单记录等。
2. 垂直越权(Vertical Privilege Escalation)
低权限用户访问高权限用户的资源或功能。
例如:普通用户通过构造请求访问管理员的“用户管理”或“系统配置”功能。
3. 未授权访问(Unauthenticated Access)
用户在未登录或未认证的情况下,直接访问需要身份验证的资源。
越权漏洞的常见成因
服务端未校验用户与资源的归属关系:如通过
/user/123访问用户信息时,仅校验登录状态,未验证当前登录用户是否为123。权限控制逻辑过于简单:仅通过前端隐藏菜单或禁用按钮来控制权限,后端未做校验。
参数直接暴露对象引用:即IDOR(Insecure Direct Object Reference),直接在URL或请求体中暴露数据库ID、文件名等。
Token或Session处理不当:如JWT未签名、可解码修改角色信息等。
越权漏洞测试方法大全(附Checklist)
✅ 方法一:参数替换法(Find and Replace IDs)
适用场景:URL、请求头、请求体中包含用户ID、资源ID等参数。
测试步骤:
使用用户A登录,访问个人页面(如
/api/user/1001/profile)。抓包并修改ID为用户B的ID(如
/api/user/1002/profile)。发送请求,观察是否返回用户B的数据。
若返回成功,即存在水平越权。
提示:不仅限于数字ID,还可尝试替换为GUID、邮箱、用户名等。
✅ 方法二:参数污染测试(Parameter Pollution)
适用场景:应用程序对重复参数处理逻辑不一致。
测试思路:
构造请求:
GET /user?id=1001&id=1002观察服务器是否优先处理最后一个参数,从而实现越权。
✅ 方法三:修改请求方法(Change HTTP Method)
某些API在不同HTTP方法下权限校验不同。
测试示例:
若
GET /admin/config被拒绝,尝试POST /admin/config是否可访问。将
PUT改为PATCH或DELETE,测试权限绕过。
✅ 方法四:关键URI替换 + Cookie替换(手工验证)
实战案例参考(来源:CSDN,2025年1月):
某图书管理系统中:
管理员可访问
/admin/book/list普通用户无此菜单
测试步骤:
管理员登录,抓取请求:
GET /admin/book/list?page=1&limit=500普通用户登录后,直接在浏览器访问该URL。
若返回图书列表,说明存在垂直越权漏洞。
验证未授权访问:退出登录后访问该URL,若仍可访问,则为未授权漏洞。
✅ 方法五:加密ID处理(Encrypted IDs)
当ID被Base64、JWT等编码或加密时:
尝试Base64解码,查看是否包含用户ID、角色等信息。
修改解码后的内容,重新编码发送。
使用工具如
Hashcat或jwt.io分析JWT令牌。
✅ 方法六:结合Burp Suite自动化测试(使用Autorize插件)
工具优势:提高测试效率,自动对比不同权限下的请求结果。
操作步骤:
安装Jython环境,并在Burp BApp Store中安装 Autorize 插件。
获取高权限用户(如admin)的Cookie或Token。
配置Autorize,填入低权限用户的Cookie(如user1)。
开启Autorize,使用admin账号正常操作(如点击“删除用户”)。
Autorize会自动用user1的Cookie重放请求,并对比响应。
结果判断:
红色 Bypassed!:表示低权限用户可执行操作,存在越权。
绿色 Enforced!:权限控制有效,无越权。
注意:对于删除类操作,因资源已被删除,需手工复测。
越权漏洞测试Checklist(安全工程师必备)
| 序号 | 测试项 | 测试方法 |
|---|---|---|
| 1 | ID参数替换 | 修改URL、Body中的user_id、doc_id等 |
| 2 | 参数污染 | 添加重复参数,测试优先级 |
| 3 | 请求方法变更 | GET→POST、PUT→PATCH等 |
| 4 | Header校验绕过 | 修改Referer、X-Forwarded-For等 |
| 5 | 加密ID解码 | Base64、JWT、AES等解密尝试 |
| 6 | 旧版API探测 | 尝试 /api/v1/、/old/ 等路径 |
| 7 | 403/404绕过 | 使用Intruder批量枚举ID,检查实际影响 |
| 8 | 多ID类型替换 | 数字ID→GUID→邮箱 |
| 9 | 与其他漏洞结合 | IDOR + XSS、IDOR + 文件上传等 |
真实案例:一次水平越权漏洞挖掘过程
背景:某AI视频客服系统,不同二级组织数据隔离。
漏洞发现:
用户A登录,获取其渠道ID:
16277653136102571用户B登录,抓包关闭渠道请求。
使用Burp Repeater,将channelId替换为用户A的ID。
请求返回“操作成功”,但用户A的渠道实际被关闭。
结论:存在水平越权漏洞,攻击者可操控其他组织的业务。
修复方案:服务端增加校验,确保channelId与当前登录用户的组织ID绑定。
如何防御越权漏洞?
服务端强制权限校验:每个敏感请求都需验证用户是否有权操作该资源。
最小权限原则:用户仅拥有完成任务所需的最低权限。
使用间接引用映射(IRMA):避免直接暴露数据库ID,使用映射表转换。
定期安全审计:结合自动化工具与人工测试,持续检测越权风险。
日志监控与告警:记录异常访问行为,及时发现越权尝试。
越权漏洞看似简单,却往往隐藏在复杂的业务逻辑之中。“越权漏洞怎么测试” 不仅是一个技术问题,更是一种安全思维的体现——永远不要信任客户端输入。
通过本文介绍的手工测试方法、自动化工具(如Burp Autorize)以及系统化的Checklist,你可以更高效地发现和验证越权漏洞。无论是开发者还是安全测试人员,都应将权限控制作为开发与测试的核心环节,共同构建更安全的数字世界。
行动建议:立即对你的系统进行一次越权漏洞扫描,尤其是“增删改查”类接口,往往是最容易被忽视的风险点。





















