在剑盟看到的帖子,很值得玩味特此转来,建议新手就不用看了。' b+ b. ]: X' Z- T
9 J% r# t0 M, ^, h
/ U0 N9 K2 q: `! D2 Z) F0 N............................................................................................................................................, d3 D" Y. j! _% B( e v
, D$ l) v( B% h/ p' R" m5 g# V# R是谁控制了我们的浏览器?% |- n; K; V# V; a: U. c2 p
1、现象是什么?! }! b2 }9 l+ U9 F* K
$ @( Z+ x, o' L$ k$ R大约从今年年初开始,很多人就发现,在浏览一些网站的时候,. |# J$ k; j$ V: T# X/ b- u6 X% v- j1 \
地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。6 B' g; b) \3 q! [- |
很多人以为这是网站自己弹出的广告,也就没有在意。
4 v/ s O3 Q( W {+ y- ~2 ], y9 g! F. b
$ T' a( q4 ]: b我是属于很在意的那些人之一。
/ J$ ?- x8 s+ s2 c P$ P4 Q: ?
8 A# O& N2 M( C5 E6 v" Q2、这是怎么回事?
, h& C2 d7 g# h9 S# C/ g" x
3 n# {* s1 H9 Q9 j% B经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),. A: V# S* U& u8 ?2 N
与使用何种操作系统也无关(linux用户也有相关报告)。7 L3 v& _) |$ ]/ }8 q7 P4 [6 x
我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。
+ |8 w7 `0 Z$ s3 w* q; w4 F
6 U6 g: H( d" N那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。9 A7 }6 s) f( o! D
- O; z) h& i; g9 x. ~那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,
4 [; B8 U) H& _) o$ }劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。( t3 ]7 ?) S' v' D
l- m% R% s- T3 [6 T9 t& r
伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。8 t4 s* f* B: e6 Y I( Y0 y6 c, y
E! {. m% W9 b# I. ?0 S# X* q为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。- d' K8 ^+ l$ s! J
直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回 404错误。2 a/ U T$ `8 R9 r5 h* P3 z
我写了一个脚本。不断访问这个IP,同时记录进出的数据包。1 K$ g! P j1 l( A
在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:
/ }, F( h8 O- G' t; rHTTP/1.1 404 Object Not Found6 D! x# D; t8 U0 L- v
Server: Microsoft-IIS/5.0/ x/ M p4 N0 k7 H4 ^9 f4 p
Date: Mon, 19 Jul 2004 12:57:37 GMT* m$ F1 A0 F3 C8 ]$ B
Connection: close N) I3 D0 k+ q8 ?
Content-Type: text/html* ]$ f; s |0 T8 _ e
Content-Length: 1118 _* w$ \$ z, G% s
〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉7 K8 V5 ?/ `) c0 |
〈body〉No web site is configured at this address.〈/body〉〈/html〉& G. N1 ^! ~! J: b
3 x# o* }1 b" L5 Y2 U8 |* x但是有两次,返回了这个:
0 @6 i! O3 n( `: D: P$ ]& B% [HTTP/1.1 200 OK
1 A. Q& m- k. RContent-type: text/html) g N5 o3 Z; J' P& y
〈html〉9 K; b# J. r3 t8 j: ^( ^4 a
〈meta http-equiv='Pragma' content='no-cache'〉
6 U7 b# x2 @3 w: I3 {〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉: ~/ x4 Q+ |6 _5 a
〈script〉
+ i1 r2 `5 e- Ewindow.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330'); s5 S3 u+ J& d& b, @- }
〈/script〉
. P+ f# A% E9 g$ h+ V〈head〉
, O3 C' w$ \- E% M〈title〉〈/title〉
+ E+ m8 P1 N2 @ a- A〈/head〉
+ \2 @4 O4 C# f8 B〈body〉
, s/ e1 i% k$ e _〈/body〉1 p6 F2 _2 D* o- j% |: N, f6 `5 G: ~
〈/html〉5 M- V7 t# W9 Q" @/ l
- W5 O& \2 j/ P* |更进一步分析数据包,可知劫持流程如下:, @% Y3 V! Z0 f6 S1 A
6 B! u) ]: f9 m4 F) g! K3 y! ]$ WA、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。& t) i3 g- h6 \2 G' a1 U
这个设备按照某种规律,对于某些HTTP请求进行特殊处理。' k9 M. G) D4 y8 ?9 P( o7 w
$ S1 D( v8 I/ O, B, W& Y" s# eB、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。
# i2 ~/ B6 p$ y4 w' N3 i这个过程是非常快的。我们的 HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。
& _7 x Z9 ]& B' H而任何正常的服务器都不可能在这么短的时间内做出回应。, I4 C4 y% k J* l
0 Z# k% j, w3 i9 T$ Z% m: ?9 K7 Y
C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。
7 K, {+ g8 {3 z" K j$ V% B X9 b0 s
D、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,
8 w/ O& _7 u9 n3 H重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。! V5 A( S7 B1 R
9 i3 y% u0 w' _7 |1 _3 X1 F8 E8 `
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,
- j. e/ C# n. {* T- V这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。; u- M; d, o1 Y
. m7 w2 M ?/ H2 u真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。# T6 E+ P1 V @% n* e0 |: L0 W
# E i6 v! [) `3、现在怎么办?
4 y5 k- n% |2 N) _! l9 e' g9 E4 ` 2 B' @, |4 x7 r8 j9 p
在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:
. [& i' k$ k$ B& t
" \& u, ~" L9 n, qA、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。& k6 K1 }3 _8 b% h3 Q9 q! m
: S2 V, {2 d9 k
B、在你自己的个人防火墙上,完全封锁211.147.5.121。* ]* A U+ Z' @+ d2 n& d
: j4 r5 s( T" J' |. e, ] ?
C、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。
Q5 |, O8 n* _. [5 K) h
' r1 |, O& P; |& \绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。' C9 D& {; w/ Y& \, f
今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?
* f& |+ _' s$ u- J0 H我们的HTTP通信完全控制在别人手里。
4 Y" o; ?7 t5 L3 m7 R 8 e3 g4 v$ P$ M! l8 i2 E& ], Q
4、如何把坏家伙揪出来?' l5 \6 ]7 B0 ? Z+ F
3 k& |3 v9 O8 |" ]3 ?2 s2 w" @
如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:
, C7 V5 Z, }3 f
2 e/ I7 g/ c) z% @& i. ?6 j方法1:5 b5 M5 T8 Y5 p7 p7 A, T
' O6 T; Q' x) Y5 D- F4 f
伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。; d. _. X# K6 q9 P
以我收到的数据包为例,真实的服务器端回应 TTL是107,伪造的回应TTL是53。
+ p6 c9 U4 T- k/ Z' z: _+ m0 w那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。4 W4 m) V- v* O( S3 p8 O
只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!. ~2 @; s; n: H" H
% l. d/ q s' R4 p. H" O2 B/ b3 {
方法2:
6 q1 x7 s. K8 d7 V6 p
- c# ~" M* J' B" t/ O假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。5 i( B* D. R; C( w
在google上以下面这些关键字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量访问时会被inject的网址。
U7 y# ?, n2 _ t8 z- n编写脚本反复访问这些网址,验证从你的ip访问过去是否会被 inject.将确实会被inject的结果搜集起来, Y* p: q$ T/ e0 a8 o
在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。: [( K- t- I: Z. ~* ^* @* a
, E/ ^$ P4 U% @) {8 O' p; `
上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,' z! S3 A9 x" e ~9 }/ h6 P& L
那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。4 c% W. `9 h. K V$ N
例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:2 L) X2 x9 h8 P3 J# H+ g$ X
MyIP-12-13-14-15-65-[89]-15-57-A: E% Y; v/ ]: o
MyIP-66-67-68-69-85-[89]-45-68-84-52-44-B
' P% I* v0 X- H. G8 W; T# iMyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C
9 J! _ R! B) w$ U( _* `MyIP-22-25-29-32-65-45-[89]-58-D
/ i6 Q+ { r! s' M/ n
' h4 a2 w' t- s6 s$ D7 _显然,inject设备极大可能就在“89”所在的机房。
6 B6 {( P' t* [6 T7 X' ^
1 K" w6 ^+ s: ]( [; U7 s方法3:/ B* A+ r; ?& k4 h0 E- v$ L
d4 e" E+ f$ R: K另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:
' [% P+ u' Q: k% _" q# Einetnum: 211.147.0.0 - 211.147.7.255/ g8 t2 m6 U+ O' ?( e: ^- }
netname: DYNEGY-COMMUNICATION
: J: u! v0 y0 Pdescr: DYNEGY-COMMUNICATION. |- F+ o& ?) W
descr: CO.LTD |' Y' j( G" ]
descr: BEIJING5 l$ L: M& Y; B* |9 _
country: CN: o. j- B* z1 r' K- W( V0 }
admin-c: PP40-AP
+ U% L& w* a' j+ F" J* k, ctech-c: SD76-AP6 N/ `" B# J u7 P/ _" u
mnt-by: MAINT-CNNIC-AP. `* H7 r. n* f; [
changed: [email protected] 20011112
3 ]6 V6 e9 D; N1 s' p1 y( Gstatus: ALLOCATED PORTABLE3 t! h. B$ }; c9 \
source: APNIC
1 A) x W' V# ]2 M' lperson: Pang Patrick8 n' n) g T. O" U0 E7 L
nic-hdl: PP40-AP( y Y8 ` f: W" O0 o
e-mail: [email protected]
' H6 x: ]6 ~ D ?: i4 H* Haddress: Fl./8, South Building, Bridge Mansion, No. 53
+ E6 R+ d% K& y* t* i7 Yphone: +86-10-631815133 r8 @, ^0 D8 U
fax-no: +86-10-63181597
; \- W P* C2 Fcountry: CN
* g ~; |1 W* t3 L+ hchanged: [email protected] 20030304; @0 V. Z1 l4 s+ l8 q- y
mnt-by: MAINT-CNNIC-AP
0 b( Y0 D3 h# \source: APNIC/ J9 C/ W' S/ u( }# m3 a0 {
person: ShouLan Du: f1 ?: |+ r1 r6 c% z2 l6 s
address: Fl./8, South Building, Bridge Mansion, No. 53
, m& L, L8 D9 y$ K, T6 kcountry: CN
$ c! z2 z. Z5 O% l& Fphone: +86-010-831600000 V! i- l6 n; H& F/ e; _& a' J7 m
fax-no: +86-010-83155528% I2 b8 b4 |) x
e-mail: [email protected]- J) d7 D9 R9 P( Z
nic-hdl: SD76-AP# w: r$ S! S! e1 ], q& f; I$ d
mnt-by: MAINT-CNNIC-AP
( y$ Z- Q1 B- Lchanged: [email protected] 20020403; B ]% M+ w% {. T6 ^* U
source: APNIC, b7 Y C! v8 w
3 h9 B! b, [' G. M3 j7 J. w6 t5、我为什么要写这篇文章?5 V" D& T3 n# N, v: s+ P) q
: S3 [2 e X* v* |7 J3 ~$ l
新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;
& ^6 t0 p" b1 q6 ^6 I; i或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。
4 l6 |+ P1 I2 t g+ L8 W; \! s可是这个 211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。3 l- L U) G' A1 W. c
事实上,你可以敲诈克林斯·潘,强奸克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,
- |, m( L& F6 K7 q但是现在你既然打搅了我的生活,我就不得不说几句了。! e4 F% ^0 l, T3 X0 m7 a. w3 c* ~( b
( V- O7 j! R( w( r1 N, f/ x
6、我是谁?
' C5 ~, P/ d2 j4 U( N$ N 9 N: W; N4 q+ Q. |5 m
如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。9 G) }: E8 Y @1 f! v7 j
#!/usr/bin/perl -w/ s. w6 g7 M# [# n: j
use Digest::MD5 qw(md5 md5_hex md5_base64);
. g+ V4 ~: J6 Z; q. u+ k1 ~$name = 'MyName';
8 {9 [8 e, z" k( Z$ U" k9 m$count = MyCount; X* Z% Q' P, H) e! T1 d& u
for ($i=0; $i〈$count; $i++)
9 z( n, `$ p: r: i- V# V{0 n2 \; C, L+ [8 Q. R4 v; j8 m
$name = md5_hex($name);
& ]* `# o; A q% r' Y: ^( u/ m}# n" |, `" o0 e: f5 R! W1 Q: k
print $name;2 S- a! T/ y: e
|, H5 [; G* t" u* _/ W以下签名,用于以后可能出现的关于此文的交流:
& g$ D' H* `/ h$ m+ Z- G1 6631876c2aea042934a5c4aaeabb88e9
( W6 |& k6 F3 ^9 ~2 a6a607b3bcff63980164d793ff61d1707 z! Q3 v# h& B4 w- y
3 6a58e8148eb75ce9c592236ef66a3448/ m0 S- U" Q( u2 N/ N
4 ded96d29f7b49d0dd3f9d17187356310, K* v: W% A ` | p1 x
5 cc603145bb5901a0ec8ec815d83eea66 |