$23K:验证绕过+文件上传+任意文件覆盖

admin 2023年1月30日18:44:04评论84 views字数 4512阅读15分2秒阅读模式

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。


背景介绍:


今天的分享来自国外h4x0r_dz的白帽子,这是他在不久前发现的漏洞,相当有趣,因为目前还未获得披露许可,以下暂且以test.com作为目标替代。

白帽小伙儿在信息收集和漏洞挖掘过程中,发现了一处管理界面绕过。

首先是一个有趣的子域admin.test.com,管理界面公开了 js 文件,通过阅读.js文件 整整 200000 行代码后,小伙儿发现它使用JSON Web 令牌 (JWT) 进行身份验证,并且找到了一个 realm 列表,但其实让人感兴趣的是test-dashboard。

什么是 realm:

“realm”身份验证保留参数供指明保护范围的身份验证方案而使用,保护空间由规范的根 URI 有效请求和权限组件组成。

更多详细解释,详见:https://www.rfc-editor.org/rfc/rfc7235#section-2.2

realm=test-user

白帽小伙儿使用 https://jwt.io/ 对用户的JWT进行解码,感觉可以通过控制realm来访问到test-dashboard。具体步骤是这样的:

1. 打开https://test.com/

2.登录然后在post请求中将realm修改为”realm”:”test-dashboard”,请求包如下:

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

$23K:验证绕过+文件上传+任意文件覆盖

如果解码JWT,我们会看到realm已经改变:

$23K:验证绕过+文件上传+任意文件覆盖


那么,我们使用经过修改后JWT,就可以成功访问到管理面板了。

小伙儿立即报告了这个漏洞,对方很快给予了响应:

$23K:验证绕过+文件上传+任意文件覆盖

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

很快,审核人员便将漏洞的严重性从严重更改为了中级。

白帽小伙儿此时几乎想要放弃了,此时耳边响起了“不抛弃、不放弃”的声音,于是他决定继续深入挖掘。

他同意了对方开发人员的观点,为了认为漏洞至关重要,他需要在 JWT 中缩小范围。这几乎是不可能完成的任务,这相当于要找到 JWT 机制的0day漏洞。

白帽小伙儿疯狂地开始寻找类似的信息,由于可以控制realm并生成有效的 JWT,所以他开始尝试每个有效载荷来改变操纵范围,但没有任何效果,也无法完成想要的逃逸。

他开始使用 ffuf 对 admin.test.com 进行目录扫描,同样不幸的是,他没有找到任何有效的页面。

默认情况下,ffuf使用 GET HTTP 方法,于是小伙儿尝试了 POST 方法,发现https://admin.test.com/upload 返回了403响应,这很有趣,因为在 app.js 文件中也发现了该站点。

假如我们能够上传一个 shell 会怎样?(肾上腺素开始飙升了)

在花了几个小时重新阅读 JavaScript 文件后,白帽小伙儿构建文件上传请求:

POST /upload HTTP/1.1Host: admin.test.comConnection: closeContent-Length: 300Accept: application/json, text/plain, */*Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypxxxxxxAuthorization: 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------WebKitFormBoundarypxxxxxxContent-Disposition: form-data; name="destination"gallery/------WebKitFormBoundarypxxxxxxContent-Disposition: form-data; name="file"; filename="poc.txt"Content-Type: Text/plainh4x0r-dz POC ------WebKitFormBoundarypxxxxxx--


但是收到的却是 401 错误$23K:验证绕过+文件上传+任意文件覆盖

身份认证绕过:

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

如果你的答案是否定的,那么你将错过N多漏洞!

模糊测试是一种黑盒软件测试技术,它基本上包括以自动化方式使用格式错误/半格式错误的数据输入来发现程序的错误。

更多参考:https://owasp.org/www-community/Fuzzing

说干就干,开始模糊测试。最终成功获得了服务器的 200 响应

  1. 转到test.com

  2. 登录账号

3. Grep Authorization header

漏洞是这样的,当你从Authorization header中删除Bearer时,将能够进行绕过身份验证, 并且拥有管理员权限。

发送以下请求以上传文件:

POST /upload HTTP/1.1Host: admin.test.comConnection: closeContent-Length: 300Accept: application/json, text/plain, */*Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypxxxxxxAuthorization: <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------WebKitFormBoundarypxxxxxxContent-Disposition: form-data; name="destination"gallery/------WebKitFormBoundarypxxxxxxContent-Disposition: form-data; name="file"; filename="poc.txt"Content-Type: Text/plainh4x0r-dz POC ------WebKitFormBoundarypxxxxxx--

