fengyehao
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

前言
访问控制旨在防止用户与他们没有相关权限的数据或功能进行交互。由于明显的安全影响,访问控制缺陷本身就是漏洞。它们通常还提供对更多攻击面的访问,这些攻击面可能包含其他漏洞。
什么是访问控制?
访问控制是对有权执行操作或访问资源的人员或内容施加约束。在 Web 应用程序的环境中,访问控制依赖于身份验证和会话管理:
- 身份验证确认用户是他们所宣称他们是的人。
- 会话管理可识别后续 HTTP 请求是否来自同一用户。
- 访问控制确定是否允许用户执行他们尝试执行的操作。
不安全的访问控制很常见,并且通常存在严重的安全漏洞。访问控制的设计和管理是一个复杂而动态的问题,它将业务、组织和法律约束应用于技术实现。由于访问控制设计决策必须由人类做出,所以出错的可能性很高。
垂直越权
如果用户可以访问他们不被允许访问的功能,就是垂直权限提升。例如本来应该只有管理员能删除用户,但如果非管理用户也可以访问管理页面并在其中删除用户帐户,则存在水平越权问题。
未受保护的功能
垂直越权发生在应用程序不对敏感功能强制实施任何保护的情况下。例如,管理功能可能可以从管理员的欢迎页面进入,但不能从用户的欢迎页面进入。但是,用户可以通过浏览到相关的管理 URL 来访问管理功能。
例如,网站可能在以下 URL 上托管敏感功能:
https://insecure-website.com/admin
任何用户都可以访问此功能,而不仅仅是在其用户界面中具有指向该功能的链接的管理用户。在某些情况下,管理 URL 可能会在其他位置公开,例如robots.txt文件:
https://insecure-website.com/robots.txt
即使 URL 未在任何地方泄露,攻击者也可能使用目录暴力破解获取敏感功能的位置。
对应靶场
进入靶场,直接在URL后加入/robots.txt可见带有功能的URL。
对该地址进行访问,可见删除功能,将用户删除可通关。以防有人不知道,实际测试时删除自己创建的账号就好了别搞别人的。
在某些情况下,敏感功能会通过为其提供难以预测的 URL 来隐藏。这就是所谓的“隐蔽性安全”的一个例子。但是,隐藏敏感功能并不能提供有效的访问控制,因为用户可能会以多种方式发现经过混淆的 URL。假设一个应用程序在以下 URL 上托管管理功能:
https://insecure-website.com/administrator-panel-yb556
攻击者可能无法直接猜到这一地址。但是应用程序可能仍会将 URL 泄露给用户,比如该 URL 可能在 JavaScript 中公开,该 URL 根据用户的角色构造用户界面:
<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 的脚本对所有用户都可见,无论其为什么角色。
对应靶场
进入页面,按下F12打开开发者工具或者鼠标右击,查看页面源代码。
搜索html中的script关键字可以发现引用了一个js文件,点进去阅读后发现这个是维持页面正常功能的,不是要找的功能点。
按下回车找下一处有script的地方,看到isadmin想到可能会是判断与管理员有关的功能,访问红框内的地址找到相关功能点。
访问功能点后删除用户可通关。
基于参数的访问控制方法
某些应用程序在登录时确定用户的访问权限或角色,然后将此信息存储在用户可控制的位置如:
- 隐藏字段。
- cookie。
- 预设查询字符串参数。
应用程序根据提交的值进行访问控制。例如:
https://insecure-website.com/login/home.jsp?admin=true
https://insecure-website.com/login/home.jsp?role=1
这种方法不安全,因为用户可以修改他们无权访问的值和访问功能,其中就包括了管理功能。
对应靶场
进入My account。
使用给定的账号:密码登录。
在用户页面使用burpsuite抓包。
发现有admin参数,将其修改为true。
forward放包。
将抓到的第二个数据包也修改参数为true,放包。
看回自己的用户页面,发现出现了admin panel。
抓包,单击admin panel,再次将admin参数改为true,放包。
出现用户删除界面,单击删除carlos,保持将所有操作过程中产生的数据包中有admin参数的地方的值都改为true,最后将成功删除并通关。
水平越权
如果用户能够访问属于其他用户的资源,而不是他们自己的该类型的资源,则会发生水平越权。例如,如果员工可以访问其他员工的记录以及他们自己的记录,则发生水平越权。
水平越权攻击可能使用与垂直越权类似的漏洞利用方法。例如,用户可以使用以下 URL 访问自己的帐户页面:
https://insecure-website.com/myaccount?id=123
如果攻击者将id
参数值修改为其他用户的参数值,他们可能会访问其他用户的帐户页面以及相关的数据和功能。(注:这是不安全的直接对象引用 (IDOR) 漏洞的一个示例。当用户控制器参数值用于直接访问资源或函数时,就会出现此类漏洞。)
在某些应用程序中,可利用参数没有可预测的值。例如,应用程序可能会使用全局唯一标识符 (GUIDs) 来标识用户,而不是递增的数字。这可能会阻止攻击者猜测或预测其他用户的标识符。但是,属于其他用户的 GUID 可能会在引用用户的应用程序中的其他位置(如用户消息或评论)中公开。
对应靶场
进入靶场登录页面,用给出的账号登录。
进入用户界面可见我们的api key非常复杂且随机。
回到首页,进入carlos的贴子。
单击carlos进入他的个人首页。
在其个人首页抓包,发现泄露出了个人id,复制其个人id。
f2ee0c62-0dc8-4e2f-bb60-b68bd5622057
回到自己的用户页面,抓包,刷新,将自己的user id改成Carlos的。
此时进入carlos的账号,复制其api key,单击submit solution将api key填入其中,通关。
从水平到垂直权限提升
通过水平越权到权限更高的用户,水平权限提升攻击可以转变为垂直权限提升。例如,通过水平越权,攻击者可能可以得到一个可以重置或捕获属于其他用户的密码的账号。如果攻击者以管理用户为重置、捕获密码的目标并入侵其帐户,则他们可以获得管理访问权限,从而执行垂直权限提升。
攻击者也可能在一个水平越权点造成垂直越权效果,比如:
https://insecure-website.com/myaccount?id=456
这是一个水平越权点,但如果管理员用户id为0或者1,此时id=0则会造成垂直越权,攻击者将获得对管理帐户页面的访问权限。此时页面可能会泄露管理员的密码或提供更改密码的方法,或者可能提供对特权功能的直接访问。
对应靶场
使用给定用户登录。
进入用户界面发现可以重置密码,在此抓包。
发现id就是用户名,直接改成administrator,放包。
进入管理员界面。
此时可以在burp suite中返回包看见密码,或者F12打开开发者工具,单击红框所示处再单击密码框。
此时可见被隐藏的密码。
复制该密码,用它登录administrator账号。
进入admin panel,删除carlos通关。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
