bugbounty:利用文件上传 MIME嗅探到存储型XSS

前言

在私有程序上查找漏洞时,我能够通过文件上传功能找到存储的XSS漏洞。由于滥用IE/Edge处理文件的方式,我能够绕过文件类型检查

并将恶意HTML文件创建为GIF。我还分解了文件上传过滤器,并在利用它时我会进行相应的思考。

第一步:FUZZ探测

当我开始查看新程序时,我总是喜欢的一件事是FUZZ一下文件上传的点。文件上传中的漏洞通常会给你带来高严重性错误,而且开发人员似乎

很难保护它们。简单的FUZZ这个私人程序,我注意到它有一个联系支持的功能。在此联系表单中,您可以上传附件。我注意到的第一件事是,

当我上传图片时,它将其上传到同一个域名下。

示例:文件上传请求

请求上传文件

示例:响应

{"result":true,"message":"/UploadFiles/redacted/redacted/3021d74f18ddasdasd50abe934f.png,"code":0}

这立刻引起了我的注意。通常,存储用户信息,可以在同一位置/域名下上传的文件并不是一个很好的做法,因为它可能导致非常大的漏洞,包括远程代码执行漏洞。

过滤1:Bypass

接下来我们需要弄清楚,为了利用这个,是如何上传恶意文件。我尝试的第一件事就是将文件扩展名更改为.html。当然,这不起作用,我们得到:

{"result":false,"message":"That file type is not supported.","code":0}

我们可以得出结论,文件扩展名有一个过滤器。我们可以快速找到允许哪些文件的方法是通过Burp Intruder爆破扩展。

SecLists有一个很好的文件扩展名单,我们可以使用。不幸的是,端点具有速率限制,在几十个请求之后,我们的IP地址会暂停。

切换VPN服务器,我回来后开始手动测试一些扩展。我注意到只接受了网页应用:jpg,jpeg,png和gif。我还尝试了所有可以想到的扩展,

例如nullbytes,unicode编码等。在第一个实例之前的任何事情“.”被忽略,因为应用程序创建了自己唯一的文件名。但是,

我注意到检查扩展中的特殊字符时,其中的特殊字符未被删除,但在检查期间被忽略。例如,使用文件名badfile.”gif被接受,但是,badfile.foo”gif 并没有。

发送以下请求:

-----------------------------6683303835495
Content-Disposition: form-data; name="upload"; filename="badfile.''gif"
Content-Type: image/png

GIF89a
@HackerOn2Wheels
-----------------------------6683303835495--

响应信息:

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