$23K:验证绕过+文件上传+任意文件覆盖


那么我们可以在哪里可以找到刚刚上传的文件呢?

起初,白帽小伙儿以为没有办法知道上传文件的路径,他尝试使用 ffuf 对所有子域进行扫描,试图找到 admin.test.com/uploads/poc.txt

但什么也没找到,于是他开始查看我的Burp-Suite 历史信息并查看服务器响应,成功找到了 href=https://xxxxx.cloudfront.net/gallery/xxxxx

在图库文件上传时的请求是这样的,那么浏览一下:

https://XXXXXXXXX.cloudfront.net/gallery/poc.txt 看看

成功发现刚刚上传的poc文件!

$23K:验证绕过+文件上传+任意文件覆盖

什么是CloudFront?

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


因此我们是无法上传Shell的。$23K:验证绕过+文件上传+任意文件覆盖

假如现在报告这个文件上传漏洞,漏洞评级也会非常低,因此我门再次需要更深入的挖掘!

任意文件覆盖

默认情况下,如果上传文件到 Amazon S3,Amazon S3 容易受到任意文件覆盖的影响。

既然有任意文件覆盖,那么我们就可以做很多事情,通过进一步深入,xxx.cloudfront.net 在主网站中被用来托管 javascript 和 HTML 以及其它文件。

$23K:验证绕过+文件上传+任意文件覆盖

如此多的文件托管在 xxx.cloudfront.net 中,作为攻击者,可以更改文件的内容并设法在主域中存储XSS和其它安全问题,因为它们使用 xxx.cloudfront.net 来托管Windows软件和PDF文件,用户可以下载。

所以可以通过将恶意代码放入现有的 EXE 或 PDF 文件 或是 CSS 中来更改这些文件的内容,从而在用户的计算机上获得 RCE ......

实现步骤

攻击者可以更改其它文件内容,请求正文中的参数只要指定文件路径,便可以更改任意文件。

第一个 POC 文件:

$23K:验证绕过+文件上传+任意文件覆盖

由于缓存,我们无法从浏览器来验证漏洞,因此可以 curl 命令:

现在,我们通过如下的 requset 请求来更改了文件 poc.txt 的内容:

POST /upload HTTP/1.1Host: admin.test.comConnection: closeContent-Length: 300Accept: application/json, text/plain, */*Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypxxxxxxAuthorization: <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------WebKitFormBoundarypxxxxxxContent-Disposition: form-data; name="destination"gallery/------WebKitFormBoundarypxxxxxxContent-Disposition: form-data; name="file"; filename="poc.txt"Content-Type: Text/plainArbitrary File Overwrite ------WebKitFormBoundarypxxxxxx--


$23K:验证绕过+文件上传+任意文件覆盖

如上所见,我们成功覆盖了现有文件!

SRC响应

$23K:验证绕过+文件上传+任意文件覆盖


白帽小伙儿因该漏洞获得了 20,000 美元奖励。

另外,因管理面板访问权限绕过获得了 3000 美元奖励,总计获得 23,000 美元的奖励。

$23K:验证绕过+文件上传+任意文件覆盖

希望你能从本篇分享中有所收获,祝各位周末愉快!

====正文结束====


​​

原文始发于微信公众号(骨哥说事):$23K:验证绕过+文件上传+任意文件覆盖

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月30日18:44:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   $23K:验证绕过+文件上传+任意文件覆盖http://cn-sec.com/archives/1389988.html

发表评论

匿名网友 填写信息