BurpSuitePortswigger 安全学院Access control访问控制内容学习笔记
字数 2587 2025-08-18 11:35:38
BurpSuite Portswigger 安全学院访问控制(Access Control)学习笔记
1. 访问控制概述
访问控制旨在防止用户与他们没有相关权限的数据或功能进行交互。由于明显的安全影响,访问控制缺陷本身就是漏洞。
访问控制三要素:
- 身份验证:确认用户是他们所宣称的身份
- 会话管理:识别后续HTTP请求是否来自同一用户
- 访问控制:确定是否允许用户执行他们尝试执行的操作
2. 垂直越权(Vertical Privilege Escalation)
当用户可以访问他们不被允许访问的功能时,就是垂直权限提升。
2.1 未受保护的功能
漏洞表现:应用程序不对敏感功能强制实施任何保护
示例场景:
- 管理功能可通过直接访问URL访问,而不需要管理员权限
- 敏感URL可能暴露在
robots.txt文件中 - 攻击者可能通过目录暴力破解发现敏感功能
靶场示例:
- 靶场地址:
https://portswigger.net/web-security/learning-paths/server-side-vulnerabilities-apprentice/access-control-apprentice/access-control/lab-unprotected-admin-functionality - 解决方法:在URL后加入
/robots.txt发现管理功能URL,直接访问并删除用户
2.2 隐蔽性安全(通过混淆URL隐藏功能)
漏洞表现:通过难以预测的URL隐藏敏感功能,但URL可能通过其他方式泄露
示例场景:
- 管理功能URL可能包含在JavaScript代码中,对所有用户可见
- 虽然UI上不显示链接,但源代码中可能包含
靶场示例:
- 靶场地址:
https://portswigger.net/web-security/learning-paths/server-side-vulnerabilities-apprentice/access-control-apprentice/access-control/lab-unprotected-admin-functionality-with-unpredictable-url - 解决方法:查看页面源代码,搜索
script标签,找到包含isAdmin判断的代码段,从中提取管理功能URL
2.3 基于参数的访问控制方法
漏洞表现:应用程序将用户权限信息存储在用户可控制的位置(如隐藏字段、cookie、查询参数)
示例场景:
- URL中包含
admin=true或role=1等参数 - 用户可以修改这些参数来提升权限
靶场示例:
- 靶场地址:
https://portswigger.net/web-security/learning-paths/server-side-vulnerabilities-apprentice/access-control-apprentice/access-control/lab-user-role-controlled-by-request-parameter - 解决方法:
- 登录后进入"My account"
- 使用Burp Suite抓包
- 修改请求中的
admin参数为true - 访问管理面板并删除用户
3. 水平越权(Horizontal Privilege Escalation)
当用户能够访问属于其他用户的资源,而不是他们自己的该类型资源时发生。
3.1 直接对象引用(IDOR)
漏洞表现:使用可预测的参数(如用户ID)直接访问资源
示例场景:
- 用户可通过修改
id参数访问其他用户账户:https://insecure-website.com/myaccount?id=123 - 即使使用GUIDs,也可能在其他地方泄露
靶场示例:
- 靶场地址:
https://portswigger.net/web-security/learning-paths/server-side-vulnerabilities-apprentice/access-control-apprentice/access-control/lab-user-id-controlled-by-request-parameter-with-unpredictable-user-ids - 解决方法:
- 登录后查看自己的API key
- 访问其他用户(carlos)的帖子
- 进入carlos的个人主页并抓包,获取其用户ID
- 修改自己账户请求中的用户ID为carlos的ID
- 获取carlos的API key并提交
3.2 从水平到垂直权限提升
漏洞表现:通过水平越权访问高权限用户账户,实现垂直权限提升
示例场景:
- 管理员用户可能有特殊ID(如0或1)
- 通过水平越权访问管理员账户页面
- 可能泄露管理员密码或提供特权功能访问
靶场示例:
- 靶场地址:
https://portswigger.net/web-security/learning-paths/server-side-vulnerabilities-apprentice/access-control-apprentice/access-control/lab-user-id-controlled-by-request-parameter-with-password-disclosure - 解决方法:
- 登录普通账户
- 在密码重置功能处抓包
- 修改用户ID为
administrator - 在返回包或页面源码中找到管理员密码
- 用该密码登录管理员账户并删除目标用户
4. 防御措施
- 最小权限原则:只授予用户完成其任务所需的最小权限
- 服务器端验证:所有访问控制决策应在服务器端进行
- 避免暴露敏感信息:不在客户端存储或传输敏感权限信息
- 使用不可预测的标识符:如UUID而非自增ID
- 定期审计:定期检查访问控制机制的有效性
- 默认拒绝:默认情况下拒绝所有访问,明确允许特定访问
5. 总结
访问控制漏洞是Web应用程序中常见且严重的安全问题。开发人员应特别注意:
- 不要依赖客户端控制
- 不要暴露敏感URL或功能
- 对所有敏感操作实施严格的权限检查
- 避免使用可预测的资源标识符
- 实施深度防御策略