在剑盟看到的帖子,很值得玩味特此转来,建议新手就不用看了。% }3 C7 R8 h0 `
' b" i0 T0 j6 n& z8 j/ p, o- V' d1 ^. i" p2 F. @3 g e& F; m* Y f
............................................................................................................................................8 e# X: h( m0 J3 w) W$ D& B
$ v3 O3 \( w l. K) B& W+ g/ [
是谁控制了我们的浏览器?. I2 d5 d+ g* B. S8 H6 M" {/ D
1、现象是什么?3 \$ U. K+ u6 I* c
0 O. w. t1 |# F, h H S- l大约从今年年初开始,很多人就发现,在浏览一些网站的时候,3 a* `- n. b3 t' t ^
地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。
: Z! U# S. n. N( h6 V$ h很多人以为这是网站自己弹出的广告,也就没有在意。
' M2 b& N8 t0 A5 A; u1 Q5 w7 { 6 e7 Q: [5 U7 ?7 S3 |0 D9 w e+ Z& n
我是属于很在意的那些人之一。, o9 G% t; s7 D# V D- b: {) `, S7 E
' }6 a8 u0 p7 z: p
2、这是怎么回事?
9 e3 m% w7 d6 u' @5 R1 R/ [0 y 0 U0 N0 ^& |9 i0 M p
经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),
/ S# R8 [4 v/ }$ g8 _# n与使用何种操作系统也无关(linux用户也有相关报告)。* b1 F% A" B: q4 }
我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。5 V5 E3 g9 m- W% c
3 L1 f- Z+ ^! N( b: [( z/ L
那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。
# y( }% Y. o/ R0 e9 r. K
8 U" j3 j3 D/ k那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,+ }* B5 [( [. a# q; r
劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。
( s, @3 i5 ^, w3 S4 d0 T, d
6 S3 W# D0 x9 V3 ~" _伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。
* c; Q: o. @5 F & _2 ~* C- C# w
为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。
|( ~+ _4 _: H直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回 404错误。- m! G+ d! V# y+ g* p% _
我写了一个脚本。不断访问这个IP,同时记录进出的数据包。
& J1 y* F& y/ D5 Y. i* c7 X在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:! I5 f$ g, d! H# }& {
HTTP/1.1 404 Object Not Found$ J. n9 S3 q: Y1 {$ w
Server: Microsoft-IIS/5.0
$ z- L8 E1 q/ T' r+ i0 h& qDate: Mon, 19 Jul 2004 12:57:37 GMT/ L8 x) w* ]" `% _3 T. p2 J
Connection: close9 K; d" W$ l0 {- l
Content-Type: text/html4 O" M+ H% B t0 \9 v+ `
Content-Length: 111
8 R L" W+ q6 q l〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉
* d: e6 `9 ]9 V7 F0 ]. C8 _" A〈body〉No web site is configured at this address.〈/body〉〈/html〉
( i! E7 X2 n! @* b; G: Q% C( N5 ~ 6 S2 i& z: @7 c6 Z
但是有两次,返回了这个:+ z, f3 M0 p# [3 Z) g
HTTP/1.1 200 OK
; e2 D5 L% S1 jContent-type: text/html+ j4 \& Q8 ?0 p9 P% g
〈html〉5 v7 d% ^7 q+ m
〈meta http-equiv='Pragma' content='no-cache'〉; R0 M) B; v% P7 I# P
〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉" E' b2 m4 X( D$ v, E/ h
〈script〉
& N: ~5 N7 D- T( {window.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');
# r4 R' h: u: U1 H" t5 [ U+ D〈/script〉2 Q9 \6 ^, ?; B1 S H( \: |" C
〈head〉+ ~8 Z! N, j* E1 r+ ]
〈title〉〈/title〉1 ?( w$ }. G% b
〈/head〉
( Q% w# I- W& i/ K- v" Y: ~5 v〈body〉
A) _' _. x1 Z" P; r/ N9 [! S0 ?〈/body〉 {# F" _4 Y! \9 n D: ]5 Z s
〈/html〉
" I0 K- l; f( }; z ) l# R) x) K' O- u% y* @' P4 n% @9 [! i
更进一步分析数据包,可知劫持流程如下:! U! E0 y7 |+ U$ E
( b. r5 M7 V/ w y* hA、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。
. h- t/ i# }; I, p$ B' W# h/ r这个设备按照某种规律,对于某些HTTP请求进行特殊处理。
8 x7 U4 g$ I. s9 C7 m: J ' O3 o' j. }# q# i7 z4 T! y7 }
B、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。7 U6 k3 G, P; q+ t% K/ P3 {
这个过程是非常快的。我们的 HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。
$ K9 o- g( L3 I3 e; [0 ~" I& W而任何正常的服务器都不可能在这么短的时间内做出回应。! m6 W5 @! F6 E, h
- X# K2 Q+ P: k" H! } I1 PC、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。
8 w) F0 k+ W" [, s' Y) V* N0 K
7 P6 O N- `1 P- ?. I% bD、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,: ~7 n4 O# `7 b2 b5 y
重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。3 n& ?% r1 _$ _% E, a! r, I {
, q* |5 ^( E/ H) \' S) Y: _. _
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,1 f E6 w/ r K. D+ `- [
这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。
' Q3 L; [2 A) V) i. `! y
, @6 y" ]) \6 A* i' h真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。
^; r- T6 H+ p$ o
% q) x# ~1 @0 L$ Y: G( t: f3、现在怎么办?* |) F8 c+ j. J* O
/ x0 \' A; \ C& A/ o* ~+ h2 Q3 @) \) z在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:
! Z$ k: m2 E3 J7 N2 o
0 q" t! e- \3 U* {- g4 `& OA、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。8 P" F, R& S% t- F: ^) T) N% C$ }
- J) ^: M% n. K
B、在你自己的个人防火墙上,完全封锁211.147.5.121。2 g/ |% e$ f( o2 o4 f' I2 @; C
! ~* G, v6 c, f; _4 P4 n+ |
C、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。
' I& \, H/ p7 {+ U 3 F' m% Y/ K- W/ I
绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。1 i3 X) | f' n! W1 }1 H
今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?! y8 ^" t, K% T8 u, ^4 H! ` b% A% N4 s
我们的HTTP通信完全控制在别人手里。* X6 j" o6 e' g5 Y% x2 f
! C% v8 f3 P% e' R4、如何把坏家伙揪出来?; {6 ?' Z( d- J
4 R% Q: }! s% H% t) u% Q) B
如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:
/ z0 W+ L- Z) B; v; O6 O 6 [7 K- T7 |) X/ M7 k4 W
方法1:
- Y5 Z3 }, ]5 A% w& J* v
! W8 {) P' _* _4 ~8 p伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。& D& E9 `0 U9 Z1 n$ k
以我收到的数据包为例,真实的服务器端回应 TTL是107,伪造的回应TTL是53。
r3 {* d" Q+ n那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。
2 }: T: q& D! m. l只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!3 F4 r# Y) F* x& w7 }" T; G" |
1 f& V0 a/ b/ S L6 j! m; E方法2:
3 s! L; k: o1 _& x4 ~. K9 h1 R" r
% i. w7 h$ A4 `假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。/ G# ?- E, G3 p$ \% ]) f( F
在google上以下面这些关键字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量访问时会被inject的网址。! M3 V$ G/ G, W1 t1 ?
编写脚本反复访问这些网址,验证从你的ip访问过去是否会被 inject.将确实会被inject的结果搜集起来,, ]6 U1 a, o: T& W- H t' U
在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。
3 Y9 u8 T$ [+ w. B6 x& x ( n% _- q2 q4 t4 O% X' \, [& R b
上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,
! l( O1 B5 R* D% }& F) Q3 q) c那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。
) m* R$ t7 F* \0 |" t+ W例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:
" G8 C( Q3 \2 x5 c, S- ?' ZMyIP-12-13-14-15-65-[89]-15-57-A
& N( s( k. i4 Q0 t. }MyIP-66-67-68-69-85-[89]-45-68-84-52-44-B1 t% E5 c7 {" J6 i" u2 ?
MyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C& H8 g, y7 W8 U. D z G0 p
MyIP-22-25-29-32-65-45-[89]-58-D4 l+ x( e8 ?3 B9 E( P' N
2 K# \ l7 U' w3 ^
显然,inject设备极大可能就在“89”所在的机房。
) k. @* H: e" n: x. N& B 7 c- v6 U: F, f5 k- ]
方法3:
8 D# V7 o/ j6 P8 U& m , q3 p. \; c( [
另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:* P5 r ^3 z, X# J0 s h: [ T
inetnum: 211.147.0.0 - 211.147.7.255
6 w+ z4 U- d! h( e; Q2 l* e( Pnetname: DYNEGY-COMMUNICATION+ {% p8 l0 `7 T# K5 t |+ ]
descr: DYNEGY-COMMUNICATION- g2 v3 |& y) D5 y( @2 M, q
descr: CO.LTD. G9 ~" D0 s, X- S* [& y7 d
descr: BEIJING. B1 I# B3 O7 C5 C: ^, c7 o
country: CN3 `2 a: e8 c8 R9 R; z/ W
admin-c: PP40-AP
0 h0 e- S5 ~. a: atech-c: SD76-AP6 l+ ~' S/ ]- r7 ~. a1 O& A! x
mnt-by: MAINT-CNNIC-AP, p# r( s# Z+ U) L1 ^' @1 U+ g/ o
changed: [email protected] 200111123 G2 Y1 l& U6 y. u5 Q
status: ALLOCATED PORTABLE; v& q1 X: N( e; v$ C+ h
source: APNIC& o' l8 \5 \' ]
person: Pang Patrick
9 M& ~8 S1 m" ^* C4 s% k6 ynic-hdl: PP40-AP
5 Z p) t: Y! `# X2 Ne-mail: [email protected]7 ]3 S$ b7 ]& E; G# f
address: Fl./8, South Building, Bridge Mansion, No. 53
8 E% ]1 m' c% m2 X1 x6 Xphone: +86-10-63181513
- C5 @& a/ B6 Q2 _/ Vfax-no: +86-10-63181597
( J/ J8 E) `; Y0 ]& Dcountry: CN) a$ R2 n4 d t) Y, n
changed: [email protected] 20030304
$ v$ W* d8 W9 u4 ]$ J% Amnt-by: MAINT-CNNIC-AP( F* d6 j j3 k) w% z2 Z( J
source: APNIC
- a) o1 e: P, {2 P, D* Kperson: ShouLan Du# m% z9 J- |3 U& u4 }! \/ c
address: Fl./8, South Building, Bridge Mansion, No. 53
' q8 |. t2 F: L* Y, ~8 N; h/ q' Ocountry: CN5 u' @. T2 f% R8 C$ ]5 M0 a* u. l
phone: +86-010-83160000/ {3 @7 f7 g) S& p8 |, J
fax-no: +86-010-831555288 Y# \- D, F, [ Q+ n S1 y+ `
e-mail: [email protected]
" l5 n3 H1 d5 l2 r6 Znic-hdl: SD76-AP0 J5 V) h3 _$ m7 t+ E* P
mnt-by: MAINT-CNNIC-AP6 l+ P. S4 i7 F) \- @7 z$ x
changed: [email protected] 20020403$ ~9 I6 V& {" B4 S! k
source: APNIC9 Y8 v6 M5 q. z' Y' `
+ a! T4 r: w# H5、我为什么要写这篇文章?
8 o) N, G' T1 y9 ] , _1 n5 ~# G# e. |/ z
新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;
( q- R! p t/ B0 [2 W( ?9 C6 e3 M1 ]9 V或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。( p2 c" @0 k8 l8 F" }$ K
可是这个 211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。6 a8 j/ s4 T' I7 T6 P4 M# F* A
事实上,你可以敲诈克林斯·潘,强奸克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,
5 S E% I0 U1 f* `: q3 a9 ]但是现在你既然打搅了我的生活,我就不得不说几句了。0 |! e4 S: y* a$ @ S/ B
( G% M. T0 @: S$ \8 S
6、我是谁?
; _- R( F2 a, n
2 w, \5 y7 f0 v, ~7 J, Y1 o如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。
# F/ ?/ J# @( B! z1 A. k#!/usr/bin/perl -w- U# K3 k3 P c# l0 S$ O
use Digest::MD5 qw(md5 md5_hex md5_base64);
$ N/ w7 I, ?6 G' o9 x+ t$name = 'MyName';! n9 P+ ?4 g: \
$count = MyCount;2 J% H; Q$ t6 x8 o
for ($i=0; $i〈$count; $i++); z% }' a" d8 w( Y7 a
{
2 N) g- E5 T$ u6 S' ?; R5 O0 e6 F$name = md5_hex($name);, I. g, P3 U" A2 s
}
# f& M9 ~$ u5 ?+ C- W, Rprint $name;
& K7 g( q0 n" d8 s2 R9 r. [
6 C; H J$ d- n+ ?以下签名,用于以后可能出现的关于此文的交流:
+ {3 H5 Q# t/ M1 p1 6631876c2aea042934a5c4aaeabb88e9
$ v( n) Q4 ]/ n, S* a$ b# O6 k2 a6a607b3bcff63980164d793ff61d170: n4 B. R& N& K: b
3 6a58e8148eb75ce9c592236ef66a3448- o. k# h' M( [5 E0 Y+ J, s
4 ded96d29f7b49d0dd3f9d171873563106 o3 P, Y6 T [5 v5 i+ `
5 cc603145bb5901a0ec8ec815d83eea66 |