尝试访问

当前,以下XSS攻击可成功避开IE XSS过滤器:

http://mdsec.net/error/5/Error.ashx?message=<scr%00ipt%20&message=> alert('xss')</script>

再次,通过利用该过滤器净化应用程序响应中的脚本代码的方式,可以实施通过其他方法无法实施的攻击。之所以会出现这种情况,主要是因为该过滤器以被动方式运行,仅寻找类似脚本的输入与类似脚本的输出之间的关联。它无法对应用程序进行交互性探查,以确定给定输入是否与给定输出相关联。因此,攻击者可以利用该过滤器净化在响应中出现的应用程序自身的脚本代码。如果攻击者在请求参数值中包含一部分现有脚本,IE XSS过滤器在请求和响应中发现相同的脚本代码,它就会修改响应中的脚本,以阻止该脚本执行。

事实证明,在某些情况下,净化现有脚本将改变包含用户输入反射的响应的后续部分的语法情境。这种情境的改变意味着应用程序自身对反射型输入的过滤不充分。因此,攻击者可以利用用户输入反射来实施XSS攻击(如果IE XSS过滤器没有修改响应,这种攻击将无法成功)。但是,能够实施这类攻击的情形通常与不常用的功能或早期版本的IE XSS过滤器中披露的缺陷(已修复)有关。

更重要的是,由于攻击者可以选择性地净化应用程序自身的脚本代码,因此,他们可以利用这种“能力”,通过破坏应用程序安全相关的控制机制来实施全然不同的攻击。一个常见的示例是删除防御性的framebusting代码(请参阅第13章了解详细信息),但其他大量示例主要与在客户端执行关键的安全防御任务的应用程序专用代码有关。

12.3.2 查找并利用保存型XSS漏洞

确定保存型XSS漏洞的过程与前面描述的确定反射型XSS漏洞的过程有很多相似之处,都包括在应用程序的每一个进入点提交一个特殊字符串。但是,这两个过程之间也存在一些重要的区别。在进行测试时,必须记住这些区别,以确定尽可能多的漏洞。