访问控制篇之垂直越权

admin 2026-03-09 02:18:56 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文解析垂直越权的定义、成因与攻击场景,核心在于服务端未校验权限或过度信任前端输入。文章详述未授权访问、参数篡改、路径枚举等漏洞形式及其导致的系统被控与数据泄露风险。结合PortSwigger靶场实例,演示了修改角色ID与密码泄露的利用过程。建议开发中必须落实服务端统一鉴权,严防客户端可控的权限参数,以构建安全的访问控制体系。 综合评分: 89 文章分类: WEB安全,渗透测试,漏洞分析,实战经验


cover_image

访问控制篇之垂直越权

原创

一个努力的学渣 一个努力的学渣

一个努力的学渣

2026年3月7日 11:01 北京

免责声明

本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!

定义

  • 垂直越权,也称为权限提升,是指低权限用户(如普通用户)能够执行高权限用户(如管理员)的功能,或访问高权限用户才能访问的数据
  • 还有一种叫降权,高权限用户到低权限用户,一般只有非常特殊的情况才会用到
  • 核心点: 未校验角色 / 权限(你有没有资格用)

为什么会出现垂直越权

  • 垂直越权的核心问题:应用程序在服务端未能对用户的操作权限进行有效的、一致的校验,仅依赖客户端(如前端页面、按钮隐藏)来控制功能访问

  • 具体来说,通常有以下几点原因:

  • 仅依赖前端进行权限控制:

  • 这是最常见的原因。开发者将权限判断放在前端,比如根据用户角色显示或隐藏某些按钮、菜单。然而,攻击者可以直接通过抓包、构造请求等方式,绕过前端限制,直接向后端发送高权限操作的请求。如果后端没有再次验证权限,就会导致越权。

  • 缺乏统一的权限校验框架:

  • 每个API端点各自实现权限检查,有的端点可能忘记了添加校验,或者校验逻辑存在缺陷。特别是对于新增的功能或快速迭代的代码,开发者可能只关注业务逻辑,而忽略了权限控制

  • 错误地信任用户输入的角色信息:

  • 服务器从客户端提交的数据(如Cookie中的role=user、JWT中的角色字段)中读取用户角色,而没有在服务端进行二次验证或签名验证。如果这些信息可以被篡改,攻击者就可以将自己伪装成管理员

  • 不安全的默认配置或管理接口暴露:

  • 一些默认的管理员接口(如/admin、/console)在部署后没有移除或未做严格的访问控制,导致普通用户也能访问。

  • IDOR(不安全的直接对象引用)的变体:

  • 当高权限操作所操作的资源ID可以被枚举,且未校验用户权限时,也属于垂直越权。例如,管理员删除用户的接口是/deleteUser?userId=123,普通用户可能无权调用这个接口(接口本身可能对所有人开放),但如果服务端没有检查调用者是否为管理员,那么普通用户就能删除任意用户,这既是水平越权(删除其他用户)也是垂直越权(执行了管理员操作)

常见的攻击场景

未授权访问(最严重、最基础的垂直越权)

  • 核心原理:服务端既没校验登录状态,也没校验权限,任何人(无需登录)都能直接调用管理员 / 敏感接口

  • 技术实现:

  • 攻击者直接在浏览器 / 抓包工具请求敏感接口

  • 无需 Token、Cookie、登录状态

  • 接口直接返回数据 / 执行操作

  • 漏洞根源:

  • 接口未加登录拦截

  • 未做任何权限控制

接口路径直接访问 / 枚举越权

  • 核心原理:后端只在前端菜单隐藏管理功能,但接口未做权限校验(不校验是否是管理员),低权限用户登录后,直接通过「已知 / 猜解」的管理员接口路径访问

  • 技术实现:

  • 普通用户正常登录系统

  • 知道 / 枚举管理员接口地址

  • 直接请求该接口,绕过前端权限控制

  • 常见枚举路径:

  • /admin/user/list

  • /admin/user/delete

  • /admin/config/update

  • /admin/log/clear

  • /admin/reset/password

