原文链接:https://mp.weixin.qq.com/s?__biz ... 5a6c0361a3c6c57d3d5
noframes先看一段HTML
看上去就是展示了一张图片而已。用浏览器打开看看。
咦?怎么弹框了?看看源码。
原来,img标签src属性里的</noframes>把外层的<noframes>给闭合了,导致src后半部分的script标签被解析成了HTML,从而触发了弹框。 这可奇怪了。</noframes>明明在双引号里面,怎么就跨越了src属性跨越了img标签,漂洋过海地把外层的noframes标签给闭合了?难道说,noframes标签有一种特殊的魔力。它的闭合优先级,高于双引号的完整性优先级,高于嵌套在内层的标签的闭合优先级。 还有其他标签也有这样的魔力么?我们fuzz一下看看。 fuzz找找从w3school找到所有的HTML标签:
整理成tags.txt。
按照前述noframes的格式,依次把他们输出到show.html中。
打开show.html看一下效果。
现在我们知道,这些标签都是闭合优先级高于双引号完整性优先级的特殊标签。 <!-- <iframe> <noframes> <noscript> <script>
<style> <textarea> <title> <xmp>
攻击场景这个特性出现的原因,可能是源于浏览器对DOM树的特殊处理。而在某些xss攻击的场景下,这一特性可能导致意想不到的结果。 特别是,对于邮箱或者论坛等支持富文本的应用中。出于防御xss的考虑,一定会对用户的输入进行语法分析和检查。但是,如果语法分析的结果和浏览器的识别结果不一致的话,就会形成xss的攻击点。 比如文章开头的那段noframs语句,如果将src中的内容统一理解为img的src属性,就可能形成XSS攻击。 这个特性还有哪些用处,就需要你的脑洞大开了:)
|