当前位置:安全行业动态 → 正文

漏洞追踪:最新IE UXSS漏洞技术分析

责任编辑:editor04 |来源:企业网D1Net  2015-02-07 23:03:32 本文摘自:51CTO

最近David Leo在Full Disclosure上爆出了一个ie的uxss漏洞,可以绕过ie的同源策略。本文简要分析一下这个漏洞的原理。

漏洞追踪:最新IE UXSS漏洞技术分析

攻击过程

<iframe src="redirect.php"></iframe>

<iframe src="https://www.google.com/images/srpr/logo11w.png"></iframe>

<script>

top[0].eval('_=top[1];alert();_.location="javascript:alert(document.domain)"');

</script>

poc中第一个 iframe 利用一个302跳转,跳转到目标域,第二个iframe也加载了目标域的一个资源,和两个资源可以是不同的资源,当然跟Content-Type也没有关系。

上述 poc 在浏览器中的渲染过程大概如下:

1、浏览器渲染第一个 iframe,并加载 redirect.php 的资源;

2、浏览器渲染第二个 iframe,并加载对应的资源;

3、浏览器在第一个 iframe 上执行 eval 中的 js 脚本,分为一下几个步骤:

a.将第一个 iframe 赋值给一个变量

b.弹出一个alert 框

c.用户关闭 alert框

d.通过给 location 赋值的方式,在目标域上执行 payload

4、payload 在第一个 iframe 所在的域中执行,也就是目标域。

漏洞真相

貌似漏洞的关键在那个 alert 弹窗,由于 js 是单线程运行的,所有的弹窗(alert, prompt, and confirm)还有异步函数都会阻断浏览器进程,但是,这块的逻辑根据浏览器的不同,实现也有所不同。来看看上面的 POC 在不同浏览器上的渲染时间图:

FireFox

当alert框弹出的时候,firefox 会继续处理网络请求,当第一个 iframe 跳转,并且加载了目标域的资源之后,alert 弹窗将会被自动关闭,js 脚本停止执行,所以,后续payload 代码不会执行。

Chrome

当alert 弹窗弹出的时候,所有网络请求都终止了,所有后续 payload 中的 js 还是在原有的域上执行的。

IE

当 alert 弹窗弹出的时候,IE 会继续处理网络请求,当第一个 iframe 跳转之后,目标域的资源加载完成之后,用户关闭弹窗,payload 后续的代码是在目标域上执行的。

本质原因

当第一个 iframe 跳转之前,payload 中的 js 都是在原有的域上执行的,这不会绕过 SOP,然而,当第一个 iframe 跳转之后,IE 会转换相关的域。所以,之前 payload 中的 js 脚本的域切换到目标域了,而不是原本的域,所以,就可以在目标域上执行任意代码。注意,这里第二个 iframe 也是必须的。

利用成本&&其他

根据现有的 payload,貌似整个利用过程需要用户参与,事实上并非如此,看如下 payload:

<iframe src="redirect.php"></iframe>

<iframe src="https://www.google.com/images/srpr/logo11w.png"></iframe>

<script>

top[0].eval('_=top[1];with(new XMLHttpRequest)open("get","sleep.php",false),send();_.location="javascript:alert(document.domain)"');

</script>

alert 弹窗的目的是阻塞浏览器进程,上面 payload 用一个异步请求来达到同样的效果。

影响范围

目前 win7-win8.1上面的 ie10-ie11都受影响。

建议普通用户先切换到其他浏览器吧。

关键字:iframeIEredirect

本文摘自:51CTO

x 漏洞追踪:最新IE UXSS漏洞技术分析 扫一扫
分享本文到朋友圈
当前位置:安全行业动态 → 正文

漏洞追踪:最新IE UXSS漏洞技术分析

责任编辑:editor04 |来源:企业网D1Net  2015-02-07 23:03:32 本文摘自:51CTO

最近David Leo在Full Disclosure上爆出了一个ie的uxss漏洞,可以绕过ie的同源策略。本文简要分析一下这个漏洞的原理。

漏洞追踪:最新IE UXSS漏洞技术分析

攻击过程

<iframe src="redirect.php"></iframe>

<iframe src="https://www.google.com/images/srpr/logo11w.png"></iframe>

<script>

top[0].eval('_=top[1];alert();_.location="javascript:alert(document.domain)"');

</script>

poc中第一个 iframe 利用一个302跳转,跳转到目标域,第二个iframe也加载了目标域的一个资源,和两个资源可以是不同的资源,当然跟Content-Type也没有关系。

上述 poc 在浏览器中的渲染过程大概如下:

1、浏览器渲染第一个 iframe,并加载 redirect.php 的资源;

2、浏览器渲染第二个 iframe,并加载对应的资源;

3、浏览器在第一个 iframe 上执行 eval 中的 js 脚本,分为一下几个步骤:

a.将第一个 iframe 赋值给一个变量

b.弹出一个alert 框

c.用户关闭 alert框

d.通过给 location 赋值的方式,在目标域上执行 payload

4、payload 在第一个 iframe 所在的域中执行,也就是目标域。

漏洞真相

貌似漏洞的关键在那个 alert 弹窗,由于 js 是单线程运行的,所有的弹窗(alert, prompt, and confirm)还有异步函数都会阻断浏览器进程,但是,这块的逻辑根据浏览器的不同,实现也有所不同。来看看上面的 POC 在不同浏览器上的渲染时间图:

FireFox

当alert框弹出的时候,firefox 会继续处理网络请求,当第一个 iframe 跳转,并且加载了目标域的资源之后,alert 弹窗将会被自动关闭,js 脚本停止执行,所以,后续payload 代码不会执行。

Chrome

当alert 弹窗弹出的时候,所有网络请求都终止了,所有后续 payload 中的 js 还是在原有的域上执行的。

IE

当 alert 弹窗弹出的时候,IE 会继续处理网络请求,当第一个 iframe 跳转之后,目标域的资源加载完成之后,用户关闭弹窗,payload 后续的代码是在目标域上执行的。

本质原因

当第一个 iframe 跳转之前,payload 中的 js 都是在原有的域上执行的,这不会绕过 SOP,然而,当第一个 iframe 跳转之后,IE 会转换相关的域。所以,之前 payload 中的 js 脚本的域切换到目标域了,而不是原本的域,所以,就可以在目标域上执行任意代码。注意,这里第二个 iframe 也是必须的。

利用成本&&其他

根据现有的 payload,貌似整个利用过程需要用户参与,事实上并非如此,看如下 payload:

<iframe src="redirect.php"></iframe>

<iframe src="https://www.google.com/images/srpr/logo11w.png"></iframe>

<script>

top[0].eval('_=top[1];with(new XMLHttpRequest)open("get","sleep.php",false),send();_.location="javascript:alert(document.domain)"');

</script>

alert 弹窗的目的是阻塞浏览器进程,上面 payload 用一个异步请求来达到同样的效果。

影响范围

目前 win7-win8.1上面的 ie10-ie11都受影响。

建议普通用户先切换到其他浏览器吧。

关键字:iframeIEredirect

本文摘自:51CTO

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^