mutation xss(mXSS)成因

这种骚操作之前只在Google搜索框的那个xss里见到过...直到昨天.....

这里不谈具体的case只想说一下我的理解

首先浏览器的parser在不同标签的上下文中行为并不一致

例如(这一段参考了先知社区的...)
​svg上下文中 style标签中的内容被视为子元素

​<svg><style><a id="</style><evil>"></a></style> 这里style才闭合</svg> 


​普通html上下文中 style标签中的内容被视为纯文本

<style><a id="</style>这里就闭合了 <evil>成功从a的属性里逃逸出来 "></a></style>


​script中的上下文和普通的html也不同

​以上并不是漏洞所在...只是同一段语言在不同上下文(语法)中拥有不同的语义

​真正的漏洞成因是sanitizer解析时的语法与浏览器最终生成dom时使用的语法不一致(常常是由于sanitizer无法正确处理不同的上下文或者浏览器的自动补全?)。后果就是sanitizer看到的东西和最终输出到dom里的东西在语法结构上不一致(突变),结合前面的case在最终的语义上就不同了...

在某些限制没那么严格的case里,并不需要用到上述语法二义性的vector,仅仅利用浏览器的自动补全改变用户输入的上下文就可以绕过sanitizer了,我不知道这种的算不算mxss,也许...?

感兴趣可以参考一下我在公司技术分享做的这个ppt

点击右边的按钮加载评论,如果无法加载那估计是被墙啦..你看着办w