实战 | 记一次23000美元赏金的漏洞挖掘
2022-10-20 09:36:24 Author: HACK学习呀(查看原文) 阅读量:25 收藏

这三个漏洞分别是身份验证绕过&文件上传&任意文件覆盖

今天我要分享一个我不久前发现的漏洞,我认为这很有趣。

但我不会分享漏洞赏金计划名称和域名..等,因为我没有获得公开它的许可。

所以让我们假设目标是test.com

当我开始搜索程序时,我发现管理面板 UI 绕过

目标使用JSON Web Token (JWT)作为身份验证机制,我花了一些时间来理解,试图在使用 JSON Web Token (JWT) 的漏洞赏金目标上找到漏洞。

当您登录主网站时,将为普通用户生成test.com一个JSON Web Token (JWT) 

现在在我知道目标是如何工作的之后,我开始进行侦察。阅读 javascript 文件,运行 Burp Suite,然后单击网站的任何底部,我还使用 Wayback Machine 获取所有可能的端点,最后是子域枚举。

我找到了有趣的子域admin.test.com,现在我们来到了有趣的部分,管理面板公开了 js 文件 app.js,在我阅读了整个文件 200000 行代码后,我发现它使用JSON Web Token (JWT) 进行身份验证,我找到了一个领域列表。

但有趣的领域是测试仪表板

什么是Realm?

“Realm”身份验证参数保留

更多关于Realm信息在这里:https://www.rfc-editor.org/rfc/rfc7235#section-2.2

我用https://jwt.io/解码用户Token,有一个realm=test-user

现在我知道如果我能够将领域操作到test-dashboard我感觉我能够登录到管理面板。

test-dashboard是网站名称而不是测试,就像:target-dashboard

步骤
1. https://test.com/
2.登录到您的帐户并在帖子请求中更改realm为:test-dashboard https://test.com.com/api/v1/login

HTTP 请求

POST /api/v1/login HTTP/1.1
Host: accounts.test.com
Connection: close
Content-Length: 79
Accept: */*
Content-Type: application/json
{“email”:”[email protected]”,”password”:”<password>”,”realm”:”test-dashboard”}

如果您解码jwt,您可以看到realm已更改。

现在使用操纵的 JWT 令牌,我可以登录到管理面板。

我立即报告了这个错误,但这是错误赏金计划的预期响应:

厂商:我们与开发人员讨论了这个问题,他们说你可以访问的管理仪表板只是一个在客户端呈现的反应应用程序(那种只需要呈现公共信息的页面),自从实际的 API 是一个单独的应用程序,其端点需要具有特定范围的有效身份验证令牌。因此,除非您可以制作一个可以让您与 API 交互的令牌,否则我们将降低问题的严重性。

测试人员将严重性从严重更新为"中"

我几乎放弃了,但我决定继续深入挖掘。

我同意团队的观点,考虑到我需要在JSON Web Token (JWT) 中缩小范围的关键错误。

但这是不可能的,我需要找到 0day 和 JWT 机制,任何使用JSON Web Token (JWT) 的网站都会受到攻击。

因为我可以控制领域并生成有效的 JWT,所以我尝试了每个有效负载来操纵范围,但没有任何东西对我有用,也无法进行我想要的转义。

我开始使用ffuf针对 admin.test.com 进行内容发现,但不幸的是,我没有找到任何有效的端点,

默认情况下ffuf使用 GET HTTP 方法,所以我尝试了 POST 方法。我发现这个端点https://admin.test.com/upload返回 403,这很有趣,因为我在 app.js 文件中找到了这个端点。

现在,如果我能够上传webshell 怎么办?我很兴奋

在我花了几个小时阅读 javascript 文件后,我能够构建文件上传请求:

POST /upload HTTP/1.1
Host: admin.test.com
Connection: close
Content-Length: 300
Accept: application/json, text/plain, */*
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypxxxxxx
Authorization: Bearer <JWT>
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4629.0 Safari/537.36
------WebKitFormBoundarypxxxxxx
Content-Disposition: form-data; name="destination"
gallery/
------WebKitFormBoundarypxxxxxx
Content-Disposition: form-data; name="file"; filename="poc.txt"
Content-Type: Text/plain
h4x0r-dz POC 
------WebKitFormBoundarypxxxxxx--

