简单介绍

文件上传点不仅仅可以绕过文件限制上传shell脚本从而getshell,也可以通过上传点执行xss应用程序,下面详细介绍一下文件上传xss的各种姿势

0x01 上传带有恶意代码的图片

把以下代码写入文件,后缀改成图片格式,如下图可以看出直接解析图片里面的html代码引发xss

<html>
    <body>
    <img src=1 onerror=alert(1)>
    </body>
</html>

image-20210210200309906

0x02 更改图片后缀名绕过

或者将后缀名改为html格式,htm格式,ht m格式,jpgx或其他任意格式进行尝试,如下图提前将在txt文件中写好代码,然后通过burpsuit抓包后将后缀改为html格式上传成功后直接绕过

image-20210210200321687

0x03 Metadata

使用exiftool这个工具可以通过改变EXIF metadata进而一定几率引起某处反射:

#!bash
$ exiftool -field = XSS FILE

例如:

#!bash
$ exiftool -Artist=’ “><img src=1 onerror=alert(document.domain)>’ brute.jpeg

image-20210210200349194

0x04 Content

如果应用允许上传SVG格式的文件(其实就是一个图像类型的),那么带有以下content的文件可以被用来触发XSS:

#!html
<svg xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)"/>

一个 PoC用来验证。你可以通过访问brutelogic.com.br/poc.svg看到效果

0x05 Source

建立一个携带有JavaScript payload的GIF图像用作一个脚本的源。这对绕过CSP(内容安全策略)保护“script-src ‘self’”(即不允许使用示例的这种xss方式进行攻击<script>alert(1)</script>)是很有用的,但前提是我们能够成功地在相同的域注入

要创建这样的图像需要这个作为content 和 name,并使用.gif扩展名:

#!html
GIF89a/*<svg/onload=alert(1)>*/=alert(document.domain)//;

这个GIF的图片头——GIF89a,作为alert function的变量分配给alert function。但是他们之间,还有一个被标注的XSS变量用来防止图片被恢复为text/HTML MIME文件类型,因此只需发送一个对这个文件的请求payload 就可以被执行。

正如我们下面看到的,文件类unix命令和PHP函数中的exif_imagetype()和getimagesize()会将其识别为一个GIF文件。所以如果一个应用程序仅仅是使用这些方式验证是否是一个图像,那么该文件将可以上传成功(但可能在上传后被杀掉)。

image-20210210200407323

最后

更多xss绕过可以参考此链接:https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

最后修改:2021 年 02 月 10 日 08 : 46 PM
如果觉得我的文章对你有用,请随意赞赏