freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

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

BurpSuitePortswigger 安全学院Access control访问控制内容学习笔记
fengyehao 2024-02-16 16:34:54 113991

前言

访问控制旨在防止用户与他们没有相关权限的数据或功能进行交互。由于明显的安全影响,访问控制缺陷本身就是漏洞。它们通常还提供对更多攻击面的访问,这些攻击面可能包含其他漏洞。

什么是访问控制?

访问控制是对有权执行操作或访问资源的人员或内容施加约束。在 Web 应用程序的环境中,访问控制依赖于身份验证和会话管理:

  • 身份验证确认用户是他们所宣称他们是的人。
  • 会话管理可识别后续 HTTP 请求是否来自同一用户。
  • 访问控制确定是否允许用户执行他们尝试执行的操作。

不安全的访问控制很常见,并且通常存在严重的安全漏洞。访问控制的设计和管理是一个复杂而动态的问题,它将业务、组织和法律约束应用于技术实现。由于访问控制设计决策必须由人类做出,所以出错的可能性很高。

垂直越权

如果用户可以访问他们不被允许访问的功能,就是垂直权限提升。例如本来应该只有管理员能删除用户,但如果非管理用户也可以访问管理页面并在其中删除用户帐户,则存在水平越权问题。

未受保护的功能

垂直越权发生在应用程序不对敏感功能强制实施任何保护的情况下。例如,管理功能可能可以从管理员的欢迎页面进入,但不能从用户的欢迎页面进入。但是,用户可以通过浏览到相关的管理 URL 来访问管理功能。

例如,网站可能在以下 URL 上托管敏感功能:

https://insecure-website.com/admin任何用户都可以访问此功能,而不仅仅是在其用户界面中具有指向该功能的链接的管理用户。在某些情况下,管理 URL 可能会在其他位置公开,例如robots.txt文件:

https://insecure-website.com/robots.txt即使 URL 未在任何地方泄露,攻击者也可能使用目录暴力破解获取敏感功能的位置。

对应靶场

地址:https://portswigger.net/web-security/learning-paths/server-side-vulnerabilities-apprentice/access-control-apprentice/access-control/lab-unprotected-admin-functionality

进入靶场,直接在URL后加入/robots.txt可见带有功能的URL。

1708064003_65cefd039e95564eeb5f6.png!small?1708064004175

对该地址进行访问,可见删除功能,将用户删除可通关。以防有人不知道,实际测试时删除自己创建的账号就好了别搞别人的。

1708064126_65cefd7ed7ea90d75dbe5.png!small?1708064127464

在某些情况下,敏感功能会通过为其提供难以预测的 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 的脚本对所有用户都可见,无论其为什么角色。

对应靶场

地址:https://portswigger.net/web-security/learning-paths/server-side-vulnerabilities-apprentice/access-control-apprentice/access-control/lab-unprotected-admin-functionality-with-unpredictable-url#

进入页面,按下F12打开开发者工具或者鼠标右击,查看页面源代码。

1708064833_65cf0041447d576eca244.png!small?1708064833941

搜索html中的script关键字可以发现引用了一个js文件,点进去阅读后发现这个是维持页面正常功能的,不是要找的功能点。

1708065085_65cf013d5700a761e650a.png!small?1708065085952


按下回车找下一处有script的地方,看到isadmin想到可能会是判断与管理员有关的功能,访问红框内的地址找到相关功能点。

1708065849_65cf0439331fd4618de23.png!small?1708065849883

访问功能点后删除用户可通关。

1708066059_65cf050bebdbbca43287e.png!small?1708066060481

基于参数的访问控制方法

某些应用程序在登录时确定用户的访问权限或角色,然后将此信息存储在用户可控制的位置如:

  • 隐藏字段。
  • cookie。
  • 预设查询字符串参数。

应用程序根据提交的值进行访问控制。例如:

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

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

这种方法不安全,因为用户可以修改他们无权访问的值和访问功能,其中就包括了管理功能。

对应靶场

地址:https://portswigger.net/web-security/learning-paths/server-side-vulnerabilities-apprentice/access-control-apprentice/access-control/lab-user-role-controlled-by-request-parameter#

进入My account。

1708066857_65cf082993e703715af49.png!small?1708066858017


使用给定的账号:密码登录。

1708066951_65cf08870a532b8d3c377.png!small?1708066951539

1708066989_65cf08ad60224b624dfb2.png!small?1708066989849

在用户页面使用burpsuite抓包。

1708067041_65cf08e185b1c2bd7c042.png!small?1708067042111

发现有admin参数,将其修改为true。

1708067090_65cf0912de313b26e0a20.png!small?1708067091485

forward放包。

1708067128_65cf0938a660a2fc27d08.png!small?1708067129178

将抓到的第二个数据包也修改参数为true,放包。

1708067186_65cf0972e073a303644cd.png!small?1708067187553

看回自己的用户页面,发现出现了admin panel。

1708067237_65cf09a5b03579535b410.png!small?1708067238191

抓包,单击admin panel,再次将admin参数改为true,放包。

1708067313_65cf09f1b36a43063bc5a.png!small?1708067314207

出现用户删除界面,单击删除carlos,保持将所有操作过程中产生的数据包中有admin参数的地方的值都改为true,最后将成功删除并通关。1708067433_65cf0a699adf6f9e7d190.png!small?1708067434132


