利用showModalDialog绕过IE的XSS过滤器
大家好!我是Masato Kinugawa。终于,我开始用英文写博客了 :) 同时我也会继续用日语写博客,就像一直以来那样:http://masatokinugawa.l0.cm/ 今天,我想分享如何使用showModalDialog绕过IE的XSS过滤器。
showModalDialog函数已经很古老,并且已经从web标准中移除,但它有独特的机制。我认为它可能会让我有所收获。这就是我开始研究它的原因。 该函数仍然被IE、Firefox和Safari支持。
首先,让我们回顾一下showModalDialog的用法。
第一个参数是您想在模态对话框中打开的URL。 第二个参数是您想传递给模态对话框的参数。您可以在模态窗口中通过window.dialogArguments属性使用它。
要通过window.dialogArguments传递参数,似乎两个窗口必须是同源的。
但在returnValue的情况下则不同。在Safari和IE中,两个窗口不必是同源的。(只有Firefox需要同源)
以下是我的测试页面: http://vulnerabledoma.in/showModalDialog/opener.html
Safari可以简单地将其传递给不同源。请从"x-origin"按钮测试。 要在IE上重现,我们需要3xx重定向。请从"x-origin(redirect)“按钮测试。
这种行为意味着在Safari和IE中,我们可以通过returnValue属性将信息传递给另一个源的页面。这可能会在某些web应用中造成漏洞。但当然,我不想在2015年教导showModalDialog的安全用法 :)
让我们进入主题,绕过IE的XSS过滤器。
可利用条件:
- XSS存在于JS的字符串字面量中。
- 任何JS属性包含敏感信息。
以下是我的测试页面:
http://vulnerabledoma.in/xss_token?q=[XSS_HERE]
|
|
眼见为实。请使用IE访问以下PoC:
http://l0.cm/xssfilter_bypass/showModalDialog.html
如果顺利,当您关闭模态对话框时,可以在alert中看到token字符串。
让我们看看细节。重定向将您带到:
http://vulnerabledoma.in/xss_token?q=%22%3BreturnValue=form.token.value//
载荷被注入:
|
|
然后,token被传递到returnValue。是的!!
不用说,这也有效:
|
|
我曾尝试通过window.opener访问其他页面的window对象,但没有成功。有什么想法吗?
就这样。明白了吗? :)
仅供参考,我过去曾写过一些关于XSS过滤器绕过技术的博客。(抱歉,只有日语文本) 如果您对其他绕过方法感兴趣,请使用Google翻译阅读。
- ブラウザのXSS保護機能をバイパスする(1) (2012/2)
- ブラウザのXSS保護機能をバイパスする(2) (2012/3)
- ブラウザのXSS保護機能をバイパスする(3) (2012/9)
- ブラウザのXSS保護機能をバイパスする(4) (2014/9)
- ブラウザのXSS保護機能をバイパスする(5) (2014/10)
我会尽可能继续用英文写博客。
谢谢!
更新(2015/6/17)
我找到了一种通过returnValue传递其他同源页面信息的方法。 无论如何,请访问以下页面并点击"go"按钮。
http://l0.cm/xssfilter_bypass/showModalDialog2.html
如果顺利,您可以在alert对话框中看到其他同源页面信息的”