审计程序。相关代码如下所示:
echo $_GET[“p”];
echo str_ireplace(“
echo str_ireplace(“
echo str_ireplace(“
正如下图所显示的那样,使用参数“p”的话,审计程序可以轻易地检测到它。
使用参数“q”的话,我们可以看到“
但是,如果换一种方法的话,我们还是可以迷惑这个审计程序的。我们可以将“
但是在参数“r”中,想要解决“
那么接下来,我们打算尝试一下,看看能不能把字符串“InvalidTag”当作一个JavaScript字符串来使用。但如果使用方法错误的话,浏览器将会抛出一个错误。错误信息如下图红色部分所示:
这是因为我们传递给事件处理器的内容只有字符串数据,而且还是包含在双引号中间的。在HTML中,这是我们给属性赋值时所用的标准方法,所以JavaScript在解析到第二个双引号的时候就会停止解析,因为代码中并没有定义“InvalidTag”。所以,我们要想办法修复这个语句中存在的问题。
事实证明,这并没有什么用。这样做的话未免有些太过于明显了,XSS审计程序可以轻而易举地检测到这个payload。但是,如果我们使用ES6的语法特性来“封装”这个JavaScript字符串的话,是否会有效果呢?
非常好,果然成功了。需要告诉大家的是,我们还有另一种方法同样可以实现类似的效果,这个方法非常有趣,但是该方法的适用范围就没有之前的方法那么广泛了(因为这个方法无法处理特殊字符)。
如上图所示。在这个方法中我们把可能会被替换的字符串当作标签(label)来使用,这种简洁的方法同样可以让浏览器弹出对话框。
不幸的是,上述所有这些所谓的“替换技巧”都无法用在参数“s”的身上。此时,审计程序似乎是根据字符“
总结
但是,广大开发人员请注意:即便是你在所有的HTML标签中都部署了相应的策略(例如正则表达式),但这项技术仍然不能被视作为一种防XSS的解决方案。因为这样将会为攻击者开启另外一扇大门,他们将可以通过替换后的“

◆◆0
构建XSS Payload是一门艺术,用最简单的方法绕过XSS的缓解方案
分页阅读: 1 2
发表评论