本文目录导读:

接口越权(Broken Access Control)是OWASP Top 10中排名第一的安全漏洞,检测接口越权需要结合自动化工具与手动测试,核心思路是更换用户身份(或未登录状态)去执行另一个用户(或管理员)才能执行的操作。
以下是系统性的检测发现方法,分为三个层面:逻辑理解、手动测试、自动化扫描。
核心检测逻辑:三种越权类型
在检测前,先明确你要找什么:
- 水平越权:普通用户A,试图操作普通用户B的数据(查看B的订单、修改B的个人信息)。
- 检测特征:用户ID、订单ID、手机号等关键参数是否可枚举或篡改。
- 垂直越权:普通用户,试图执行管理员才能做的操作(普通用户访问后台管理接口)。
- 检测特征:角色标识(如
role=admin)、接口路径(如/api/admin/)、未校验HTTP方法(如本该POST的接口用GET也能访问)。
- 检测特征:角色标识(如
- 未授权访问:未登录(无Cookie/Token),直接访问需要登录的接口。
- 检测特征:接口未校验身份凭证。
手动测试方法(最有效,能发现业务逻辑漏洞)
水平越权检测(核心步骤)
-
场景:假设有两个普通用户A和B,系统有两个接口:
GET /api/user/profile?id=123(获取用户信息)POST /api/order/delete(订单删除,参数为订单号)
-
测试流程:
- 准备两个用户:登录用户A,通过抓包工具(如Burp Suite)获取A的Cookie/Token。
- 访问A的数据:正常请求
?id=123,记录响应包(A的姓名、电话等)。 - 篡改参数:将ID改为B的ID(如124),发送请求。
- 结果判断:如果返回了B的电话、地址等信息,则存在IDOR水平越权。
- 跨用户操作:用户A删除自己的订单(订单号0001),抓包,然后用A的Token,将订单号改为B的订单号(0002)重放请求。
- 结果判断:如果B的订单被删除,则为水平越权。
垂直越权检测(核心步骤)
- 场景:普通用户试图执行管理员接口。
- 测试流程:
- 收集接口:使用管理员账号访问Web应用,通过浏览器的抓包或站点地图,记录所有管理员功能对应的接口路径(如
/api/admin/deleteUser)。 - 替换Cookie:退出管理员,登录一个普通用户。
- 重放请求:将普通用户的Cookie/Token,放到刚才记录的
/api/admin/deleteUser请求中,重放。- 结果判断:如果返回200且成功执行了操作(如删除了用户),则为垂直越权。
- 注意:不要直接进行破坏性操作(如删库、改密码),建议在测试环境或使用具有删除权限的测试用户进行。
- 收集接口:使用管理员账号访问Web应用,通过浏览器的抓包或站点地图,记录所有管理员功能对应的接口路径(如
未授权访问检测
- 场景:完全不登录,直接访问接口。
- 测试流程:在浏览器或Burp中,删除所有Cookie、清除Token(Header中的
Authorization),直接访问需要登录的接口URL(如/api/order/list)。- 结果判断:如果返回了订单列表数据而非“未登录”报错,则为未授权访问。
参数篡改的进阶技巧
- JSON参数篡改:如果接口参数是JSON格式,尝试修改其中的角色字段。
{"userId":123, "role":"user"}→{"userId":123, "role":"admin"}
- 对象引用枚举:对ID进行顺序、随机、UUID枚举。
工具:Burp Intruder 设置 Payload 为 Numbers 或 Date 或 自定义字典。
- 多参数遗漏:有些系统在增删改查时校验了某个参数(如
user_id),但批量操作或导出接口可能未校验。
自动化扫描方法(效率高,但可能漏过复杂逻辑)
使用自动化渗透工具(最推荐)
- Burp Suite Professional(付费但功能最强):
- 将浏览器代理到Burp,正常浏览应用(登录不同角色)。
- 在 Target -> Scope 设置目标范围。
- 右键目标主机,选择 Engagement tools -> Discover content 或 Scan -> Active Scan。
- 扫描完成后,查看 Issue Activity为 Insecure Direct Object References (IDOR) 或 Access Control Issues 的报告。
- OWASP ZAP(免费开源):
- 自动扫描:
Automated Scan模式,会尝试发送各种篡改请求。 - 主动扫描:启用
Access Control Testing策略,需要配置用户列表(Admin User & Regular User),ZAP会自动切换角色重放请求并对比响应。
- 自动扫描:
使用专用越权测试工具
- Autorize (Burp插件,强烈推荐):
- 原理:它会自动复制一个请求(比如手动点击了某个功能),然后用特定用户(如低权限用户、未登录用户)的Cookie替换原有的Cookie自动重放。
- 用法:在插件中设置“低权限用户”的Cookie,当你在浏览器里用管理员账号操作时,插件会自动用低权限用户Cookie去重放每个请求,并标记响应长度/状态码是否和原请求相同(相同则存在越权)。
- 优点:自动化程度极高,可以快速扫描整个应用的所有页面。
- Burp Collaborator / Repeater:结合使用,手动修改参数后反复重放。
基于图论的越权检测(高级)
- 原理:通过爬取应用,建立URL-权限-用户角色的关联图,自动生成访问控制矩阵。
- 工具:
Depesz、Jail(针对Go应用)等。 - 适用场景:大型复杂应用(微服务架构),手动测试难以覆盖全。
关键检测指标与判断标准
当你重放请求后,如何判定存在越权?
| 返回结果 | 是否越权 | 解释 |
|---|---|---|
| HTTP 200 + 返回了数据 | 是 | 最明显的标志,例如用普通用户Token请求管理员接口,成功返回了所有用户的列表。 |
| HTTP 302/301 跳转到登录页 | 否(正常) | 权限校验拦截到了,重定向了。 |
| HTTP 403 Forbidden | 否(正常) | 服务器明确拒绝了该请求。 |
| HTTP 500 服务器错误 | 可疑 | 可能是参数校验失败,也可能是因为越权导致数据格式异常崩溃,需要进一步调试。 |
| 返回了“无权限”等错误码 | 否(正常) | 系统有权限校验逻辑。 |
| 返回了其他用户的数据 | 是 | 水平越权标志。 |
| 与管理员请求相同(长度/内容一致) | 是 | 需要比对响应包。 |
实战检测流程总结(最佳实践)
- 准备阶段:创建3个测试账号(管理员、普通用户A、普通用户B)。
- 信息收集:通过抓包、阅读前端JS代码、查看API文档,梳理出所有CURD接口及其参数(尤其是ID、用户标识、角色字段)。
- 静态分析(可选):查看后端代码中是否存在
@PreAuthorize("hasRole('ADMIN')")等注解,看是否有遗漏。 - 动态测试:
- 水平:用A的Token → 请求B的数据ID。
- 垂直:用A的Token → 请求管理员的API路径。
- 未授权:清除Cookie → 请求任意API。
- 批量:测试批量查询、导出功能是否限制范围。
- 工具辅助:开启Autorize插件,使用管理员账号浏览应用,观察Autozie的告警列表。
- 结果验证:对可疑请求,通过Repeater手动修改参数确认,排除误报(例如有些接口虽然返回200,但实际只是返回了错误提示,没有泄露数据)。
- 报告:记录接口URL、请求方法、参数、使用的Cookie/Token、返回的敏感数据样本、漏洞类型(水平/垂直/未授权)。
硬骨头场景如何处理?
- 难以直接枚举的UUID:如果是
uuid(如f47ac10b-58cc-4372-a567-0e02b2c3d479),手动硬猜基本不可能,但可以尝试:- UUID泄露:查看其他接口(如评论、分享、通知)是否泄露了其他用户的UUID。
- 构造:某些系统使用
时间戳+用户ID的哈希,可以尝试自己生成。
- Token绑定IP/设备?:尝试更换IP或用户代理(User-Agent)重放。
- JWT Token:尝试修改JWT payload中的角色(如
role: user改为role: admin),或者删除JWT签名(服务端是否在校验?),很多老系统后端不校验签名,极易越权。
核心要诀: 永远不要信任客户端提交的任何参数(包括用户ID、角色、订单号),所有权限校验必须发生在服务端。 检测就是去验证这个原则是否被打破。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播