PortSwigger——Access Control

一、访问控制简介

访问控制决定了用户是否可以执行某个操作或访问某个资源。访问控制的三个关键组件:身份认证、会话管理和访问控制。访问控制依赖于 身份认证会话管理

  • 身份认证:确认用户的身份。
  • 会话管理:确定后续的HTTP请求是否由同一个用户发起。

常见的访问控制类型:

  • 垂直访问控制:不同类型的用户拥有不同的功能权限。如:管理员可以修改或删除任何用户的账户,而普通用户没有这些权限。
  • 水平访问控制:不同用户拥有对同一类型资源的不同子集的访问权限。
    如:银行应用允许用户查看自己的交易记录和进行支付,但不能访问其他用户的账户。
  • 上下文相关访问控制:根据应用程序的状态或用户与应用程序的交互情况,限制对功能和资源的访问。如:电商网站在用户完成支付后,禁止用户修改购物车内容。

二、垂直越权

垂直越权:低权限用户——高权限用户,如:普通用户可以访问管理员页面并删除用户账户。

2.1 Unprotected functionality

当应用程序未对敏感功能实施任何保护时,就会导致垂直权限提升。常用攻击方式:URL 泄露(管理功能的 URL 可能泄露在 robots.txt 文件中)、暴力破解(扫描路径)。

2.1.1 Lab: Unprotected admin functionality(URL泄露)

访问./robots.txt,即可知道管理员路径
在这里插入图片描述
删除用户carlos即可
在这里插入图片描述

2.1.2 Lab: Unprotected admin functionality with unpredictable URL

关键:应用程序将管理功能隐藏在一个难以猜测的URL中,但是在js脚本中可能出现包含管理功能的url。

在响应包的js脚本中写有管理功能路径/admin-ujhl88
在这里插入图片描述

2.2 Parameter-based access control methods

应用程序在用户登录时确定其访问权限或角色,并将这些信息存储在用户可控的位置(例如隐藏字段、Cookie 或查询字符串参数)。如:

https://insecure-website.com/login/home.jsp?admin=true
https://insecure-website.com/login/home.jsp?role=1

2.2.1 Lab: User role controlled by request parameter

使用wiener:peter正常登录,管理员路径在/admin,正常情况以当前的身份是不可访问该路径的。
在这里插入图片描述
查看数据包,服务端判断是不是admin用户,是通过cookie中的Admin的值进行判断的。修改该值即可垂直越权。
在这里插入图片描述
在这里插入图片描述

2.2.2 Lab: User role can be modified in user profile

使用wiener:peter正常登录,管理员路径在/admin,正常情况以当前的身份是不可访问该路径的。
在这里插入图片描述
Update email功能处更新email,可以看到返回 "roleid": 1
在这里插入图片描述
重新更改email,在body部分添加"roleid": 2,可以看到返回
在这里插入图片描述
再访问/admin,即可垂直越权。
在这里插入图片描述

2.3 Broken access control resulting from platform misconfiguration

背景:一些应用程序在平台层实施访问控制,通过限制特定URL和HTTP方法的访问来保护资源。

如果平台配置错误,可能导致访问控制被绕过。应用程序框架可能支持非标准HTTP头(例如X-Original-URLX-Rewrite-URL),允许覆盖原始请求中的URL。

使用X-Original-URLX-Rewrite-URL,实际访问的URL是X-Original-URL指定的URL,而不是请求行中的URL。

2.3.1 Lab: URL-based access control can be circumvented

访问/admin,显示Access denied,且是文字,说明这段响应来源于前端系统。

这里说的前端系统是:反向代理、负载均衡器、Web 应用防火墙、CDN、API 网关和前端服务器等。

在这里插入图片描述
访问/,同时添加请求头X-Original-Url: /invalid(告诉服务器的后端系统实际访问/inalid),说明服务器的后端系统支持X-Original-Url
在这里插入图片描述
使用X-Original-Url: /admin绕过服务器的前端系统的限制。
在这里插入图片描述
在这里插入图片描述
删除carlos时,不能将参数放在X-Original-Url中。
在这里插入图片描述

2.3.2 Lab: Method-based access control can be circumvented

一些网站允许使用不同的HTTP方法执行相同的操作,这可能导致访问控制被绕过。
登录admin用户和wiener用户,在admin用户中将carlos升权限的数据包中,将cookie替换为wiener的cookie,可以发现Unauthorized
在这里插入图片描述
POST方法改为GET方式,成功实现
在这里插入图片描述
在这里插入图片描述

2.4 Broken access control resulting from URL-matching discrepancies

不同网站对路径的匹配规则可能不同,导致访问控制机制失效。

  • 大小写敏感性:一些网站可能容忍路径的大小写不一致,例如 /ADMIN/DELETEUSER可能被映射到/admin/deleteUser
  • 文件扩展名:如果开发者启用了useSuffixPatternMatch选项(Spring 框架),路径中的任意文件扩展名可能被忽略。如:/admin/deleteUser.anything可能被映射到/admin/deleteUser
  • 尾部斜杠:一些系统可能将/admin/deleteUser/admin/deleteUser/视为不同的路径。

三、水平越权

水平越权:允许用户访问属于其他用户的资源,通常通过修改请求中的参数值实现。

3.1 Lab: User ID controlled by request parameter

登录wiener:peter,修改参数id的值即可。
在这里插入图片描述

3.2 Lab: User ID controlled by request parameter, with unpredictable user IDs

一些应用程序使用不可预测的参数值(如GUIDs)来标识用户,而不是递增的数字。如:

https://insecure-website.com/myaccount?id=550e8400-e29b-41d4-a716-446655440000

登录wiener:peter,发现使用不可预测的参数值来标识用户。
在这里插入图片描述
发现一篇由carlos发布的文章,点开可以看到链接:userId=a6d080ad-ef1d-40da-ac2e-416c5182fa7e,则获取到carlos的身份值。

在这里插入图片描述
在这里插入图片描述

3.3 Lab: User ID controlled by request parameter with data leakage in redirect

即使应用程序检测到用户无权访问资源并返回登录页面的重定向,响应中仍可能包含目标用户的 敏感数据,从而导致攻击成功。

id改为carlos即可获取该用户信息。
在这里插入图片描述

四、水平越权变为垂直越权

水平权限提升攻击 以通过获取管理员账户的访问权限,转变为垂直权限提升攻击。

4.1 Lab: User ID controlled by request parameter with password disclosure

id改为administrator,即可获取管理员用户的密码
在这里插入图片描述
登录管理员账号删除carlos即可。

4.2 Lab: Insecure direct object references

不安全的直接对象引用(IDOR):当应用程序使用用户提供的输入直接访问对象(如文件、数据库记录等),并且攻击者可以修改输入以获取未授权访问时,就存在 IDOR 漏洞。

Live chatView transcript功能中,会下载一个2.txt文件,而carlos的密码存在1.txt文件中。
在这里插入图片描述
在这里插入图片描述

基于 Referer 头的访问控制

一些网站根据 HTTP 请求中的Referer头实施访问控制。例如:网站对主管理页面/admin实施了严格的访问控制,但对子页面(如/admin/deleteUser)仅检查Referer头。如果Referer头包含主管理页面的URL(如/admin),则允许请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值