在本节中,将通过攻击示例场景进一步讨论什么是访问控制安全,描述权限提升和访问控制可能出现的漏洞类型。
垂直提权
如果用户可以访问他们不被允许访问的功能,例如,非管理员用户实际上可以访问管理页面,他们可以在其中删除用户账号,那么这就是垂直权限提升。
◆平台配置错误导致的访问控制中断
一些应用程序通过基于用户角色限制对特定的URL和HTTP方法进行访问控制。
比如,应用程序可能会配置如下规则:
这个规则拒绝manager组中的用户对/admin/deleteUser这个URL进行POST方式访问,不过在这种情况下,如果存在漏洞,可能会导致访问控制被绕过。
一些应用程序框架支持各种非标准的HTTP标头,可用于覆盖原始请求中的URL。
例如:X-Original-URL和X-Rewrite-URL。
如果网站使用严格的前端控制来限制基于URL的访问,但应用程序允许通过请求标头覆盖URL,则可以使用如下请求绕过访问控制:
场景试验-绕过基于URL的访问控制:
https://portswigger.net/web-security/access-control/lab-url-based-access-control-can-be-circumvented
场景说明:
这个试验场景在/admin处有一个未经身份验证的管理面板,但前端系统已经配置了阻止外部对该路径的访问。但是后端应用程序支持X-Original-URL的标头。
试验目的:
要完成这个试验,需要访问管理面板删除carlos用户。
攻击过程:
①访问/admin可以看到因为权限问题被禁止访问了
②将访问/目录的请求发送给Repeater,增加一个HTTP标头,可以注意到有权限访问/admin了:
X-Original-URL: /admin
③为了删除carlos用户,在请求中增加?username=carlos,并且修改:
X-Original-URL: /admin/delete
发送请求后,用户被删除即可完成试验
试验小结:
有些应用会支持非标准的请求头,允许”X-Original-URL"或者"X-Rewrite-URL"覆盖目标URL值,并隐藏真实的地址,此时我们可以指定”X-Original-URL”或者“X-Rewrite-URL“为”/console“或者”/admin“,尝试绕过禁止外部访问的限制。
另一种攻击可能与请求中使用的HTTP方法有关,上面提到的前端控件根据URL和HTTP方法限制访问,某些网站在执行操作时可能忽略其他HTTP请求方法,如果攻击者可以使用GET(或其他)方法对受限URL执行操作,那么就可以绕过访问控制。
场景试验-绕过基于方法的访问控制:
https://portswigger.net/web-security/access-control/lab-method-based-access-control-can-be-circumvented
场景说明:
这个试验场景部分请求的HTTP方法实现访问控制,可以通过管理员账户administrator:admin登录来熟悉管理面板。
试验目的:
要完成这个试验,需要使用wiener:peter登录并利用缺陷的访问控制来提升自己成为管理员。
攻击过程:
①先用管理账号登录,然后在管理面板中把carlos提权,并且将这个请求发送给Repeater
②登出管理员账号,另外登入wiener账号,将登录后的cookie替换到前面那个请求并发送,可以发现响应返回“未授权”
③右键点击选择"Change request method"将请求方法改成GET,并将需要提权的用户改成"wiener"并发送,提权成功,完成本试验
试验小结:
这种试验场景的访问控制策略主要问题是权限划分不够细,导致存在疏漏,像这种场景中的访问控制,通常以白名单的方式来实现可以有效地避免被绕过。
水平提权
当用户能够访问属于另一个用户的资源而不是他们自己该类型的资源时,就会出现水平权限提升。
例如,如果一个员工应该只能访问自己的就业和工资记录,但实际上也可以访问其他员工的记录,那么就属于这种提权漏洞。
水平提权攻击可使用与垂直提权类似的方法,比如用户通常可以使用如下URL访问他们自己的账户页面:
如果攻击者将id参数值修改为另一个用户的值,那么攻击者可能会访问另一个用户的账户页面,并获取相关的数据和功能。
场景试验-由请求参数控制的用户ID:
https://portswigger.net/web-security/access-control/lab-user-id-controlled-by-request-parameter
场景说明:
这个试验场景在用户账户页面存在水平提权漏洞。
试验目的:
要完成这个试验,需要用wiener:peter这个账户登录,获取用户carlos的API密钥并提交。
攻击过程:
①先用wiener账号登录,登录后刷新一下/my-account,将这个请求发送到Repeater,可以注意到这个请求是带了用户名参数过去访问的
②在Repeater中修改下参数id后面的用户名,再次发送请求,在响应包中可以看到这个用户的API密钥,将密钥复制后在首页上方提交即可完成本试验
SQL注入攻击-检索隐藏的数据
HTTP高级请求走私-响应队列中毒
HTTP Host头漏洞攻击-概念梳理
原文始发于微信公众号(H君网安白话):访问控制和权限提升漏洞-攻击示例(二)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论