服务器端漏洞篇之访问控制漏洞与越权专题
字数 1887 2025-08-10 16:34:31
访问控制漏洞与越权专题教学文档
一、访问控制基础概念
1. 访问控制定义
访问控制(Authorization)是明确用户权限的机制,在Web应用中取决于:
- 身份验证(Authentication):确认用户身份
- 会话管理(Session Management):管理用户HTTP请求
2. 访问控制分类
从用户角度分为三类:
- 垂直访问控制:限制不同类型用户间的权限(如管理员与普通用户)
- 水平访问控制:限制同一类型用户间的权限(如用户A不能访问用户B的数据)
- 上下文相关访问控制:根据应用状态或用户交互限制权限
二、垂直越权漏洞
1. 未受保护的功能
漏洞原理:敏感功能未做访问控制限制
发现方法:
- 检查robots.txt文件
- 目录扫描
- 前端代码分析(如JavaScript中的管理路径)
靶场示例1:
- 访问robots.txt发现/admin路径
- 普通用户直接访问/admin可进入管理面板
靶场示例2:
- 检查前端JS发现管理员路径逻辑
- 直接访问该路径绕过权限检查
2. 基于参数的访问控制
漏洞原理:通过URL参数控制权限(如?admin=true)
靶场示例1:
- 发现Cookie中有"Admin=false"参数
- 修改为"Admin=true"获取管理员权限
靶场示例2:
- 在用户配置请求中发现roleid字段
- 修改roleid为管理员值(如2)提升权限
3. 配置错误导致的绕过
漏洞类型1:非标准HTTP头部覆盖
- 使用X-Original-URL或X-Rewrite-URL覆盖请求URL
- 绕过前端校验直接访问受限URL
靶场示例:
- 使用X-Original-URL: /admin访问管理功能
- 同样方法执行删除用户操作
漏洞类型2:HTTP方法限制不严
- 将POST改为GET或其他方法绕过限制
靶场示例:
- 拦截管理员权限提升请求
- 将POST改为GET并添加必要参数
- 使用普通用户会话执行请求
4. URL匹配差异
漏洞原理:
- 大小写不敏感:/ADMIN == /admin
- 文件扩展名映射:/admin.anything == /admin
- 尾部斜杠差异:/admin/ != /admin
三、水平越权漏洞
1. 基于可预测参数
靶场示例1:
- 发现URL中包含用户ID参数(如?id=123)
- 修改为目标用户ID获取其数据
2. 基于不可预测参数
靶场示例2:
- 发现使用GUID作为用户标识
- 从评论区等公开位置获取其他用户GUID
- 替换参数获取目标用户数据
3. 重定向泄漏
靶场示例3:
- 修改用户ID触发重定向
- 在重定向响应中找到泄漏的敏感数据
四、水平到垂直越权
靶场示例:
- 发现响应中包含用户密码
- 修改ID为administrator获取管理员密码
- 使用密码登录管理员账户
五、不安全的直接对象引用(IDOR)
1. 数据库对象引用
漏洞示例:
https://insecure-website.com/customer_account?customer_number=132355
- 通过修改customer_number访问不同用户数据
2. 静态文件引用
漏洞示例:
https://insecure-website.com/static/12144.txt
- 通过修改文件名获取其他用户文件
靶场示例:
- 发现聊天记录文件按数字编号
- 修改文件编号下载其他用户聊天记录
- 从中获取密码等敏感信息
六、多步骤流程漏洞
漏洞原理:多步骤功能中某一步骤缺少访问控制
靶场示例:
- 管理员执行权限提升流程:加载→提交→确认
- 普通用户直接发送确认步骤请求
- 绕过前两步的权限检查
七、基于HTTP头部的访问控制
1. Referer控制
漏洞原理:仅依赖Referer头部验证请求来源
靶场示例:
- 复制管理员请求
- 保留Referer头,替换为普通用户会话
- 绕过权限检查
2. Location控制
漏洞原理:基于地理位置限制访问
绕过方法:使用VPN等工具伪造位置
八、防护建议
- 不要依赖混淆:仅靠隐藏路径/文件名不安全
- 默认拒绝:非公开资源默认拒绝访问
- 统一机制:使用应用程序范围的统一访问控制机制
- 显式声明:为每个资源明确声明访问权限
- 严格审计:全面测试访问控制策略
九、总结
访问控制漏洞主要分为垂直越权和水平越权两类,产生原因包括:
- 功能未受保护
- 参数控制不安全
- 配置错误
- URL匹配问题
- 多步骤流程缺陷
- HTTP头部依赖
防护关键在于实施严格的、统一的访问控制策略,并进行全面测试。