浏览器解析问题造成的存储型跨站漏洞(DVBBS为例)

来源:互联网 发布:电信短信群发软件 编辑:程序博客网 时间:2024/05/20 16:40

参考:http://www.2cto.com/Article/201305/207379.html


先说说浏览器的对于标签的解析。

 
<A>文本段 1<B>文本段 2</B>文本段 3</A>
1.解析中解析到<b>的时候先把文本段1入栈。
2.解析到b的结束标签后把文本2入栈。
3.解析出a的结束标签再把文本3入栈。
所以一些流行的技术是通过一些优先级高的标签截断。
这里谈的是关于DOM解析和渲染造成的XSS。
DOM渲染就是,标签和属性正确闭合。
先来看一个例子,DVBBS的
对输出在属性的内容习惯性的做法是编码单引号和双引号,这里的例子将两者都编码了。
 
 
现在我们看下如何绕过,一般编码了这两玩意都没救了,但是结合下浏览器的特性。
我们输入
<a test=onclick=alert(1);//
 



 
这是为什么,很简单。
浏览器解析的时候遇到 
<a视为标签,然后就会去试图找到结束标签。
我们在属性中插入 <a 会被浏览器视为标签 然后我们输入<a test= test就会被视为属性名,因为DOM的渲染,所以test标签在重构的时候自动闭合 但是然后前面的属性就会被闭合掉 就是test=重构的时候成为了test="" 但是因为输出在属性中 所以 src会被闭合,我们后面输入的onclick=alert(1);// 会被再次闭合 XSS插入成功。
 
<img src="&lt;a test=" onclick="alert(1);//&quot;&quot;" onload="imgresize(this);">
0 0