利用showModalDialog绕过IE的XSS过滤器
作者:Masato Kinugawa
发布时间:2015年6月16日
大家好!我是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过滤器
可利用条件:
- JS字符串字面量中存在XSS漏洞
- JS属性包含敏感信息
测试页面:
http://vulnerabledoma.in/xss_token?q=[XSS_HERE]
|
|
实际PoC(请使用IE访问):
http://l0.cm/xssfilter_bypass/showModalDialog.html
成功时,关闭模态对话框后会通过alert显示token字符串。
技术细节
重定向指向:
http://vulnerabledoma.in/xss_token?q=%22%3BreturnValue=form.token.value//
Payload注入后:
|
|
通过returnValue成功传递token!
以下方式同样有效:
|
|
曾尝试通过window.opener访问其他页面的window对象但未成功。如有方案欢迎分享!
历史XSS绕过技术参考
(日文内容,建议使用谷歌翻译阅读)
- 浏览器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对话框中显示其他同源页面的”