一、定义
访问控制崩溃,指的是访问控制策略没有被正确地执行,导致用户可以在他们的预期权限之外进行操作。这种缺陷通常会导致未授权的信息被泄露、修改、销毁,或者让用户执行了超出其权限限制的业务功能。
表现形式,也就是我们常说的越权漏洞。
越权分为:
- 水平越权: A、B两个用户权限是相同的,但A可以访问或编辑B的信息
- 垂直越权: 主要向上垂直。低权限用户可以操作或访问高权限用户的资源或功能。A是普通用户,B管理员用户,A可以访问B账号权限。
- 未授权访问: 通过删除请求中认证信息后重放请求,依旧可以访问或完成操作。
二、方法技巧
先了解Web应用程序的访问控制策略,包括用户角色、权限分配、认证和授权机制等。识别哪些资源(如页面、API、数据等)需要受到访问控制保护。并对不同角色和权限的用户进行测试,验证访问控制逻辑是否正确执行。
- 通过修改URL、应用状态、HTML页面、或使用攻击工具修改API请求相关数据,以此绕过访问控制检查。获得用户之外的权限。
- 关注身份id(如用户id、账号、手机号等)、属性id(如订单号、记录号)参数处、目录处,关注任何场景每一个可能决定用户权限的参数值。通过加和减1提交整数值,看是否可以看到本不该看到的数据,若返回403拒绝访问很可能说明没有漏洞。
- 遇到某些参数使用哈希值(如UUIDs),可以尝试解码,或寻找参数值泄露(特定返回包或页面源代码), 测试时通常创建两个账号并替换参数值,查看是否可以操作成功。
- 通过重放或篡改JSON Web Token(JWT)来访问控制令牌,或通过修改cookie、隐藏字段来提升权限。
三、 靶场实操
3. 1 水平越权--皮卡丘靶场
以lucy、lili2个账号为例,来演示水平越权。
- 使用lucy用户登录,并点击查询个人信息,可以看到lucy的个人信息
- 通过浏览器url-修改username为其他用户名;或通过burpsuite或HackBar修改username;就可以在未登录lili账户情况下,访问lili用户的基本信息
3. 2 垂直越权--皮卡丘靶场
超级管理员用户:admin ;普通管理员用户:pikachu 。以这2个账号为例,进行垂直越权演示。
- A浏览器登录普通用户pikachu,并获取普通用户的cookie信息,保存
- B浏览器登录管理员admin,并操作添加一个新用户,在点击创建时,将包通过burpsuite拦截下来,如下:
- 将普通用户pikachu的cookie替换新建用户操作的cookie,然后点击Inetercept is on
- 操作完,返回管理员页面,显示添加了一个新用户。发现用低权限进行了一次高权限的添加用户操作。
四、如何防范
- 除公有资源外,默认情况下拒绝访问(最小权限原则)。
- 实现一次访问控制机制,并在整个应用程序中重复使用它们,包括尽量减少跨域资源共享(CORS)的使用。
- 前后端同时对用户输入信息进行校验,双重验证机制。
- 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限。
- 特别敏感操作可以让用户再次输入密码或其他的验证信息。
- 加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理。
- 禁用web服务器目录列表,并确保文件元数据(例.git)和备份文件不在web根目录中。
- 当用户注销后,服务器上的JWT(JSON Web Token)令牌应该失效。
- 记录失败的访问控制,并在适当时向管理员告警。
- 对API和控制器的访问进行速率限制,以最大限度地降低自动化攻击工具的危害。