访问控制和权限提升

本文阅读 19 分钟

访问控制(或授权)是对谁(或什么)可以执行尝试的操作或访问他们所请求的资源的约束条件的应用。在Web应用程序的上下文中,访问控制取决于身份验证和会话管理:

身份验证可以识别用户并确认他们就是他们所说的身份。 会话管理标识该用户正在发出哪些后续HTTP请求。 访问控制确定是否允许用户执行他们尝试执行的操作。

从用户的角度来看,访问控制可以分为以下几类:

1、垂直访问控制 2、水平访问控制 3、上下文相关的访问控制

访问控制安全模型是一组独立于技术或实现平台的访问控制规则的正式定义。访问控制安全模型是在操作系统,网络,数据库管理系统以及后台,应用程序和Web服务器软件中实现的。这些年来,已经设计了各种访问控制安全模型,以使访问控制策略与业务或组织规则以及技术变化相匹配。

1、程序访问控制

通过编程访问控制,用户特权矩阵存储在数据库或类似数据库中,并且参考该矩阵以编程方式应用访问控制。这种访问控制方法可以包括角色或组或单个用户,流程的集合或工作流,并且可以非常精细。

2、自由访问控制(DAC)

使用任意访问控制,将根据用户或指定的用户组来限制对资源或功能的访问。资源或功能的所有者可以向用户分配或委派访问权限。该模型非常精细,具有对单个资源或功能以及用户的访问权限。因此,模型的设计和管理可能变得非常复杂。

3、强制访问控制(MAC)

强制访问控制是一种访问控制的集中控制系统,其中限制了对象对某些对象(文件或其他资源)的访问。值得注意的是,与DAC不同,资源的用户和所有者不具备委派或修改其资源访问权限的能力。该模型通常与基于军事许可的系统相关联。

4、基于角色的访问控制(RBAC)

使用基于角色的访问控制,可以定义命名角色,并为其分配访问权限。然后,将用户分配给单个或多个角色。RBAC提供了对其他访问控制模型的增强管理,如果设计得当,则可以提供足够的粒度以在复杂应用程序中提供可管理的访问控制。例如,采购员可以定义为对采购分类帐功能和资源的子集具有访问权限的角色。当员工离开或加入组织时,访问控制管理将简化为定义或撤消采购文员角色的成员资格。

当有足够的角色来适当地调用访问控制,但又没有太多的角色使模型过于复杂且难以管理时,RBAC最为有效。

垂直访问控制是一种机制,用于限制低权限用户对高权限用户敏感功能的访问。 使用垂直访问控制,不同类型的用户可以访问不同的应用程序功能。例如,管理员可能能够修改或删除任何用户的帐户,而普通用户无权访问这些操作。垂直访问控制可以是安全模型的更细粒度的实现,这些模型旨在执行业务策略,例如职责分离和最低特权。

1、敏感功能可直接访问

例如:管理功能可能是从管理员的欢迎页面链接的,而不是从用户的欢迎页面链接的。但是,用户可能直接通过直接浏览到相关的管理URL就能访问管理功能。

1.1、一个网站可能在以下URL上托管敏感功能:https://xxx.xxx/admin,任何用户都可以访问此目录,不仅是在其用户界面中具有指向该功能链接的管理用户。在某些情况下,管理URL可能会在其他位置公开,例如robots.txt文件https://xxx.xxxx.com/robots.txt 即使未在任何地方公开该URL,攻击者也可以爆工具获取敏感功能的位置。

示例:

img

1.2、在某些情况下,敏感功能并没有得到严格的保护,通过给它一个不太可预测的URL来隐藏它,仅隐藏敏感功能无法提供有效的访问控制。

例如,考虑一个在以下URL上承载管理功能的应用程序:https://xxx.xxx.com/administrator-panel-yb556 攻击者可能无法直接猜测到该URL。但是,该应用程序仍可能会将URL泄露给用户。例如,URL可能会在JavaScript中公开,该JavaScript根据用户的角色构造用户界面:

<script>
var isAdmin = false;
if (isAdmin) { 
  ...
  var adminPanelTag = document.createElement('a');
  adminPanelTag.setAttribute('https://insecure-website.com/administrator-panel-yb556');
  adminPanelTag.innerText = 'Admin panel';
  ...
}
</script>

如果他们是管理员用户,此脚本将向用户的UI添加链接。但是,包含URL的脚本对于所有用户都是可见的。

