访问控制水平越权和垂直越权实例
字数 1935 2025-08-22 12:23:41
访问控制漏洞与权限升级详解
1. 访问控制基础概念
访问控制是指对授权执行操作或访问资源的人或事进行限制的安全机制。在网络应用程序中,访问控制依赖于:
- 身份验证:确认用户的身份
- 会话管理:确定同一用户进行的后续HTTP请求
- 访问控制:决定用户是否被允许执行特定操作
访问控制被破坏的情况很常见,且往往带来严重的安全漏洞。
2. 访问控制类型
2.1 垂直访问控制
限制特定类型用户访问敏感功能的机制。不同类型的用户可以访问不同的应用程序功能。
示例:
- 管理员可以修改或删除任何用户的账户
- 普通用户无法访问这些管理操作
2.2 横向访问控制
限制特定用户访问特定资源的机制。不同用户可以访问同一类型资源的子集。
示例:
- 银行应用允许用户查看自己的交易记录
- 但不能查看其他用户的账户信息
2.3 上下文相关的访问控制
根据应用程序状态或用户交互情况限制对功能和资源的访问。
示例:
- 电商网站阻止用户在付款后修改购物车内容
3. 访问控制漏洞类型
3.1 垂直权限升级
用户访问了不允许访问的功能。
典型表现:
- 非管理员用户访问管理员页面并执行管理操作
3.1.1 不受保护的功能
应用程序对敏感功能未实施任何保护。
示例场景:
- 管理功能URL为:
https://insecure-website.com/admin - 该URL对所有用户开放,而不仅限于管理员
发现方式:
- 直接浏览相关URL
- 通过robots.txt文件发现:
https://insecure-website.com/robots.txt - 使用字典攻击猜测敏感功能位置
3.1.2 隐藏但可预测的URL
示例:
- 管理功能URL为:
https://insecure-website.com/administrator-panel-yb556 - 虽然不易猜测,但可能通过以下方式泄露:
- 前端JavaScript代码
- 网络请求响应
- 历史记录或缓存
前端代码泄露示例:
<script>
var isAdmin = false;
if (isAdmin) {
var adminPanelTag = document.createElement('a');
adminPanelTag.setAttribute('href', 'https://insecure-website.com/administrator-panel-yb556');
adminPanelTag.innerText = 'Admin panel';
}
</script>
3.1.3 基于参数的访问控制
应用程序将用户权限信息存储在用户可控的位置:
- 隐藏字段
- Cookie
- 查询字符串参数
不安全示例:
https://insecure-website.com/login/home.jsp?admin=true
https://insecure-website.com/login/home.jsp?role=1
风险:用户可以修改这些参数来提升权限。
3.2 横向权限升级
用户访问了同一级别但属于其他用户的资源。
示例:
- 用户A通过修改ID参数访问用户B的数据
https://bank.com/account?user_id=123→ 修改为user_id=456
4. 防御措施
4.1 基本原则
- 最小权限原则:只授予必要的权限
- 默认拒绝:默认情况下拒绝所有访问
- 职责分离:关键操作需要多个角色参与
4.2 技术实现
- 服务器端验证:永远不要依赖客户端验证
- 基于角色的访问控制(RBAC):
- 明确定义角色和权限
- 用户只能访问其角色允许的功能
- 基于属性的访问控制(ABAC):
- 根据用户属性、资源属性等进行动态控制
- 记录和监控:
- 记录所有敏感操作
- 监控异常访问模式
4.3 代码层面
- 避免硬编码权限检查:
- 使用集中式的权限检查框架
- 防止IDOR(不安全的直接对象引用):
- 使用间接引用映射
- 实施资源所有权验证
- 会话管理:
- 使用安全的会话令牌
- 及时使会话失效
5. 测试方法
- 功能测试:
- 尝试直接访问管理URL
- 修改URL参数测试权限
- 参数篡改:
- 修改cookie、隐藏字段等
- 权限枚举:
- 尝试不同角色ID或权限标志
- 自动化扫描:
- 使用专业工具扫描访问控制漏洞
6. 靶场练习
- 不受保护的管理功能:
- 靶场地址:https://portswigger.net/web-security/access-control/lab-unprotected-admin-functionality
- 不可预测URL的管理功能:
- 靶场地址:https://portswigger.net/web-security/access-control/lab-unprotected-admin-functionality-with-unpredictable-url
- 由请求参数控制的用户角色:
- 靶场地址:https://portswigger.net/web-security/access-control/lab-user-role-controlled-by-request-parameter
7. 总结
访问控制是Web应用安全的核心组件,其漏洞可能导致严重的数据泄露和系统破坏。开发人员应:
- 实施严格的服务器端权限检查
- 避免将权限信息暴露给客户端
- 定期审计权限设置和访问日志
- 对敏感操作实施多因素验证
安全团队应定期进行权限测试,确保没有垂直或横向权限升级的风险。