==Ph4nt0m Security Team==

Issue 0×03, Phile #0×05 of 0×07

|=—————————————————————————=|
|=—————=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=—————=|
|=—————————————————————————=|
|=—————————————————————————=|
|=————————=[ By rayh4c ]=—————————=|
|=———————-=[ <rayh4c#80sec.com> ]=————————=|
|=—————————————————————————=|

[目录]

1. 前言
2. 同源策略简叙
3. 理解window对象的同源策略
4. 窗口引用功能中的同源策略漏洞
4.1 父窗口引用子窗口的同源策略问题
4.2 子窗口引用父窗口的同源策略问题
5. 利用窗口引用漏洞劫持浏览器
6. 利用XSS漏洞劫持浏览器
6.1 正向跨窗口劫持
6.2 反向跨窗口劫持
6.3 极度危险的跨框架窗口引用劫持
6.4 极度危险的正反向跨窗口递归劫持
6.5 完全控制浏览器
7. 后记
8. 参考

一、前言

最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。

二、同源策略简叙

同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。

三、理解window对象的同源策略

窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:

–code————————————————————————-
<script language=”javascript”>
for(p in window) document.write(p+”<br>”);
</script>
——————————————————————————-

这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
这些属性和方法就必须遵循同源策略。

举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
属性并没有被拒绝访问。

–demo.html——————————————————————–
<script language=”javascript”>
function allPrpos(obj) {
var props = “<table><tr><td>名称</td><td>值</td>”;
for(var p in obj){
if(typeof(obj[p])==”function”){
obj[p]();
}else{
try
{
props+=”<tr><td>”+p + “</td><td>” + obj[ p ] + “</td></tr>”;
}
catch (ex)
{

props+= “<tr><td>”+p + “</td><td>” +ex.message+”</td></tr>”;
}

}
}

document.write(props+”</table>”);
}

function createWin() {
newWin = window.open (“[url]http://www.google.com