2、基于参数的访问控制方法

某些应用程序在登录时确定用户的访问权限或角色,然后将此信息存储在用户可控制的位置,例如隐藏字段,cookie或预设查询字符串参数。该应用程序根据提交的值做出后续的访问控制决策。 例如: https://insecure-website.com/login/home.jsp?admin=true https://insecure-website.com/login/home.jsp?role=1

这种方法从根本上来说是不安全的,因为用户可以简单地修改值并获得对未经授权的功能(例如管理功能)的访问权限。

2.1、用户角色由请求参数控制 img 登录抓包,我们发现,使用非管理员账号进行登录时,cookie中Admin参数为false,尝试更改为true。 2.2、可以在用户配置文件中修改用户角色

3、平台配置错误导致访问控制中断

3.1、某些应用程序通过基于用户角色限制对特定URL和HTTP方法的访问来在平台层实施访问控制。例如,应用程序可能会配置如下规则:DENY: POST, /admin/deleteUser, managers

对于规则管理者组中的用户,此规则拒绝POST对URL上的/admin/deleteUser方法的访问。在这种情况下,各种事情都会出错,从而导致访问控制绕过。

某些应用程序框架支持各种非标准HTTP请求头,这些请求头可用于覆盖原始请求中的URL,例如X-Original-URL和X-Rewrite-URL。如果网站使用严格的前端控件来限制基于URL的访问,但是应用程序允许通过请求标头覆盖URL,则可以使用如下请求来绕过访问控制:

POST / HTTP/1.1
X-Original-URL: /admin/deleteUser
...

示例:规避基于URL的访问控制 ①在链接尾部加上/admin尝试访问,访问失败,burpsuite抓包显示如下。 img ②去掉admin,并加上请求头X-Original-URL: /invalid重新访问,观察到该应用程序返回"Not found"响应,表示后端系统正在处理X-Original-URL标头中的URL 。 img ③将X-Original-URL标头的值更改为/admin,现在可以访问管理页面了。响应包的HTML文件正好是管理员页面的文件。 img

3.2、与请求中使用的HTTP方法有关的替代攻击可能会出现。上面的前端控件基于URL和HTTP方法限制访问。某些网站在执行操作时可以使用其他HTTP请求方法。如果攻击者可以使用GET(或其他)方法对受限URL执行操作,则他们可以绕过在平台层实现的访问控制。 示例:规避基于方法的访问控制

1、水平访问控制

1.1、当用户能够访问相同权限等级的另一个用户的资源时,则为水平访问控制。 用户通常可以使用如下所示的URL访问自己的帐户页面:https://insecure-website.com/myaccount?id=123。现在,如果攻击者将id参数值修改为另一个用户的参数值,则攻击者可能访问另一个用户账户的相关资源。 示例:用户ID由请求参数控制 ①登录wiener用户,发现使用get请求直接传递。img ②将用户名wiener更改为另一个用户carlos,发送请求,成功。img

1.2、在某些应用程序中,可利用参数没有可预测的值。例如,应用程序可以使用全局唯一标识符(GUID)来代替用户,而不是递增数字。在这里,攻击者可能无法猜测或预测另一个用户的标识符。但是,属于其他用户的GUID可能会在引用用户的应用程序的其他位置公开,例如用户消息或评论。 示例:用户ID由请求参数控制,具有不可预测的用户ID ①查看文章,发现carlos用户的userid使用get方式传递:https://ac951f7a1eecd6fd806f20e200c60050.web-security-academy.net/blogs?userId=4082d03d-33bc-427d-904b-c233b8327273 ②使用wiener账号登录系统 img ③将wiener的userid替换为carlos的userid,可查看carlos的相关信息 img

1.3、在某些情况下,应用程序会检测到何时不允许用户访问资源,并将重定向返回到登录页面。但是,包含重定向的响应可能仍然包含属于目标用户的一些敏感数据,因此攻击仍然成功。 示例:用户ID由请求参数控制,重定向中存在数据泄漏 ①使用wiener账号登录系统,并访问账户页面 img ②将id参数更改为carlos,获取到carlos的系统信息。 img

2、水平到垂直访问控制

