大多数WAF在阻止XSS时会阻止scriptiframe之类的明显标记,但它们不会阻止img。我知道您可以使用它来窃取IP,但这是吗?

评论

@grochmal对呈现库的含义示例:您可以使用存在的图元文件漏洞来攻击某些未打补丁的非常旧的Windows版本。

这会将GET请求发送到该域,并传递您存储的所有cookie(例如会话)。如果可行,那主要是您银行的过错,因为这些动作不应在GET请求中发生。

^并不是真的,因为它们出现在GET请求中。更像是:因为银行网站容易受到CSRF攻击。

#1 楼

就像安德斯(Anders)所说:Blender对身份验证对话框提出了非常好的建议,而multithr3at3d关于on属性是正确的。此外,Anders add还提出了关于a标签的争论,而Matija与利用库进行渲染有着很好的联系。
但是,还没有人谈论SVG。
首先让我们假设所有输入和输出都是正确消毒,因此无法使用onerror / onload进行技巧。而且我们对CSRF不感兴趣。我们追求XSS。
关于<img src=的第一个问题是它不遵循相同的来源策略。但这听起来可能没有听起来那么危险。
浏览器为呈现标签
< img src="http://domain/image.png" >所做的操作非常安全,因为浏览器不会调用解析器(例如XML或HTML解析器),它知道将要出现的是图像(gif,jpeg,png)。
浏览器将执行HTTP请求,并且将仅读取所出现内容的MIME(在Conetent-Type标头中,例如image/png)。如果答案没有Content-Type,则几个浏览器会根据扩展名进行猜测,但它们只会猜测图像MIME:image/jpegimage/pngimage/gif(tiff,bmp和ppm令人怀疑,某些浏览器可能对猜测的支持有限) 。某些浏览器甚至可能尝试根据幻数来猜测图像格式,但是再次,他们将不会尝试猜测深奥的格式。
如果浏览器可以匹配(可能是猜测的)MIME,它将加载正确的呈现库,呈现库可能溢出,但这是另一回事。如果MIME与图像渲染库不匹配,则图像将被丢弃。如果渲染库调用失败,则图像也将被丢弃。
浏览器永远都不会接近执行(脚本)上下文。大多数浏览器仅从javascript解析器输入执行上下文,并且它们只能从application/javascript MIME或XML或HTML解析器访问javascript解析器(因为它们可能具有嵌入式脚本)。
要执行XSS,我们需要执行上下文。输入SVG。
使用
哎呀,哎呀。 SVG是基于XML的矢量图形格式,因此它在浏览器中调用XML解析器。而且SVG具有<script>标签!是的,您可以将javascript直接嵌入SVG中。
乍一看,这没有那么危险。在<img>标记内支持SVG的浏览器不支持上下文内的脚本。理想情况下,您应该在浏览器支持脚本的<embed><object>标记内使用SVG。但是,不要对用户提供的内容执行此操作!
我认为允许在<img src=内放入SVG可能很危险:


使用XML解析器解析SVG,无论是否它位于<img><object>标签内。解析器当然已经调整了一些参数,以忽略<script>上下文中的<img>标签。但是,这很丑陋,它在特定情况下将标签列入了黑名单。黑名单的安全性很差。



<script>并不是在SVG中实现执行上下文的唯一方法,SVG中还存在onmouseover(和家族)事件。再次将其列入黑名单是很棘手的。


过去,浏览器中的XML解析器确实存在问题,尤其是围绕脚本块的XML注释。 SVG可能会出现类似的问题。


SVG完全支持XML名称空间。再次xlink:href是SVG中的一个完全有效的构造,并且XML解析器上下文中的浏览器可能会跟随它。


因此,是的,SVG打开了几种可能的向量来实现执行上下文。而且,它是一种相对较新的技术,因此没有得到很好的硬化。看到有关SVG处理的CVE,我不会感到惊讶。例如,ImageMagick的SVG有问题。

评论


这就是我订阅“全部拒绝”,然后订阅“部分拒绝”的原因之一。 :)抓住这样的边缘情况。

–马克·布法罗(Mark Buffalo)
16 Sep 1'在21:16



之所以被接受,是因为这似乎绝对是您使用此XSS所能做的“最糟糕”的事情。

–user1910744
2016年9月2日,下午1:46

XML解析器为什么会知道如何解释JavaScript或对事件做出反应?这个断言是否来自构建浏览器的个人经验,还是对内部浏览器体系结构的狂野猜测,可能正确或可能正确?

– Matthieu M.
16-9-5'9:40



关于xlink:href属性的最后一点已被规范覆盖,不能从img content => xlink:href中的标记加载任何外部内容,只能引用内部资源。

– Kaido
16-9-5 '10:47

@MatthieuM。 -我的意思是将其列入黑名单,因为存在我们正在解析SVG =>的代码,发现