背景介绍:
渗透目标为 HackerOne 上的一个私人项目,在其中一个域中,白帽子发现了一处跨站请求伪造(Cross Site Request Forgery,简称CSRF)漏洞,当与不安全的直接对象引用(Insecure Direct Object Reference,简称IDOR)结合使用时,该漏可以删除任意账户。
什么是CSRF?
跨站点请求伪造(也称为 CSRF)是一种网络安全漏洞,允许攻击者诱使用户执行他们不打算执行的操作,它可以使攻击者规避同源策略(该策略旨在防止不同网站间的相互干扰)。
什么是IDOR?
不安全的直接对象引用 (IDOR) 是一种访问控制漏洞,当应用程序使用用户提供的输入直接访问某些对象时会出现此类漏洞。
漏洞发现:
目标网站可以使用两种不同类型的账户进行注册:
- 开源账户
- 试用账号
在试用账户中,可以获得 29 天的试用期,也可以手动选择取消它。
当使用试用帐户注册时,有一个“Cancel Enterprise”选项,当点击该选项时,帐户将自动删除,在该请求中白帽子发现有 2 个参数**googleAnalyticsId=<Value>&mktToken=<Value>**
,但在浏览器中捕获另一个帐户的请求时,却没有传递(**googleAnalyticsId=&mktToken=**)
参数的值,由此推测这里可能会受到 CSRF 攻击, GET 请求如下:
GET /userName1/account/cancelTrial/?&googleAnalyticsId=&mktToken=
尝试通过更改用户名的方式来制作 CSRF 请求:
GET /userName2/account/cancelTrial/?&googleAnalyticsId=&mktToken=
但并未成功,于是快速检查referrer header:
Referer: https://example.com/userName1/account/account
更改为:
Referer: https://example.com/userName2/account/account
再次尝试CSRF 攻击,成功!
总结下来,漏洞发现的步骤一共分为以下几个步骤:
- 通过两个不同的浏览器访问目标网站:https://example.com
- 然后在两个浏览器上创建不同的试用帐户
- 点击验证链接,转至控制台
- 访问了第二个帐户 https://example.com/
/account/ 的帐户链接,在这里点击“Cancel Enterprise”选项
账号1
账号2
账号删除
5.点击按钮的同时,使用Burp Suite抓包
取消试用/删除请求
在上图可以看到已经删除了 googleAnalyticsId=&mktToken= 参数的值。
- 而后在第一个浏览器和 GET 请求 URL 以及 Referrer 标头中修改账号名,并制作 CSRF PoC:
修改参数值
7.生成 CSRF Poc 并保存为.html:
CSRF PoC
概念证明(POC)
8.运行POC,并在第一个浏览器账户中重新加载页面,该账户被删除:
运行POC
账号已被删除
这里目标账户的电子邮件 ID 是 sovovem334@yektara.com(使用的是临时邮件)
为了更好地理解漏洞,我比较了在两个不同浏览器(Firefox 和 Firefox Private)上打开的两个账户(account1 和 account2)的请求,使用 BurpSuite 的“Comparer”模块比较了请求。
注:这里的 pentesterworld 为攻击者的账户,defendingera 为受害者的账户。
感谢阅读,希望本文对你有所帮助,欢迎分享给更多喜欢它的朋友们~