Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1203043
  • 博文数量: 272
  • 博客积分: 3899
  • 博客等级: 中校
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-15 14:53
文章分类

全部博文(272)

文章存档

2012年(272)

分类: 网络与安全

2012-06-25 14:32:00

版权所有,转载请注明出处! 
Author: axis@ph4nt0m.org

昨天好像不小心标题党了一下,今天整理好paper发出来,希望不会被口水淹没。

我思考了很久才把这里面的错综复杂的关系整清楚,我想很多人看我下面的paper会睡着,或者干脆“一目百行”的跳过去,但如果你真的想弄懂,请调试我的每一个poc,会非常有助于理解(虽然你还是可能会晕)。请尊重俺的劳动成果,码这么多字不容易。欢迎技术讨论,但谢绝没仔细看就来指手画脚的。@_@

首先,为了帮助大家更好的理解,我先讲讲这种攻击能够达成什么效果:
1. 跨域执行脚本(IE、Firefox)
2. 把非持久性XSS变成持久性XSS
3. 跨页面执行脚本
4. 浏览器将很难修补这一“特性”造成的威胁
5. 当然还是有一些条件限制的,本篇只是在理论上描述了这种攻击。


那么,什么是cross iframe,简单来说就是把iframe做一个迭代,以实现一些iframe之间的交叉数据访问。在正常的web应用中,许多地方都有用到这种技术,比如facebook,比如yahoo。

但是由cross iframe引申出来一些安全隐患,则是我这里要探讨的重点。

以下是我的测试环境:
Windows XP SP2
IE 6 SP2 (我只有IE6,没有IE7,请自行测试IE7)
Firefox 2.0.0.16

测试域名:
www.A.com (/1.html , /4.html)
(/2.html , /3.html)


这次测试主要使用了4个html页面,请牢记1.html和4.html是在域A下; 2.html和3.html是在域B下

首先来看看什么是Cross Iframe, 他们又能干些什么。

Rule1: 同一个页面下的两个iframe,如果这两个iframe指向同一个域,那么他们可以互相访问,并操作对方页面的脚本。


在 上,存在一个 1.html ,包含了两个iframe,这两个iframe分别引用了 上的两个页面。其代码如下:

点击(此处)折叠或打开

  1. 1.html:
  2. 现在我们的目的就是利用 iframe:tt2_2 去调用 iframe:tt2_3里的javascript的函数。
  3. 3.html的代码如下:
  4. 3.html:
  5. 2.html的代码如下:
  6. 2.html:
那么,当访问 http:///1.html 时,iframe:tt2_2中的脚本在执行了,它通过读父窗口的iframe:tt2_3,尝试在其中执行脚本函数alertpoc()。由于tt2_2与tt2_3同在 域中,所以他们之间不存在跨域问题,脚本被允许执行。
Rule2:域B能够以 iframe proxy 的方式,操作域A上的脚本,或者传递信息,实现跨域操作。

什么叫iframe proxy呢?其实就是做了一次iframe的迭代。

如下:
http:///1.html 中包含一个iframe,指向 http:///3.html

http:///3.html 中又包含一个iframe,指向 http:///4.html

那么这个3.html就是一个iframe proxy,通过 3.html 就能从B域 向 A域的 4.html传递消息,如果4.html还有一些处理的话,就可以执行脚本。

实例如下:
1.html的代码:

点击(此处)折叠或打开

  1. 1.html:
  2. 同在 域下的 4.html代码:
  3. 4.html:
  4. 在 域下的3.html 作用是iframe proxy,其代码为:
  5. 3.html:
访问 http:///1.html 后,将通过 http:///3.html ,利用 http:///4.html 执行 http:///1.html 的脚本

如下:
正确执行了脚本。


跨域的问题已经POC过了,那么存在什么样的风险呢?

先讲跨域的问题。

首先,由于4.html在这里关联性最小,所以我们假设4.html是我们在域A下上传的某个文件,或者是存在XSS漏洞的某个页面。

那么对于域A下的页面 1.html,它包含了 域B的3.html,当域B下的3.html被恶意用户控制时,恶意用户就可以通过4.html,直接攻击到 1.html

所以我们有了第一个攻击方法:
Attack Vector 1:控制iframe proxy后可以跨域攻击父页面

由于域B和域A不是同一个域,所以域A的安全级别和一些防范措施很可能无法涉及到域B,这种信任上的危机将带来一定的风险。

请注意和普通挂马或者是XSS攻击不同的是,域A上的这个页面是我们无法控制或篡改的,但他正好包含了一个指向域B上页面的iframe,所以我们才可以通过域B上的那个页面跨域攻击它。

比如, 可能包含了某个广告网站的一些页面,他使用的是iframe的方式: