权限绕过漏洞怎样测试?

wen 开源项目 79

从原理到实战的完整测试指南

目录导读

  1. 什么是权限绕过漏洞?(核心概念与危害)
  2. 权限绕过漏洞的常见类型(水平/垂直/未授权访问)
  3. 权限绕过漏洞测试前的准备(工具与环境)
  4. 权限绕过漏洞测试的5大实战方法
  5. 漏洞修复与防御建议
  6. 常见问题解答(FAQ)

什么是权限绕过漏洞?

用户提问: 权限绕过和普通越权漏洞有什么不同?

权限绕过漏洞怎样测试?

专业解答: 权限绕过漏洞(Authorization Bypass)是指攻击者通过篡改请求参数、绕过身份验证逻辑、或利用系统设计缺陷,未经验证或未授权 直接访问受保护资源,它与越权漏洞(如水平越权、垂直越权)的核心区别在于:权限绕过直接跳过权限检查环节,而越权通常发生在已授权但权限范围错误的情况下。

实际案例: 某电商平台后台管理页面通过URL中的 /admin/orders?token=123 进行权限校验,如果攻击者尝试直接访问 /admin/orders 或删除 token 参数,若未返回401错误,说明存在直接的权限绕过漏洞。

核心危害:

  • 敏感数据泄露(用户信息、订单、财务数据)
  • 未授权操作(修改配置、删除数据、提升权限)
  • 系统完全控制(SQL注入+权限绕过组合攻击)

权限绕过漏洞的常见类型

类型 描述 典型测试点
未授权访问 无需登录直接访问需鉴权接口 /api/user/info/admin/dashboard
水平权限绕过 越权访问同级别其他用户数据 修改user_id=123为user_id=456
垂直权限绕过 低权限用户访问高权限接口 普通用户尝试调用管理员删除接口
认证机制绕过 绕过JWT/Token/OAuth验证 伪造Token、篡改Signature、跳过校验
URL重定向绕过 通过跳转绕过权限检查 /admin/../user/profile 路径遍历

搜索引擎优化提示: 结合《OWASP Top 10》中的“Broken Access Control”(失效的访问控制),2021年起此类漏洞上升至第1位,权重极高。


测试前的准备工作

工具清单: Burp Suite(必备)、Postman、浏览器开发者工具、SQLMap(搭配权限绕过测试)、Python脚本(批量测试)。

关键设置:

  1. 启用Burp的Intercept,捕获所有请求
  2. 安装插件:Autorize(自动越权检测)、AuthMatrix(角色矩阵测试)
  3. 准备多角色测试账号:普通用户、管理员、超管(如果有)
  4. 收集API文档或接口列表(通过爬虫或Swagger文档提取)

环境要求: 建议在授权测试环境(如预发布、测试站)进行,禁止对生产环境直接扫描。


权限绕过漏洞测试的5大实战方法

方法1:直接访问受保护接口(未授权测试)

