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虽然没有跨域风险高,但还是会带来一些问题的。
发表评论