Loading
0

构建XSS Payload是一门艺术,用最简单的方法绕过XSS的缓解方案

审计程序。相关代码如下所示:
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的解决方案。因为这样将会为攻击者开启另外一扇大门,他们将可以通过替换后的“

分页阅读: 1 2
【声明】:8090安全小组门户(https://www.8090-sec.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们:邮箱hack@ddos.kim,我们会在最短的时间内进行处理。