操作步骤:

  1. 获取一个需登录才能访问的URL(如 https://example.com/api/dashboard
  2. 清空浏览器Cookie,粘贴该URL直接访问
  3. 观察返回内容:如果返回JSON数据而非跳转登录页,则存在漏洞

扩展测试: 使用Burp的“Send to Repeater”功能,将请求中的Cookie、Authorization头、Token参数全部删除,重新发送,例如删除 Cookie: session=abc123 后,若服务器返回完整用户信息,说明认证中间件未正确校验。

方法2:参数篡改(水平权限绕过)

经典场景: 用户订单查看功能 https://example.com/order?order_id=1001

测试步骤:

  1. 用普通用户A登录,获取A的订单ID=1001
  2. 修改order_id=1002(属于用户B的订单)
  3. 观察响应:如果返回B的订单详情,则存在水平权限绕过

进阶测试:

  • 遍历ID:使用Burp Intruder设置order_id为1-1000的数字包
  • 修改JSON body:POST请求中修改 {"user_id": "123"}{"user_id": "456"}
  • 尝试UUID枚举(如果ID是UUID,可尝试从注册时序、公共页面泄漏的UUID中拼接)

方法3:HTTP方法绕过(垂直权限绕过)

场景: 管理员删除用户接口 DELETE /api/admin/users/delete

低权限用户测试:

  1. 用普通用户账号发送 DELETE /api/admin/users/delete(可能返回403)
  2. 尝试将DELETE方法改为GET、POST、PUT、PATCH
  3. GET /api/admin/users/delete?user_id=123
  4. 若返回成功,说明服务器仅检查了HTTP方法,未检查实际权限

核心逻辑: 许多开发者仅在DELETE方法中做权限校验,而忽略了GET方法的相同路径。

方法4:JWT/Token篡改绕过认证

场景: 使用JWT鉴权的API(Authorization: Bearer eyJ...)

测试步骤:

  1. 解码JWT:使用jwt.io解析当前用户的Token
  2. 篡改payload:将 "role":"user" 改为 "role":"admin"
  3. 重新签名:使用弱密钥(如 secret123456admin)签名
  4. 发送篡改后的JWT:若服务器接受,则存在签名绕过

高级测试:

  • 检查是否使用了"none"算法:修改JWT头中"alg":"HS256""alg":"none",移除payload中的签名部分,发送请求。
  • 公钥混淆攻击:如果服务器错误地使用公钥作为验证密钥,可构造伪造Token。

方法5:路径遍历与参数污染

场景: 静态资源访问受限制 https://example.com/files/user123/report.pdf

测试点:

  • 尝试 https://example.com/files/../../etc/passwd(返回服务器敏感文件)
  • 参数污染:/admin?role=user&role=admin(部分框架仅取最后一个参数)
  • 使用URL编码:%2e%2e%2f 代替

工具辅助: 使用Burp的“Path Traversal”扫描器或手动fuzz。


漏洞修复与防御建议

强制统一认证校验入口

  • 使用全局中间件,对每个受保护接口强制校验,而非分散在每个Controller中

参数检查优先级

  • 永远不要信任前端传递的user_id、role等敏感参数,应从服务器Session或JWT payload中提取

JWT安全实践

  • 使用强密钥(至少256位随机字符串)、启用"jti"(JWT ID)防重放、签名算法固定为RS256(公钥/私钥对)

最小权限原则

  • 每个接口只开放必要权限,避免 通配符路由

日志审计与WAF规则

  • 记录所有权限校验失败请求(状态码401/403),配合WAF拦截请求频率异常、路径遍历特征

常见问题解答(FAQ)

Q1:权限绕过测试必须使用Burp Suite吗?
A:Burp是专业工具,但基础的测试可用浏览器开发者工具(F12->Network)直接修改请求参数或Cookie测试,批量测试推荐Burp Intruder。

Q2:测试时如何避免被WAF拦截?
A:进行低频测试(每秒1-2个请求),使用随机User-Agent和Referer,避免对关键接口暴力枚举。

Q3:发现权限绕过后是否可直接上报漏洞?
A:需先确保在授权范围内(如SRC平台或测试合同),同时只证明存在风险,不下载实际数据(如用户详情、订单明细)。

Q4:为什么我的测试环境没有发现任何绕过?
A:可能原因是:① 未使用多角色账号交叉测试 ② 未测试所有HTTP方法 ③ 目标使用了动态Token(如CSRF Token)需同时替换 ④ 未检查非标准Port或子域名下的相同接口。


权限绕过测试的核心是“不信任前端”,通过篡改、删减、遍历请求中的校验参数(Token、Session、角色、user_id),验证服务端是否对每个接口进行了独立的、完整的权限校验,结合上述5种测试方法,配合多角色账号矩阵,可系统性地发现此类漏洞,建议每个Web项目上线前至少执行一次基于OWASP的权限扫描,并定期复测。

抱歉,评论功能暂时关闭!