XSS姿势——文件上传XSS

0x01 简单介绍

一个文件上传点是执行XSS应用程序的绝佳机会。很多网站都有用户权限上传个人资料图片的上传点,你有很多机会找到相关漏洞。如果碰巧是一个self XSS,你可以看看这篇文章。

0x02 实例分析

首先基本上我们都可以找到类似下面的一个攻击入口点,我觉得这个并不难。

姿势一:文件名方式

文件名本身可能会反映在页面所以一个带有XSS命名的文件便可以起到攻击作用。

虽然我没有准备靶场,但是你可以选择在W3Schools练习这种XSS 。

姿势二:Metadata

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

$ exiftool -field = XSS FILE

例如:

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

姿势三:Content

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

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

姿势四:Source

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

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

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文件。所以如果一个应用程序仅仅是使用这些方式验证是否是一个图像,那么该文件将可以上传成功(但可能在上传后被杀掉)。

0x03 最后

如果你想知道更多的有其标志性ASCII字符可以用于一个javascript变量赋值的文件类型,看我随后的文章。

也有很多比较详细的使用XSS和图像文件相结合绕过图形处理函数库过滤的例子。这方面的一个很好的例子是(https://github.com/fakhrizulkifli/Defeating-PHP-GD-imagecreatefromgif)

原文发布于微信公众号 - 网络安全社区悦信安(yuexin_an)

原文发表时间:2018-06-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张尧博客

6个好玩儿的LINUX命令

4295
来自专栏BY的专栏

快速完成JSON\字典转模型 For YYModelJSON转模型 For YYModel

4948
来自专栏程序员的碎碎念

用AJAX实现二级分类联动

今天学习到一个不错的内容,那就是分类联动。前面文章有说到ajax的基础知识,今天刚好强化一下所学内容。 ? 来看下效果: ? 当你选择了“地方网站”的时候就会自...

5475
来自专栏iOS122-移动混合开发研究院

实现iOS图片等资源文件的热更新化(一): 从Images.xcassets导出合适的图片

本文会基于一个已有的脚本工具自动导出所有的图片;最终给出的是一个从 Images.xcassets 到基于文件夹的精简 合适 的图片资源集的完整过程.难点在于从...

3449
来自专栏胡恒威的专栏

如何在 Linux 系统通过命令行生成随机文件

是否会有这样的场景:在有需要测试数据的时候,你不知如何生成一些已包含测试数据的文件,或者你是临时需要一个小的程序,可以让你生成不同大小的文件(比如大于1Mb少于...

4.2K0
来自专栏Golang语言社区

【译】用Go实现一个静态博客生成器

静态站点生成器是一种工具,给一些输入(例如,markdown),使用HTML,CSS和JavaScript生成完全静态的网站。 为什么这很酷?一般来说,搭建一个...

6504
来自专栏嵌入式程序猿

快来趴一趴JTAG那些事(下)

你以为你不知道,其实它一直就在你身边,JTAG是嵌入式开发中在熟悉不过的一个名词了,但是你真的很了解他吗,来一块趴一趴JTAG的那些事,今天来学习JTAG指令 ...

3538
来自专栏机器之心

资源 | MIT开放图像标注工具LabelMe源代码:助力机器视觉的发展

5909
来自专栏Jerry的SAP技术分享

如何查看CRM WebUI,C4C和Hybris里的页面技术信息

在WebClient UI页面上按F2,就能看到页面的技术信息, 可以找到当前页面是哪一个BSP component实现的:

3524
来自专栏开源优测

基于Excel参数化你的Selenium2测试

前言 今天我们就如何使用xlrd模块来进行python selenium2 + excel自动化测试过程中的参数化进行演示说明,以解决大家在自动化测试实践过程中...

2986

扫码关注云+社区

领取腾讯云代金券