1708067468_65cf0a8c9c123a6925bea.png!small?1708067469023

1708067517_65cf0abda9de053cbca79.png!small?1708067518093

水平越权

如果用户能够访问属于其他用户的资源,而不是他们自己的该类型的资源,则会发生水平越权。例如,如果员工可以访问其他员工的记录以及他们自己的记录,则发生水平越权。

水平越权攻击可能使用与垂直越权类似的漏洞利用方法。例如,用户可以使用以下 URL 访问自己的帐户页面:

https://insecure-website.com/myaccount?id=123

如果攻击者将id参数值修改为其他用户的参数值,他们可能会访问其他用户的帐户页面以及相关的数据和功能。(注:这是不安全的直接对象引用 (IDOR) 漏洞的一个示例。当用户控制器参数值用于直接访问资源或函数时,就会出现此类漏洞。)

在某些应用程序中,可利用参数没有可预测的值。例如,应用程序可能会使用全局唯一标识符 (GUIDs) 来标识用户,而不是递增的数字。这可能会阻止攻击者猜测或预测其他用户的标识符。但是,属于其他用户的 GUID 可能会在引用用户的应用程序中的其他位置(如用户消息或评论)中公开。

对应靶场

地址:https://portswigger.net/web-security/learning-paths/server-side-vulnerabilities-apprentice/access-control-apprentice/access-control/lab-user-id-controlled-by-request-parameter-with-unpredictable-user-ids

进入靶场登录页面,用给出的账号登录。

1708068464_65cf0e70f220bec2a50ce.png!small?1708068465646


1708068483_65cf0e83dc270817a59f6.png!small?1708068484563

进入用户界面可见我们的api key非常复杂且随机。

1708068544_65cf0ec09b853adbf9c64.png!small?1708068545108

回到首页,进入carlos的贴子。

1708069244_65cf117c3305fcc4abc96.png!small?1708069246211


单击carlos进入他的个人首页。

1708069274_65cf119aea9d83cb36b71.png!small?1708069275777

在其个人首页抓包,发现泄露出了个人id,复制其个人id。

1708069341_65cf11dd207dcf4d28402.png!small

1708069389_65cf120d4e0459b7279cb.png!small?1708069389783

f2ee0c62-0dc8-4e2f-bb60-b68bd5622057

回到自己的用户页面,抓包,刷新,将自己的user id改成Carlos的。

1708069525_65cf1295ddb9921120ef9.png!small?1708069526359

1708069561_65cf12b9e91c50a2e9177.png!small?1708069562480

此时进入carlos的账号,复制其api key,单击submit solution将api key填入其中,通关。

1708069747_65cf1373ab7dbcc014705.png!small?1708069748120

从水平到垂直权限提升

通过水平越权到权限更高的用户,水平权限提升攻击可以转变为垂直权限提升。例如,通过水平越权,攻击者可能可以得到一个可以重置或捕获属于其他用户的密码的账号。如果攻击者以管理用户为重置、捕获密码的目标并入侵其帐户,则他们可以获得管理访问权限,从而执行垂直权限提升。

攻击者也可能在一个水平越权点造成垂直越权效果,比如:

https://insecure-website.com/myaccount?id=456

这是一个水平越权点,但如果管理员用户id为0或者1,此时id=0则会造成垂直越权,攻击者将获得对管理帐户页面的访问权限。此时页面可能会泄露管理员的密码或提供更改密码的方法,或者可能提供对特权功能的直接访问。

对应靶场

地址:https://portswigger.net/web-security/learning-paths/server-side-vulnerabilities-apprentice/access-control-apprentice/access-control/lab-user-id-controlled-by-request-parameter-with-password-disclosure

使用给定用户登录。

1708070534_65cf1686067a21f75a075.png!small?1708070534592

进入用户界面发现可以重置密码,在此抓包。

1708070579_65cf16b31d717a1dd8e9f.png!small?1708070579548

发现id就是用户名,直接改成administrator,放包。

1708070617_65cf16d93115d9d7ba42f.png!small?1708070617682

进入管理员界面。

1708070685_65cf171dc0a2de466e912.png!small?1708070686253

此时可以在burp suite中返回包看见密码,或者F12打开开发者工具,单击红框所示处再单击密码框。

1708071015_65cf18673127405dbd8b1.png!small?1708071015785

此时可见被隐藏的密码。

1708071049_65cf1889d104985d51b14.png!small?1708071050410

复制该密码,用它登录administrator账号。

1708071105_65cf18c1f2f37afde1809.png!small?1708071106418

进入admin panel,删除carlos通关。

1708071132_65cf18dc73afcdf96c268.png!small?1708071133083

1708071156_65cf18f43d4b3cee1df96.png!small?1708071156643


# 漏洞 # 渗透测试 # 网络安全 # web安全 # 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 fengyehao 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
网络安全web渗透测试基础
fengyehao LV.3
这家伙太懒了,还未填写个人描述!
  • 3 文章数
  • 0 关注者
Path Traversal路径遍历内容学习笔记与靶场通关方法(附靶场地址)
2024-04-01
Authentication身份验证漏洞内容学习笔记和通关攻略
2024-02-19
文章目录