边缘XSS滤镜旁路

我最初于2015年9月4日向微软报告了这个问题,但仍然没有解决。自从我的原始报告以来已经很久了,我决定现在写有关细节的博客。

IE过去存在一个缺陷,您可以将位置对象用作函数,并在对象中将tostring/valueof组合到字面上执行代码。我认为这是最初发现的sirdarckcat但是我可能错了。基本上,您将对象文字用作伪造数组,该阵列调用联接函数,该数组从对象字面构造字符串并将其传递给valueof,从而将其传递到位置对象。这是代码:

- {toString:[]。加入,长度:1,0:'javascript:alert(123)',valueof:location}

这也适用于最新版本的Edge,但是两个浏览器都将其视为XSS攻击。XSS滤波器Regexes检测一个字符串,然后是任何数量的字符,然后是“ {”或“”,然后是tostring/valueof和colon字符。来自Valueof的“ A”和ToString的“ O”被“#”字符代替。这是REGEX的简化版本:

[“'``]。*?[{,]。

这里有正则截至2015年10月。

Edge虽然支持ES6,并且有一些有用的新功能。ES6中的计算属性允许您传递表达式以计算属性名称。例如:

x ='a';
o = {[x]:123};
警报(O.A)

我认为您可以看到这是在哪里。通过组合两种技术,我们可以绕过Edge XSS滤波器。如前所述,不幸的是,REGEXES寻找tostring/valueof,我们可以使用计算的属性来混淆它们。

x ='g',y ='f',
{['tostrin'+x]:[]。加入,长度:1,0:'java \ script:arter \ x28123 \ x29',['valueo'+y]:location} - ''';

POC

访问我们的网络安全学beplay体育能用吗院了解有关跨站点脚本(XSS)的更多信息

回到所有文章

相关的研究

每日Swig的推荐故事beplay2018官网