通过损害权限较高的用户,可以将横向特权升级攻击转变为纵向特权升级。例如,水平越权可能允许攻击者获取或者修改属于另一个用户的密码。如果攻击者以管理员用户为目标并破坏了他们的帐户,则他们可以获得管理员权限,因此可以进行垂直越权。

例如,攻击者使用针对水平越权来访问另一个用户的帐户页面:https://xxx.xxx/myaccount?id=456

如果目标用户是应用程序管理员,则攻击者将获得对管理帐户页面的访问权限。该页面可能会公开管理员的密码或提供更改密码的方法,或者可能提供对特权功能的直接访问。

示例:用户ID由带有密码公开的请求参数控制 ①使用wiener账号登录系统,https://acea1f7a1fd796b980d72bdc00570080.web-security-academy.net/my-account?id=wiener,账号名使用id参数传递。 ②将id更改为administrator,响应包中存在administrator用户的密码 img

IDOR属于越权漏洞的子类。 当应用程序使用用户提供的输入直接访问对象并且攻击者可以修改输入以获得未经授权的访问时,就会发生IDOR 。常见得IDOR漏洞是用户控制的参数值用于直接访问资源或功能。

1、直接引用数据库对象的IDOR漏洞

该URL通过customer_number=132355参数从数据库检索信息来访问客户帐户页面:https://insecure-website.com/customer_account?customer_number=132355 如果此时系统没有任何防御措施,那么通过修改customer_number参数,是可以直接查看其他访客得文件的记录。这是一个IDOR漏洞导致水平特权升级的示例。 攻击者可能会通过绕过访问控制将用户更改为具有其他权限的用户,从而执行水平和垂直越权。

2、直接引用静态文件的IDOR漏洞

当敏感资源位于服务器端文件系统上的静态文件中时,经常会出现IDOR漏洞。例如,一个网站可能使用递增的文件名将聊天消息记录保存到磁盘,并允许用户通过访问如下URL来查看这些记录:https://insecure-website.com/static/12144.txt

在这种情况下,攻击者可以通过修改文件名以获取用户凭据和其他敏感数据。

依赖于上下文的访问控制根据应用程序的状态或用户与应用程序的交互来限制对功能和资源的访问。上下文相关的访问控制可防止用户以错误的顺序执行操作。例如,零售网站可能会阻止用户在付款后修改购物车中的内容。

1、多步骤流程中的访问控制漏洞

许多网站通过一系列步骤来实现重要功能。例如,用于更新用户详细信息的管理功能可能涉及以下步骤: 1、加载表单,其中包含特定用户的详细信息。 2、提交更改。 3、查看更改并确认。

有时,网站将对其中某些步骤实施严格的访问控制,而忽略其他步骤。假设访问控制已正确应用于第一步和第二步,但未正确应用于第三步。实际上,该网站假定用户只有完成了正确控制的第一步后,才可以进入第3步。在这里,攻击者可以跳过前两个步骤并直接使用所需参数提交对第三步的请求,从而获得未经授权的功能访问。

2、基于引荐来源的访问控制

某些网站的访问控制基于HTTP Referer请求头,Referer一般为请求来源地址。 例如,假设某个应用程序对主管理页面(/admin)实施了访问控制,但是对于子页面(例如/admin/deleteUser仅检查Referer标头)未进行访问控制,如果Referer标头包含主/adminURL,则允许该请求。 在这种情况下,由于Referer攻击者可以完全控制标头,因此攻击者可以伪造对敏感子页面的直接请求,提供所需的Referer标头,从而获得未经授权的访问。

3、基于位置的访问控制

一些网站根据用户的地理位置对资源实施访问控制。例如,这可以适用于适用业务限制的银行应用程序或媒体服务。这些访问控制通常可以通过使用Web代理,VPN或操作客户端地理定位机制来规避。

通常,可以采用深度防御方法并应用以下原则来防止访问控制漏洞:

1、切勿仅依靠混淆来进行访问控制。 2、除非打算公开访问资源,否则默认情况下将拒绝访问。 3、尽可能使用单个应用程序范围的机制来执行访问控制。 4、在代码级别,开发人员必须声明每个资源允许的访问,并默认拒绝访问。 5、彻底审核和测试访问控制,以确保它们按设计工作。

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/sycamorelg/article/details/114666196
-- 展开阅读全文 --
Web安全—逻辑越权漏洞(BAC)
« 上一篇 03-13
Redis底层数据结构--简单动态字符串
下一篇 » 04-10

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复