Cross Iframe Trick:the Old New Thing(图)

互联网   发布时间:2008-10-08 19:36:28   作者:佚名   我要评论
我思考了很久才把这里面的错综复杂的关系整清楚,我想很多人看我下面的paper会睡着,或者干脆“一目百行”的跳过去,但如果你真的想弄懂,请调试我的 每一个poc,会非常有助于理解(虽然你还是可能会晕)。请尊重俺的劳动成果,码这么多字不容易。欢迎技术讨论,但谢绝没仔
实例如下:
  1.html的代码:
1.html:
// 1.html上的弹窗函数
function tt1(fvck){
alert(fvck);
}
同在 www.A.com 域下的 4.html代码:
4.html:
//parent.parent.tt1("fvck tt1"); 也可以
top.tt1("fvck tt1"); // 调用 1.html 里的 tt1() 函数
在 www.B.com 域下的3.html 作用是iframe proxy,其代码为:
3.html:
var tt1_4 = document.createElement("iframe");
tt1_4.src = "http://www.A.com/4.html";
document.body.appendChild(tt1_4);
访问 http://www.A.com/1.html 后,将通过 http://www.B.com/3.html ,利用 http://www.A.com/4.html 执行 http://www.A.com/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上的那个页面跨域攻击它。
  比如,www.baidu.com/av.html 可能包含了某个广告网站的一些页面,他使用的是iframe的方式:
  那么这个时候,攻击者如果能够控制evil.html,就可以在evil.html 中包含一个指向 http://www.baidu.com/evilupload.html 的iframe;
  当正常用户浏览 http://www.baidu.com/av.html 时候,就会受到来自 evilupload.html 的XSS攻击, 而攻击的来源是 http://www.advertise.com/evil.html 发起的。
  这种跨域的攻击将会极其隐蔽,因为真正的恶意脚本是写在evilupload.html 里的,所以即便查看了 av.html 和 evil.html 的代码也无法看到任何恶意脚本,只能看到两个iframe。
  对于IE 6, 甚至可以把 4.html 改名为 4.JPG 或者 4.RAR, 在iframe proxy中引用后,都将执行脚本。(想到GIFAR没?)
  而Firefox 2 则必须保持为 html 文件才能保证脚本的执行。
  控制evil.html的方法有很多种,最常见的包括直接攻击域B服务器、篡改客户端网络中的数据、或者是在evil.html 中放置一个 持久性的XSS,都将导致 evil.html 被控制
  通过控制 evil.html,调整不同的iframe src地址,我们可以得到第二种攻击方法。
  Attack Vector 2:在iframe proxy中直接引用一个非持久性XSS(反射XSS),可以让该XSS在父窗口中持久存在。
  很多人非常鄙视非持久性XSS(反射型XSS),认为这种XSS只能依靠欺骗的手段去骗人点击,才能让攻击正常实施起来。
  其实让非持久性XSS变得持久的方法,已经出现过好多次了。比如利用applet、利用flash的AS脚本、利用IE的Ghost 页面。
  那么今天这种方法又要多一个了:利用 Cross Iframe Trick
  实例如下:
  设想http://www.A.com/4.html 存在一个XSS漏洞,其代码如下:
4.html:
//parent.parent.tt1("fvck tt1");
//top.tt1("fvck tt1");
document.write("window.location.href "\' >");
这里存在一个基于DOM的XSS漏洞,当在浏览器地址栏里输入:
http://www.A.com/4.html#'>alert(/XSS/);时,alert()将被执行。
此时,利用 Cross Iframe技术,在 3.html 中直接构造iframe地址为XSS的地址。
3.html:
//function alertpoc(){ alert("alert POC"); }
var tt1_4 = document.createElement("iframe");
tt1_4.src = "http://www.A.com/4.html#\'\>\alert(\"Domain=\" document.domain)\;\\";
document.body.appendChild(tt1_4);
  访问 http://www.A.com/1.html 后,4.html里的XSS漏洞将被利用,并弹出可爱的小框框


  如果说,前面讲的两种方法是利用的Rule 2,那么Rule 1能否利用起来呢?思考后,发现Rule 1虽然没有跨域风险高,但还是会带来一些问题的。

相关文章

最新评论