但我收到了 401 HTTP 错误 :( 。即使在我在 JWT 中操作领域之后

你知道什么是模糊测试吗?

Fuzz testing或Fuzzing是一种黑盒软件测试技术,主要包括以自动化方式使用畸形/半畸形数据注入来查找实现错误。

更多fuzz testing信息:https://owasp.org/www-community/Fuzzing

我开始对授权进行模糊测试:Bearer

最后,我看到了 200 responses。

步骤
1.test.com
2.登录帐户 。
3.grep Authorization header

Bearer这里的问题是当您从Authorization标头中删除时,您将能够在https://admin.test.com. 并且您将能够拥有管理员权限

发送此请求以上传文件

POST /upload HTTP/1.1
Host: admin.test.com
Connection: close
Content-Length: 300
Accept: application/json, text/plain, */*
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypxxxxxx
Authorization: <JWT>
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4629.0 Safari/537.36
------WebKitFormBoundarypxxxxxx
Content-Disposition: form-data; name="destination"
gallery/
------WebKitFormBoundarypxxxxxx
Content-Disposition: form-data; name="file"; filename="poc.txt"
Content-Type: Text/plain
h4x0r-dz POC 
------WebKitFormBoundarypxxxxxx--

我看到了 200 responses

现在我在哪里可以找到我的文件的路径??

起初,我以为到此为止,没有办法知道我的文件存储在哪里。

我尝试使用 ffuf 对所有子域进行内容发现,试图找到类似 admin.test.com/uploads/poc.txt 的内容

但我什么也没找到,我开始查看我的打嗝历史并阅读回复,我发现了这个 href=https://xxxxxxxx.cloudfront.net/gallery/xxxxxxxx

嗯,与我在目标输入处的文件上传请求中的值相同。

我浏览了 https://XXXXXXXXX.cloudfront.net/gallery/poc.txt

我发现我的文件在那里

Amazon CloudFront 是由 Amazon Web Services 运营的内容交付网络。内容交付网络提供了一个全球分布的代理服务器网络,这些代理服务器将内容(例如网络视频或其他庞大的媒体)缓存到消费者的本地,从而提高了下载内容的访问速度。

所以我不能上传 webshell。

即使我现在报告这个文件上传,严重性也会很低。我再次需要深入挖掘。

默认情况下,如果您上传 file.txt Amazon S3 , Amazon S3容易受到错误配置任意文件覆盖的影响。

现在我有任意文件覆盖,现在我可以做很多事情我发现在主网站中使用xxxxxxxx.cloudfront.net来托管 javascript 和 HTML 等文件

很多文件都托管在xxxxxxxx.cloudfront.net中,作为攻击者,我可以更改文件的内容并设法在主域中获取存储的 XSS 和其他安全问题,因为他们使用 xxxxxxxx.cloudfront.net 来托管windows软件和pdf,用户可以下载,它是主网站的一部分,

所以我可以通过将恶意代码放入现有的 EXE 或 pdf 文件 CSS ...等来更改这些文件的内容并在用户的计算机上获得 RCE

步骤 

攻击者可以更改其他文件的内容。destination请求正文中的参数指定文件路径,这样我可以更改任何文件

第一个 POC 文件:

由于缓存,我们无法从浏览器验证漏洞,因此您可以 CURL

现在,在我通过这个 requset 更改了文件 poc.txt 的内容之后:

POST /upload HTTP/1.1
Host: admin.test.com
Connection: close
Content-Length: 300
Accept: application/json, text/plain, */*
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypxxxxxx
Authorization: <JWT>
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4629.0 Safari/537.36
------WebKitFormBoundarypxxxxxx
Content-Disposition: form-data; name="destination"
gallery/
------WebKitFormBoundarypxxxxxx
Content-Disposition: form-data; name="file"; filename="poc.txt"
Content-Type: Text/plain
Arbitrary File Overwrite 
------WebKitFormBoundarypxxxxxx--

正如您在我的终端中看到的,我能够覆盖现有文件。

这个漏洞让我获得了2万美金赏金

另外,我获得了 3,000 美元的 UI 管理面板访问权限,总共 23000 美元

我希望你今天学到了一些新东西,如果我的文章不清楚,或者我说的太多,我真的很抱歉。

推荐阅读:

实战 | 记一次1000美金的TikTok盲打XSS的漏洞挖掘

实战 | 记一次挖掘到微软的存储型XSS漏洞的经历

实战 | 记一次PHP混淆后门的分析利用

干货 | Certutil在渗透中的利用和详解

实战 | 记一次Everything服务引发的蓝队溯源

作者:h4x0r_dz

来源:点击阅读原文

由HACK学习翻译整理,如需转载请注明来源


文章来源: http://mp.weixin.qq.com/s?__biz=MzI5MDU1NDk2MA==&mid=2247508556&idx=1&sn=db3fee7fe8d63d78db054cf0ace9cb1a&chksm=ec1cf773db6b7e657b56895749e4cd72a80ba71529abaf8f79a4ff606a92a94e7513f118d5ff#rd
如有侵权请联系:admin#unsafe.sh