“三员系统”中常见的越权问题
字数 1549 2025-08-15 21:30:55
三员系统中的越权访问问题详解
一、越权访问概述
越权访问(Broken Access Control, BAC)是Web应用程序中一种常见的漏洞,被OWASP列为Web应用十大安全隐患的第二名。
1.1 越权访问的产生原理
以订单系统为例:
- 正常情况:用户A查询自己的订单,执行SQL:
select * from tablename where orderid = A - 漏洞情况:用户B修改参数为
orderid=A,执行SQL:select * from tablename where orderid = A,获取A的订单信息
1.2 越权访问的种类
1.2.1 水平越权
- 定义:相同权限等级用户之间的越权操作
- 示例:用户A和用户B同属角色X,用户A能访问用户B的私有数据
1.2.2 垂直越权
- 定义:不同权限等级用户之间的越权操作(权限提升攻击)
- 原理:Web应用未做完整权限控制,恶意用户可通过猜测URL访问高权限功能
1.2.3 交叉越权
- 定义:不同角色用户之间的越权操作
二、三员系统简介
三员系统初始有三个不同权限的管理员:
- 系统管理员
- 安全保密管理员
- 安全审计员
此外还可能包含:
- 三员的子用户
- 普通用户(可能进一步细分如操作员、监控员等)
特点:权限划分细致且众多,权限控制难度高,越权漏洞概率高
三、越权访问测试方法
3.1 三员之间的交叉越权测试
- 登录A管理员,执行功能x,抓取请求包
- 退出A,登录B管理员,抓取B的COOKIE
- 将x功能包中的COOKIE替换为B的COOKIE
- 发送修改后的请求包
- 验证请求是否成功
注意事项:
- 身份认证可能不通过COOKIE,需替换系统认证身份的关键字段
- 遇到COOKIE共用的系统,直接替换当前用户测试
- 需先排除未授权漏洞和COOKIE退出不清除问题
- 常见于同一功能模块下的不同子功能
3.2 三员管理员的垂直越权测试
测试步骤:
- 抓取角色添加功能请求(如roles=1)
- 修改角色字段值(如改为roleid=2)
- 发送请求并验证是否成功
注意事项:
- 角色字段可能不明显,需仔细分析请求中各字段含义
- 常见于用户添加、角色赋予等与权限相关的功能
3.3 三员子用户/普通用户的垂直越权测试
- 登录高权限用户C,执行功能y,抓取请求包
- 退出C,登录低权限用户D,抓取D的COOKIE
- 将y功能包中的COOKIE替换为D的COOKIE
- 发送请求并验证是否成功
3.4 三员子用户/普通用户的水平越权测试
- 登录用户E,执行功能z,抓取请求包
- 修改请求中的用户标识(如username=E改为username=F)
- 发送请求并验证F用户的数据是否被修改
四、未授权访问漏洞
4.1 定义
需要安全配置或权限认证的地址存在缺陷,导致其他用户可直接访问敏感功能或数据
4.2 常见第三方未授权访问漏洞
- MongoDB未授权访问
- Redis未授权访问
- Memcached未授权访问(CVE-2013-7239)
- JBOSS未授权访问
- VNC未授权访问
- Docker未授权访问
- ZooKeeper未授权访问
- Rsync未授权访问
4.3 Web应用本身的未授权访问
- 完全缺乏用户身份认证
- 测试方法:清空或修改请求中的认证信息后发送
- 特定页面/文件未做认证
- 常见于:可下载文件、用户手册、新添加的功能页面
五、认证信息失效机制问题
问题描述:用户注销后认证信息未立即失效,仍可用于请求
解决方案:用户退出时应同步注销服务端认证信息
六、防护建议
- 服务端实施严格的权限验证:
- 用户和角色一对一验证
- 角色和功能一对一验证
- 用户和功能一对一验证
- 对所有敏感操作进行完整的权限校验
- 及时更新存在未授权漏洞的第三方组件
- 确保注销功能完全清除服务端会话