JAVA垂直越权和水平越权

一、什么是垂直越权和水平越权

1.水平越权(Horizontal Privilege Escalation)

  • 定义:同一权限等级的用户之间,通过非法手段访问或操作其他用户的资源。
  • 示例
    • 用户A通过篡改URL参数(如订单ID)访问用户B的订单信息。
    • 用户绕过权限验证,通过API直接获取他人数据。
  • 常见原因
    • 服务端未校验资源归属,如数据库查询未关联当前用户ID。
    • 依赖客户端传递的参数(如用户ID)进行权限判断,未在服务端二次验证。
  • 防范措施
    • 强制资源关联用户:在数据库查询中,始终将当前用户ID作为条件(如 SELECT * FROM orders WHERE user_id = ? AND order_id = ?)。
    • 服务端校验:对每个请求的资源和操作进行归属检查,避免依赖客户端输入。
    • 最小化信息暴露:避免在URL或响应中直接暴露敏感ID(如使用UUID替代自增ID)。

2.垂直越权(Vertical Privilege Escalation)

  • 定义:低权限用户通过漏洞获取高权限角色的功能或数据。
  • 示例
    • 普通用户访问管理员后台或调用删除用户的API。
    • 通过修改请求参数(如角色字段)提升自身权限等级。
  • 常见原因
    • 未对敏感操作进行角色/权限校验(如直接访问管理接口)。
    • 客户端传递角色参数时未在服务端验证合法性。
  • 防范措施
    • 基于角色的访问控制(RBAC):明确定义角色权限,限制用户仅能访问其角色允许的资源。
    • 权限最小化原则:默认拒绝所有操作,仅显式开放必要权限。
    • 敏感操作隔离:管理功能与普通功能分离,并通过中间件强制校验角色(如使用 @PreAuthorize("hasRole('ADMIN')"))。

3.通用防御策略

  1. 服务端校验:所有权限检查必须在服务端完成,客户端不可信。
  2. 输入验证:禁止用户提交角色、用户ID等敏感字段,若需传递需严格校验合法性。
  3. 日志与监控:记录异常访问行为,及时发现越权尝试。
  4. 安全测试
    • 水平越权测试:使用同一角色账号尝试访问他人资源。
    • 垂直越权测试:用低权限账号尝试执行高权限操作(如修改/删除他人数据)。

4.案例对比

场景水平越权垂直越权
权限变化同一层级用户间横向访问低权限用户获取高权限功能
示例用户A查看用户B的订单普通用户删除他人账号
防御重点资源归属校验角色/权限隔离

通过严格的访问控制设计和持续的安全测试,可有效避免水平与垂直越权漏洞,保障系统安全性。

二、典型案例分析

以下是水平越权与垂直越权在具体场景中的典型案例分析,结合漏洞原理和实际应用场景进行说明:


一、水平越权案例

1. 篡改URL参数访问他人数据(电商平台)
  • 场景:用户A登录后查看自己的订单详情页,URL中订单ID为order_id=1001。若用户A将ID改为order_id=1002,直接访问后成功显示用户B的订单信息。
  • 漏洞原因:后端未校验当前用户是否拥有该订单的归属权限,仅通过订单ID查询数据。
  • 典型工具利用:使用Burp Suite修改请求参数,验证越权可能性。
2. 修改用户名参数越权登录(Pikachu靶场)
  • 场景:用户lucy登录时抓包,将请求中的username=lucy改为username=kobe,成功以kobe身份登录并查看其个人信息。
  • 漏洞原因:后端仅依赖客户端传递的用户名参数,未关联会话或二次验证用户身份。
  • 防御建议:使用会话ID或Token绑定用户身份,禁止直接通过用户名参数判断权限。
3. 遍历不可控ID获取文件(企业文档系统)
  • 场景:用户A通过修改文件路径中的ID(如file_id=516668)访问其他用户的私有文件,甚至通过遍历ID获取全站文件。
  • 漏洞原因:资源ID未加密或随机化,且未校验用户对文件的访问权限。

二、垂直越权案例

1. 普通用户执行管理员操作(Pikachu靶场)
  • 场景:管理员添加用户的请求数据包被普通用户pikachu捕获,替换其Cookie中的PHPSESSID为普通用户会话ID后重放请求,成功添加用户。
  • 漏洞原因:后端仅验证登录状态,未校验用户角色权限,导致低权限用户执行高权限操作。
  • 典型工具利用:通过Burp Suite的Authz插件替换Cookie验证越权。
2. 普通用户访问管理后台(企业系统)
  • 场景:普通用户通过直接访问管理员后台URL(如/admin/user/list),绕过前端界面隐藏限制,成功查看或修改用户列表。
  • 漏洞原因:后端未对管理接口进行角色权限控制,仅依赖前端隐藏入口。
3. 修改角色参数提升权限(用户注册功能)
  • 场景:普通用户注册时抓包,将请求中的role=user改为role=admin,后端未校验直接赋予管理员权限。
  • 漏洞原因:用户提交的角色参数未过滤,且后端未二次验证用户是否有权修改角色。

三、综合防御策略

  1. 强制资源归属校验
    所有数据操作需关联当前用户ID(如SELECT * FROM orders WHERE user_id=当前用户ID)。
  2. 基于角色的访问控制(RBAC)
    明确定义角色权限,敏感操作需显式授权(如Spring Security的@PreAuthorize注解)。
  3. 加密敏感参数
    使用UUID替代自增ID,或对资源ID进行哈希加密,防止遍历。
  4. 双重验证机制
    前端隐藏高权限功能,后端仍需强制校验用户角色和权限。
  5. 日志与监控
    记录异常请求(如频繁修改ID、尝试访问管理接口),及时告警。

四、案例对比与工具推荐

漏洞类型测试工具/方法典型场景引用
水平越权Burp Suite参数篡改、小米范检测工具电商订单ID遍历
垂直越权Authz插件、secscan-authcheck工具管理员功能重放
垂直越权(Vertical Privilege Escalation)平行越权(Horizontal Privilege Escalation)都是权限控制中常见的安全概念,特别是针对web应用程序的设计。SSRF(Server-Side Request Forgery)则是一个单独的概念。 1. **垂直越权**:在垂直层次结构中,这种越权通常发生在系统设计中,比如数据库访问。如果用户的角色或权限被错误地赋予了高于其实际级别所能访问的数据,那么就会发生垂直越权。例如,管理员角色不应能获取普通用户的敏感信息。 2. **平行越权**:平行越权是指攻击者利用同一个账号权限,但超越其正常职责范围,对同一级别的其他用户、资源或服务执行操作。这可能出现在多用户环境中的权限不一致,如在同一部门的同事之间滥用彼此权限。 3. **SSRF (Server-Side Request Forgery)**:SSRF是指服务器端代码没有正确验证请求源而接受并响应恶意第三方发起的请求。攻击者可以利用这个漏洞让服务器向任意地址发送HTTP/HTTPS请求,甚至执行命令,导致网络扫描、数据泄露等安全风险,因为它涉及的是服务器而非客户端的行为。 防止这些问题的方法包括但不限于:实施严格的权限管理策略,使用访问控制列表(ACL),对用户输入进行校验过滤,以及采用安全编码实践,限制服务器对外部接口的调用。同时,定期的安全审计更新也能帮助减少这类风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值