一、权限控制缺陷核心原理:权限边界的 "破防" 逻辑
权限控制是 Web 应用安全的核心防线,其本质是 "验证用户是否有权执行某操作 / 访问某资源" 。当这套验证机制存在设计漏洞或实现缺陷时,攻击者就能通过绕过验证、篡改标识等方式,获取本不应拥有的权限,这就是权限控制缺陷类漏洞的核心逻辑。
这类漏洞的根源通常分为三类:
验证位置错误:将权限验证放在前端(如仅用 JS 判断),而非后端核心逻辑中,攻击者可直接绕过前端限制;
标识篡改未校验:依赖用户可控的参数(如用户 ID、角色 ID)标识权限,却未校验该参数与当前登录用户的关联性;
默认权限过宽:接口或资源默认配置为 "允许所有用户访问",未明确设置权限白名单。
下面针对常见的 4 种漏洞类型,逐一拆解原理与实战技巧。
二、核心漏洞类型:原理 + 实战落地
(一)越权访问:横向与纵向的 "权限跨界"
越权访问是最常见的权限控制缺陷,指攻击者突破自身权限边界,访问 / 操作其他用户或更高权限的资源,分为水平越权和垂直越权两类。
- 水平越权:同级别用户的 "资源偷取"
原理:同一权限等级的用户(如普通用户 A 和普通用户 B),本应只能访问自己的资源,但应用未校验 "请求的资源归属",导致 A 可访问 B 的资源。
核心场景:用户信息查询、订单查看、个人数据修改等。
实战测试步骤:
登录用户 A 的账号,访问目标功能(如 "查看个人订单"),抓包获取请求 URL:https://xxx.com/api/order?userId=123(123 是 A 的用户 ID);
保持登录状态不变,将请求中的userId改为其他普通用户的 ID(如 124,可通过注册新账号、爆破或信息泄露获取);
发送请求,若能返回用户 124 的订单数据,则存在水平越权漏洞。
实战案例:某电商平台的 "我的地址" 接口为/api/address?uid=567,用户登录后修改uid为 568,直接返回了其他用户的收货地址、电话等敏感信息。 - 垂直越权:低权限用户的 "权限升级"
原理:低权限用户(如普通用户)通过构造请求,访问或执行高权限用户(如管理员)才能操作的功能,核心是应用未校验用户的角色等级。
核心场景:管理员后台登录、数据删除 / 修改、系统配置等。
实战测试步骤:
用普通用户账号登录系统,浏览功能时抓包,记录普通用户可访问的接口格式(如/api/user/info);
通过信息收集(如目录扫描、公开漏洞)获取管理员接口(如/api/admin/deleteUser?id=123);
用普通用户的登录态(Cookie/Token)直接请求管理员接口,若能成功执行删除操作(如返回 "删除成功"),则存在垂直越权漏洞;
进阶测试:若管理员接口需要特定参数(如role=admin),可在请求头或参数中添加该字段(如Header: X-Role: admin),尝试绕过角色校验。
实战案例:某 CMS 系统的管理员 "删除文章" 接口为/admin/article/delete?id=789,普通用户登录后,直接访问该接口并携带自己的 Cookie,成功删除了系统中的文章,原因是后端仅判断 "用户已登录",未校验是否为管理员角色。
(二)权限绕过:跳过验证的 "捷径"
原理:应用虽存在权限验证机制,但攻击者通过特殊字符、参数篡改、路径绕过等方式,让验证逻辑失效,直接访问目标资源。与越权访问的区别是:越权是 "用自己的权限访问他人 / 更高权限资源",权限绕过是 "直接跳过权限验证步骤"。
常见绕过方式与实战:
路径绕过:利用后端路径解析漏洞,如管理员后台为/admin/login.html,尝试访问/admin/.../admin/login.html、/admin//login.html(双斜杠)、/admin/login.html%20(空格),部分服务器会忽略多余字符,直接放行;
参数篡改:若验证逻辑依赖前端参数(如isAdmin=false),将其改为isAdmin=true,或删除该参数,可能绕过校验;
请求方法伪造:若后端仅限制GET请求的权限,尝试用POST/PUT方法请求同一接口(如GET /api/admin/data改为POST /api/admin/data);
Cookie/Token 伪造:若 Token 生成逻辑简单(如仅基于用户 ID),伪造管理员的 Token(如用户 ID=0 通常为管理员),或修改 Cookie 中的权限标识(如auth=1改为auth=999)。
实战案例:某系统的权限验证逻辑为 "若请求路径包含/admin/,则校验管理员 Cookie",攻击者访问/admin...;/data,后端解析时将admin...;/识别为/admin/,但校验逻辑未生效,直接返回了管理员数据。
(三)未授权访问:无需登录的 "公开资源"
原理:敏感接口或资源未设置任何权限验证,攻击者无需登录(无 Cookie/Token)即可直接访问,属于最严重的权限控制缺陷之一。
核心场景:数据库备份文件、接口文档、用户数据列表、后台登录页未做访问限制等。
实战测试步骤:
退出所有登录状态,清除浏览器 Cookie,或用无痕模式访问目标;
通过目录扫描工具(如 Dirsearch、Burp Suite 的 Site Map)查找敏感路径 / 文件,如/backup/(备份文件)、/api/v1/user/list(用户列表接口)、/admin/(管理员后台);
直接访问这些路径,若能返回敏感数据(如用户账号密码、数据库备份包)或进入后台页面,则存在未授权访问漏洞。
实战案例:某企业内部系统的 "员工信息接口" 为/api/employee/all,未做任何权限校验,未登录状态下直接访问,返回了所有员工的姓名、工号、薪资、身份证号等完整信息,造成严重数据泄露。
三、防御建议:筑牢权限控制的 "三道防线"
后端校验是核心:所有权限验证逻辑必须放在后端,前端仅做展示限制(如隐藏按钮),不能作为安全防护;
最小权限原则:用户仅能获取完成操作所需的最小权限(如普通用户无删除权限,管理员仅能管理指定模块);
严格校验资源归属:涉及用户个人资源的接口(如订单、地址),必须校验 "请求的资源 ID 是否属于当前登录用户",而非仅依赖前端传入的 ID;
角色与权限分离:用独立的权限系统管理角色(如普通用户、管理员),接口需同时校验 "登录状态" 和 "角色权限";
避免用户可控标识:不使用用户可篡改的参数(如 URL 中的 userID)作为权限判断依据,可改用后端存储的 Session 或 Token 中的用户信息;
接口权限白名单:所有接口默认设置为 "禁止访问",仅对授权角色 / 用户开放白名单;
定期测试与审计:上线前通过渗透测试检测权限缺陷,定期审计接口权限配置,排查默认开放的敏感资源。