原文连接:http://brutelogic.com.br/blog/javascript
一个文件上传点是执行XSS应用程序的绝佳机会。不少网站都有用户权限上传我的资料图片的上传点,你有不少机会找到相关漏洞。若是碰巧是一个self XSS,你能够看看这篇文章。java
首先基本上咱们均可以找到相似下面的一个攻击入口点,我以为这个并不难。安全
文件名自己可能会反映在页面因此一个带有XSS命名的文件即可以起到攻击做用。dom
虽然我没有准备靶场,可是你能够选择在W3Schools练习这种XSS 。xss
使用exiftool这个工具能够经过改变EXIF metadata进而必定概率引发某处反射:svg
$ exiftool -field = XSS FILE
例如:函数
$ exiftool -Artist=’ “><img src=1 onerror=alert(document.domain)>’ brute.jpeg
若是应用容许上传SVG格式的文件(其实就是一个图像类型的),那么带有如下content的文件能够被用来触发XSS:工具
<svg xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)"/>
一个 PoC用来验证。你能够经过访问brutelogic.com.br/poc.svg看到效果网站
创建一个携带有JavaScript payload的GIF图像用做一个脚本的源。这对绕过CSP(内容安全策略)保护“script-src ‘self’”(即不容许使用示例的这种xss方式进行攻击<script>alert(1)</script>)是颇有用的,但前提是咱们可以成功地在相同的域注入,以下所示。this
要建立这样的图像须要这个做为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文件。因此若是一个应用程序仅仅是使用这些方式验证是不是一个图像,那么该文件将能够上传成功(但可能在上传后被杀掉)。
若是你想知道更多的有其标志性ASCII字符能够用于一个javascript变量赋值的文件类型,看我随后的文章。
也有不少比较详细的使用XSS和图像文件相结合绕过图形处理函数库过滤的例子。这方面的一个很好的例子是here