在本节中,将通过攻击示例场景进一步讨论什么是访问控制安全,描述权限提升和访问控制可能出现的漏洞类型。
不安全的直接对象引用(IDOR)
不安全的直接对象引用(IDOR)是一种访问控制漏洞,当应用程序使用用户提供的输入直接访问对象时会出现这种漏洞。IDOR一词因出现在OWASP 2007 Top 10中而广为人知,然后,这只是可能导致绕过访问控制的许多访问控制实施错误的一种示例。IDOR漏洞在水平权限提升中最常见,但也在垂直权限提升中偶尔可见到。
考虑一个网站,它通过从后端数据库检索信息,使用以下URL访问客户账户页面:
在这里,客户编号作为记录索引直接用在后端数据库上执行的查询中,如果没有其他控制,攻击者可以简单地修改"customer_number"的值,绕过访问控制来查看其他客户的记录,这是导致水平权限提升的IDOR漏洞。
攻击者可能通过在绕过访问控制的同时将用户更改为具有额外权限的用户来执行水平和垂直权限提升,例如,一旦攻击者登录用户的账户页面,就可以利用密码泄露来修改各种功能参数。
当敏感资源位于服务器端文件系统的静态文件中时,也会出现IDOR漏洞。例如,网站可能会使用递增的文件名将聊天记录保存在磁盘,并允许用户通过访问如下URL来检索这些记录:
在这种情况下,攻击者可以简单地修改文件名来检索另一个用户创建的脚本,并可能获取用户凭据和其他敏感数据。
场景试验-不安全的直接对象引用:
https://portswigger.net/web-security/access-control/lab-insecure-direct-object-references
场景说明:
这个试验场景将用户聊天日志直接存储在服务器的文件系统上,并使用静态URL检索它们。
试验目的:
要完成这个试验,需要找到用户carlos的密码并登录到它的账户。
攻击过程:
①访问页面后右上角有个在线聊天,点击后进入在线聊天,随便发一句话
②随后点击"View transcrpt",观察下抓到的包,发现直接将文件名发送过去请求了,将这个请求发送给Repeater
③修改下载的文件名,改成1.txt,通过响应包中可以看到其他人的聊天记录里面有涉及到密码,用carlos账号和这个密码登录即可完成试验
基于Referer的访问控制
一些网站会基于HTTP请求中提交的Referer标头进行访问控制。
Referer标头通常添加到浏览器的请求中,用以表示发起请求的页面。
例如,假设应用程序对/admin的主管理页面强制实施访问控制,但对于/admin/deleteUser等子页面仅检查Referer标头,如果Referer标头包含主/admin URL,则允许该请求通过。
在这种情况下,由于攻击者可以完全控制Referer标头,他们可以伪造对敏感子页面的直接请求,通过提供所需的Referer标头,从而获得未经授权的访问。
场景试验-基于Referer的访问控制:
https://portswigger.net/web-security/access-control/lab-referer-based-access-control
场景说明:
这个试验场景根据Referer标头控制对某些管理功能进行访问控制,可以通过使用管理员账户来熟悉管理界面,administrator:admin。
试验目的:
要完成这个试验,需要使用wiener:peter这个账户登录,并利用有缺陷的访问控制来提升自己成为管理员。
攻击过程:
①用管理员账号登录后进入管理面板,提升carlos权限,并将这个请求发送到Repeater
②登出管理员账号,登录wiener用户,把session替换到Repeater这个请求中,把"username"后面的用户进行修改,随后发送请求
③提权成功,完成本次试验
基于位置的访问控制
有些网站根据用户的地理位置对资源实施访问控制,但这些访问控制通常可以通过使用网络代理、VPN或操纵客户端地理定位机制来绕过规避。
SQL注入攻击-检索隐藏的数据
HTTP高级请求走私-响应队列中毒
HTTP Host头漏洞攻击-概念梳理
原文始发于微信公众号(H君网安白话):访问控制和权限提升漏洞-攻击示例(四)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论