用搜索神器Everything定位Webshell木馬后門
Everything是速度最快的文件名搜索軟件。其速度之快令人震驚,百G硬盤幾十萬個文件,可以在幾秒鐘之內完成索引;文件名搜索瞬間呈現結果。它小巧免費,支持中文,支持正則表達式,可以通過HTTP或FTP分享搜索結果。
Everything搜索工具的最大優點是速度。其速度不是快,是極快;用戶不是滿意,而是震驚。
因為Everything的索引無需逐一掃描硬盤文件,而是直接讀取NTFS文件系統的USN日志。所以速度已經快到令人震驚,甚至是憤怒了:憑什么可以這么快!
“善用佳軟”上有Everything的詳細介紹:http://xbeta.info/everything-search-tool.htm
—–分割線—–
小菜最近閑著無事,搭建了一個blog,但因為是第一次,比較緊張,害怕被黑客入侵,所以狂補安全方面的知識,但無奈自身水平不夠,而且在了解了一些安全知識之后認為如果網站被盯上了,被入侵是遲早的是,所以,我只好做被入侵之后的打算了:盡可能的查找被嵌入的webshell……
然后最近也在總結一些軟件的使用經驗,剛好到了Everything這款搜索神器,學著學著就想試試用Everything來輔助webshell的查找,也就有了下面的內容(這里查找的思路是通過文件的修改時間來進行判斷的,因為對于一個相對穩定的網站來說,網頁代碼不會經常性的發生變化,所以可以通過文件的修改時間進行輔助判斷):
1.通過文件的修改日期
- dateaccessed:<date> #搜索在指定日期被訪問的文件或文件夾
- datecreated:<date> #搜索在指定日期被創建的文件或文件夾
- datemodified:<date> #搜索在指定日期被修改的文件或文件夾
- da:<date> #dateaccessed:<date>的簡寫
- dc:<date> #datecreated:<date>的簡寫
- dm:<date> #datemodified:<date>的簡寫
其中的date的語法格式和一些常量如下:
date格式:
year
month/year or year/month depending on locale settings
day/month/year, month/day/year or year/month/day depending on locale settings
一些date的常量:
today
yesterday
tomorrow
<last|past|prev|current|this|coming|next><year|month|week>
<last|past|prev|coming|next><x><years|months|weeks|hours|minutes|mins|seconds|secs>
january|february|march|april|may|june|july|august|september|october|november|december
jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec
sunday|monday|tuesday|wednesday|thursday|friday|saturday
sun|mon|tue|wed|thu|fri|sat
unknown
實際使用舉例如下:
C:\Users\userName\Desktop datecreated:yesterday #查找桌面上昨天修改過的文件or文件夾 C:\Users\userName\Desktop datemodified:today #查找桌面上今天修改過的文件or文件夾 C:\Users\userName\Desktop datemodified:2014/6/15 #查找桌面上在2014/6/15這天修改過的文件or文件夾{2014/6/15這個格式和你本地的設定有關, 你可以打開Everything看"Date Modified"那一列的顯示格式} C:\Users\userName\Desktop datemodified:lastweek #查找桌面上上個星期修改過的文件or文件夾 C:\Users\userName\Desktop datemodified:january #查找桌面上在一月份修改過的文件or文件夾
提示:最好指定一個路徑來進行搜索(例如在進行webshell檢測時,指定網站目錄),否則速度很慢{當然了,這與個人電腦配置有關,在我的瓜機上面很慢就是了}
2.通過文件大小
使用語法介紹:
size:Search for files with the specified size in bytes. Size Syntax: size[kb|mb|gb] Size Constants: empty tiny0 KB < size <= 10 KB small10 KB < size <= 100 KB medium100 KB < size <= 1 MB large1 MB < size <= 16 MB huge16 MB < size <= 128 MB giganticsize > 128 MB unknown
實際舉例如下:
一般的webshell文件也不大{當然了,區分大小馬},所以可以試試查找大于0KB小于10KB的文件(size:tiny)
查找文件大小小于50KB的文件方法(size:<=50kb)
當然也可以通過查找PHP文件,然后再按文件大小排序的方式來進行。
3.簡潔實用的手動方式
C:\Apache\htdocs *.php#顯示了結果之后,再按照文件修改時間/大小/文件名排序,快速而且直接 C:\Apache\htdocs *.php | *.jpg
一般是通過指定搜索路徑的方式來加快速度,可以通過多種方式的結合來達到自己的目的,這個需要根據自己的情況來定,這里就不細說了。
上面提供的只是一種思路,在Windows上也可以通過批處理腳本或PHP/Python腳本編寫功能更強大的webshell查找工具,不過就效率,速度和直觀性而言,Everything這款工具確實還是非常值得推薦的!Everything還有很多的功能值得我們去發現、去挖掘,多組合、多嘗試就可以找到適合自己的方法,祝好運!
編程高手也可以自行編寫腳本調用Everything的命令行來進行周期性的掃描、報告,如果寫好了能給大家分享一下那就更好了(☆_☆)/~~
————————–
在Linux上因為原生集成了很多命令行工具,速度也是非常快,所以也不用其他多余的工具了,寫個shell腳本,然后放在crontab中周期性運行并把結果發送給自己,效果還是很不錯的。
—–下面是從網上搜集的一些使用find/xargs/grep的命令組合查找webshell的方法—–
查找"/path/to/webroot"目錄里面在10天內進行過修改的php文件(可根據需要進行微調):
find /path/to/webroot -name "*.php" -mtime -10
如果文件更新時間不確定,我們可以通過查找關鍵字的方法來確定。要想查的準確需要熟悉webshell常用的關鍵字,我這里列出一些常用的,其他的大家可以從網收集一些webshell,總結自己的關鍵字,括號里面我總結的一些關鍵字(eval,shell_exec,passthru,popen,system)查找方法如下:
find /path/to/webroot -name "*.php" |xargs grep "eval" |less find /path/to/webroot -name "*.php" |xargs grep "shell_exec" |less find /path/to/webroot -name "*.php" |xargs grep "passthru" |less
當然你還可以導出到文件,下載下來慢慢分析:
find /home -name "*.php"|xargs grep "fsockopen"|tee webshell_scan.log
這里我就不一一羅列了,如果有自己總結的關鍵字直接替換就可以。當然并不是所有的找出的文件都是webshell,這個需要自己做一下判斷,判斷的方法也簡單,直接從瀏覽器訪問一下這個文件或者和自己找的一些webshell比較一下,看得多了,基本上一眼就可以判斷是不是webshell文件。
因為Linux上的這個的查找方法在各種網站上都有類似的內容,沒法找到原文出處,如有請告知,謝謝。
最后來點猛料:
在查找webshell的時候,集中注意力是非常必要的,可如果你昨天看了些小電影而導致精力不足無法集中精神排查的話可是非常要命的,所以,你需要:
打開Everything,在搜索框中輸入: *.rm | *.rmvb |*.avi | *.wmv | *.mkv | *.mpeg | *.3gp,按大小排序,選擇非系統視頻文件,深呼吸,閉眼,手不要抖,按住Shift+Del鍵(是的,shift+del,剝奪它們進回收站的權利),睜眼,露出燦爛的笑容,生活原來如此美好~~