BurpSuitePortswigger 安全学院Access control访问控制内容学习笔记
字数 2587 2025-08-18 11:35:38

BurpSuite Portswigger 安全学院访问控制(Access Control)学习笔记

1. 访问控制概述

访问控制旨在防止用户与他们没有相关权限的数据或功能进行交互。由于明显的安全影响,访问控制缺陷本身就是漏洞。

访问控制三要素:

  1. 身份验证:确认用户是他们所宣称的身份
  2. 会话管理:识别后续HTTP请求是否来自同一用户
  3. 访问控制:确定是否允许用户执行他们尝试执行的操作

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=truerole=1等参数
  • 用户可以修改这些参数来提升权限

靶场示例

  • 靶场地址:https://portswigger.net/web-security/learning-paths/server-side-vulnerabilities-apprentice/access-control-apprentice/access-control/lab-user-role-controlled-by-request-parameter
  • 解决方法:
    1. 登录后进入"My account"
    2. 使用Burp Suite抓包
    3. 修改请求中的admin参数为true
    4. 访问管理面板并删除用户

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
  • 解决方法:
    1. 登录后查看自己的API key
    2. 访问其他用户(carlos)的帖子
    3. 进入carlos的个人主页并抓包,获取其用户ID
    4. 修改自己账户请求中的用户ID为carlos的ID
    5. 获取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
  • 解决方法:
    1. 登录普通账户
    2. 在密码重置功能处抓包
    3. 修改用户ID为administrator
    4. 在返回包或页面源码中找到管理员密码
    5. 用该密码登录管理员账户并删除目标用户

4. 防御措施

  1. 最小权限原则:只授予用户完成其任务所需的最小权限
  2. 服务器端验证:所有访问控制决策应在服务器端进行
  3. 避免暴露敏感信息:不在客户端存储或传输敏感权限信息
  4. 使用不可预测的标识符:如UUID而非自增ID
  5. 定期审计:定期检查访问控制机制的有效性
  6. 默认拒绝:默认情况下拒绝所有访问,明确允许特定访问

5. 总结

访问控制漏洞是Web应用程序中常见且严重的安全问题。开发人员应特别注意:

  • 不要依赖客户端控制
  • 不要暴露敏感URL或功能
  • 对所有敏感操作实施严格的权限检查
  • 避免使用可预测的资源标识符
  • 实施深度防御策略
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或功能 对所有敏感操作实施严格的权限检查 避免使用可预测的资源标识符 实施深度防御策略