权限参数篡改越权(高频漏洞)

  • 核心原理:后端信任前端传入的「角色、权限等级、身份标识」,攻击者通过修改 Cookie、请求头、POST 参数中的权限字段实现提权

  • 技术实现:

  • Cookie篡改

# 原 Cookierole=user; user_id=1001
# 篡改为管理员role=admin; user_id=1001
  • 请求体篡改
# 原请求头X-User-Level: 1X-User-Role: normal
# 篡改后X-User-Level: 99X-User-Role: admin
  • POST参数篡改
// 个人信息修改接口{  "user_id": 1001,  "role": "user" // 篡改为 "admin"}

前端权限控制绕过(只藏不锁)

  • 核心原理:权限只在前端控制

  • 通过 JS 隐藏管理员菜单

  • 通过路由守卫限制页面访问,但后端接口完全不校验权限

  • 技术实现:

  • 前端禁用 / 隐藏管理员按钮、菜单

  • 攻击者:

  • 浏览器控制台修改 DOM 显示菜单

  • 直接构造请求调用管理员接口

  • 后端不做任何权限判断 → 越权

  • 漏洞根源:前端只能做展示,不能做鉴权,所有鉴权必须在服务端完成

身份标识越权(用户 ID/Token 提权)

  • 核心原理:

  • 通过篡改user_id、uid、token中的身份信息,直接变成管理员用户

  • 技术实现:

  • 低权限用户登录,拿到自己的 Token / 用户 ID

  • 篡改请求中的用户 ID 为管理员 ID(如 1、0、admin 等)

  • 后端以篡改后的 ID 执行操作

敏感操作接口未鉴权(高危)

  • 核心原理:

  • 重置密码、删除数据、批量导出、系统配置等高风险操作,只做了登录校验,未做权限校验

  • 技术实现:

  • 普通用户登录

  • 调用「重置任意用户密码」「清空日志」「批量删除」接口

  • 接口直接执行,无权限拦截 ,重置管理员 / 任意用户密码 → 直接接管账号

权限逻辑缺陷 / 配置错误越权

  • 核心原理: RBAC 权限体系设计错误

  • 角色权限配置错误

  • 权限继承混乱

  • 接口权限码绑定错误 , 导致低权限角色天生拥有高权限

  • 技术实现:

  • 权限系统配置:普通用户角色被误配管理员权限

  • 接口权限码写错,普通权限可访问

  • 新上线接口忘记绑定权限,默认所有人可访问

  • 漏洞根源:

  • 权限设计不规范

  • 上线未做权限回归测试

漏洞危害

垂直越权的危害通常比水平越权更为严重,因为它直接导致权限失控,使攻击者获得高权限

  • 数据泄露:获取所有用户的数据、系统配置、数据库信息等。
  • 数据篡改/破坏:修改或删除任何数据,包括用户信息、业务数据、系统设置等。
  • 系统控制:如果获得管理员权限,攻击者可能进一步上传webshell、添加系统用户、控制整个服务器。
  • 业务瘫痪:关闭服务、篡改关键业务逻辑,导致业务无法正常运行。
  • 法律与合规风险:严重的数据泄露事件可能导致巨额罚款和声誉损失。

靶场

https://portswigger.net/web-security/all-labs#access-control-vulnerabilities

实验一:用户角色可在用户配置中进行修改

测试:直接修改邮箱,然后在请求正文中的JSON数据中增加角色ID

roleid:角色id,可尝试修改

成功垂直越权

实验二:用户ID通过请求参数进行密码泄露

测试:修改用户名,然后源代码中出现密码,导致密码泄露

成功垂直越权


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:一个努力的学渣 一个努力的学渣 一个努力的学渣《访问控制篇之垂直越权》

访问控制篇之垂直越权 网络安全文章

访问控制篇之垂直越权

文章总结: 本文解析垂直越权的定义、成因与攻击场景,核心在于服务端未校验权限或过度信任前端输入。文章详述未授权访问、参数篡改、路径枚举等漏洞形式及其导致的系统被
评论:0   参与:  0