+-----------------+
|淘特ASP木马扫描器|
+-----------------+
本程序可以扫描服务器上的所有指定类型(asp,cer,asa,cdx)的文件,查出可疑的木马程序。系统采用扫描程序与病毒库分离的形式,
以后升级只需像杀毒软件那样升级病毒库就可以了。目前可以查杀所有流行的ASP木马程序。
系统提供了全站扫描、按文件夹和指定文件扫描三种扫描方式,如果网站文件比较少的话,推荐使用"全站扫描",如果文件比较多,推荐
使用按文件夹扫描。扫描过程,系统会记录被扫描过的文件列表,同时对怀疑是木马程序的文件以列表的形式展现,为了便于比较最近有可能
被上传过ASP木马程序,系统特别对当前时间7日内修改、创建的文件以加红显示;系统会对怀疑是木马的文件作出"级别"判断,并加以颜色区分
;建议对级别为"一般"的程序作手动检查后,再作处理,对级别为"严重"的文件,可以点击"文件名称"下的文件链接,一般打开后木马程序都会
有一个登录提示,这时就点击"文件名称"下的"删除"链接,直接将文件从服务器中删除即可。如果担心会误删除,可以先点击"下载"将文件备份。
使用方法:
将本程序解压后的文件上传至服务器中。执行:http://你的网址/scan.asp
+-----------------+
|登录密码:totscan|
+-----------------+
virus_lib.asp
复制代码 代码如下:
<%
dimvirus(1,7),virus_Regx(1,4)
'定义木马组件
virus(0,0)="WScript"
virus(1,0)="级别:<fontcolor=""green"">严重!</font><br>WScript多为木马关键字"
virus(0,1)="Shell"
virus(1,1)="级别:<fontcolor=""green"">严重!</font><br>Shell多为木马关键字"
virus(0,2)="Shell.Application"
virus(1,2)="级别:<fontcolor=""green"">严重!</font><br>asp组件,一般多为木马所用"
'海阳组件
virus(0,3)="clsid:72C24DD5-D70A-438B-8A42-98424B88AFB8"
virus(1,3)="级别:<fontcolor=""green"">严重!</font><br>aspWScript组件,一般多为木马所用"
virus(0,4)="clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B"
virus(1,4)="级别:<fontcolor=""green"">严重!</font><br>aspwscript组件,一般多为木马所用"
virus(0,5)="clsid:093FF999-1EA0-4079-9525-9614C3504B74"
virus(1,5)="级别:<fontcolor=""green"">严重!</font><br>aspnet组件,一般多为木马所用"
virus(0,6)="clsid:F935DC26-1CF0-11D0-ADB9-00C04FD58A0B"
virus(1,6)="级别:<fontcolor=""green"">严重!</font><br>aspnet组件,一般多为木马所用"
virus(0,7)="clsid:0D43FE01-F093-11CF-8940-00A0C9054228"
virus(1,7)="级别:<fontcolor=""green"">严重!</font><br>aspfso组件,一般多为木马所用"
'定义木马关键字
virus_Regx(0,0)="@s*LANGUAGEs*=s*[""]?s*(vbscript|jscript|javascript).encodeb"
virus_Regx(1,0)="级别:<fontcolor=""green"">严重!</font><br>脚本被加密了,一般ASP文件是不会加密的。"
virus_Regx(0,1)="bEvalb"
virus_Regx(1,1)="级别:<fontcolor=""gray"">一般!</font><br>eval()函数可以执行任意ASP代码,被一些后门利用。其形式一般是:ev"&"al(X)<br>但是javascript代码中也可以使用,有可能是误报。"
virus_Regx(0,2)="[^.]bExecuteb"
virus_Regx(1,2)="级别:<fontcolor=""gray"">一般!</font><br>execute()函数可以执行任意ASP代码,被一些后门利用。其形式一般是:ex"&"ecute(X)。"
virus_Regx(0,3)="Server.(Execute|Transfer)([t]*|()[^""])"
virus_Regx(1,3)="级别:<fontcolor=""gray"">一般!</font><br>不能跟踪检查Server.e"&"xecute()函数执行的文件。请管理员自行检查。"
virus_Regx(0,4)="CreateObject[|t]*(.*)$[^adodb.recordset]"
virus_Regx(1,4)="级别:<fontcolor=""gray"">一般!</font><br>Crea"&"teObject函数使用了变形技术,仔细复查"
%>
scan.asp
复制代码 代码如下:
<%@LANGUAGE="VBSCRIPT"CODEPAGE="936"%>
<>
<%
server.ScriptTimeout=90000
dimact
act=request.QueryString("act")
ConstPASSWORD="totscan"
ifact="login"then
ifrequest.Form("pwd")=PASSWORDthensession("login")="ok"
endif
%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<title>Asp木马扫描器</title>
<scriptlanguage="JavaScript"type="text/JavaScript">
functionConfirmDel()
{
if(confirm("确认删除?并且不能恢复!"))
returntrue;
else
returnfalse;
}
</script>
</head>
<body>
<divalign="center"><h2>Asp木马扫描器</h2></div>
<hr>
<%
IfSession("login")<>"ok"then
callLoginForm()
else
dimpathStr
ifrequest("path")<>""then
pathStr=request("path")
else
pathStr=server.MapPath("/")
endif
response.Write("<ahref=""javascript:history.back();"">←返回</a><br>"&Chr(10))
ifact="scan"then
dimScanFileType,Suspect,ScanFileNum,ScanFolderNum,BeginTime,EndTime,TmpPath,Report
ScanFileType="asp,cer,asa,cdx"
Suspect=0
ScanFileNum=0
ScanFolderNum=0
BeginTime=timer
response.Write("<textareaname=""textarea""style=""width:100%""rows=""5"">"&Chr(10))
response.Write("扫描日志:"&vbcrlf)
if(request.QueryString("file")<>"")then
CallScanFile(request.QueryString("file"),"")
else
CallScanFolder(pathStr)
endif
response.Write("</textarea>")
CallShowResult()
EndTime=timer
response.write"<br><fontsize=""2"">执行时间:"&cstr(int(((EndTime-BeginTime)*10000)+0.5)/10)&"毫秒</font>"
elseifact="del"then
CallDelFile(request.QueryString("file"))
response.Write("<br><ahref="""&request.ServerVariables("HTTP_REFERER")&""">返回</a>")
elseifact="down"then
CallDownload(request.QueryString("file"))
else
callFileList(pathStr)
callScanForm()
endif
endif
%>
<hr>
</body>
</html>
<%
SubLoginForm
%>
<formname="form1"method="post"action="?act=login">
<divalign="center">Password:
<inputname="pwd"type="password"size="15">
<inputtype="submit"name="Submit"value="提交">
</div>
</form>
<%
endSub
SubScanForm
%>
<formaction="?act=scan"method="post">
<inputtype="submit"value="全站扫描"style="background:#fff;border:1pxsolid#999;padding:2px2px0px2px;margin:4px;border-width:1px3px1px3px"/>
</form>
<%
endsub
'遍历处理path及其子目录所有文件
SubFileList(Path)
SetFSO=CreateObject("Scripting.FileSystemObject")
ifnotfso.FolderExists(path)thenexitsub
Setfolders=FSO.GetFolder(Path)'目录下所有对象
Setfiles=folders.files
Setsubfolders=folders.SubFolders
'列表文件夹
ForEachflinsubfolders
response.Write("<ahref=""?path="&Path&""&fl.name&"""><imgsrc=""images/folder.gif""border=""0"">"&fl.name&"</a>"&Chr(10))
response.Write("<ahref=""?act=scan&path="&Path&""&fl.name&""">扫描</a><br>"&Chr(10))
Next
'列表文件
ForEachfile_finfiles
response.Write("<imgsrc=""images/file.gif"">"&file_f.name&""&Chr(10))
response.Write("<ahref=""?act=scan&file="&Path&""&file_f.name&""">扫描</a><br>"&Chr(10))
Next
setfolders=nothing
setfiles=nothing
setsubfolders=nothing
SetFSO=Nothing
EndSub
SubShowResult
%>
<tablewidth="100%"border="0"cellpadding="0"cellspacing="0"class="CContent">
<tr>
<tdclass="CPanel"style="padding:5px;line-height:170%;clear:both;font-size:12px">
扫描完毕!一共检查文件夹<fontcolor="#FF0000"><%=ScanFolderNum%></font>个,文件<fontcolor="#FF0000"><%=ScanFileNum%></font>个,发现可疑点<fontcolor="#FF0000"><%=Suspect%></font>个
</td></tr></table>
<tablewidth="100%"border="0"cellpadding="0"cellspacing="1"style="padding:5px;background-color:#666666;line-height:18px;clear:both;font-size:12px">
<tr>
<tdwidth="30%"bgcolor="#FFFFFF">文件名称</td>
<tdwidth="20%"bgcolor="#FFFFFF">特征码</td>
<tdwidth="30%"bgcolor="#FFFFFF">描述</td>
<tdwidth="20%"bgcolor="#FFFFFF">创建/修改时间</td>
</tr>
<p>
<%=Report%>
<br/>
</p>
</table>
<%
endSub
'遍历处理path及其子目录所有文件
SubScanFolder(Path)
dimfolders,files,subfolders
ScanFolderNum=ScanFolderNum+1
SetFSO=CreateObject("Scripting.FileSystemObject")
ifnotfso.FolderExists(path)thenexitsub
Setfolders=FSO.GetFolder(Path)
Setfiles=folders.files
ForEachmyfileinfiles
IfCheckExt(FSO.GetExtensionName(path&""&myfile.name))Then
CallScanFile(Path&""&myfile.name,"")
EndIf
Next
Setsubfolders=folders.SubFolders
ForEachf1insubfolders
ScanFolderpath&""&f1.name
Next
setfolders=nothing
setfiles=nothing
setsubfolders=nothing
SetFSO=Nothing
EndSub
'检测文件
SubScanFile(FilePath,InFile)
dimFSOs,ofile,filetxt,fileUri,vi
ScanFileNum=ScanFileNum+1
response.Write("扫描文件:"&FilePath&vbcrlf)
response.Flush()
IfInFile<>""Then
Infiles="该文件被<ahref=""http://"&Request.Servervariables("server_name")&""&InFile&"""target=_blank>"&InFile&"</a>文件包含执行"
EndIf
SetFSOs=CreateObject("Scripting.FileSystemObject")
onerrorresumenext
setofile=fsos.OpenTextFile(FilePath)
filetxt=Lcase(ofile.readall())
IferrThenExitSubendif
iflen(filetxt)>0then
'特征码检查
fileUri="<ahref=""http://"&Request.Servervariables("server_name")&":"&Request.ServerVariables("SERVER_PORT")&""&replace(FilePath,server.MapPath("")&"","",1,1,1)&"""target=_blank>"&replace(FilePath,server.MapPath("")&"","",1,1,1)&"</a><br>"
fileUri=fileUri&"操作:<ahref=""?act=del&file="&FilePath&"""onClick=""returnConfirmDel()"">删除</a>"
fileUri=fileUri&"<ahref=""?act=down&file="&FilePath&""">下载</a>"
forvi=0toubound(virus,2)
Ifinstr(filetxt,Lcase(virus(0,vi)))then
Report=Report&"<trbgcolor=""#FFFFFF""><td>"&fileUri&"</td><td>"&virus(0,vi)&"</td><td>"&virus(1,vi)&infiles&"</td><td>创建:"&GetDateCreate(filepath)&"<br>修改:"&GetDateModify(filepath)&"</td></tr>"
Suspect=Suspect+1
Endif
next
forvi=0toubound(virus_Regx,2)
SetregEx=NewRegExp
regEx.IgnoreCase=True
regEx.Global=True
regEx.Pattern=virus_Regx(0,vi)
IfregEx.Test(filetxt)Then
Report=Report&"<trbgcolor=""#FFFFFF""><td>"&fileUri&"</td><td>"&virus_Regx(0,vi)&"</td><td>"&virus_Regx(1,vi)&infiles&"</td><td>创建:"&GetDateCreate(filepath)&"<br>修改:"&GetDateModify(filepath)&"</td></tr>"
Suspect=Suspect+1
EndIf
next
'Checkincludefile
SetregEx=NewRegExp
regEx.IgnoreCase=True
regEx.Global=True
regEx.Pattern="<s*#includes*virtuals*=s*"".*"""
SetMatches=regEx.Execute(filetxt)
ForEachMatchinMatches
tFile=Replace(Mid(Match.Value,Instr(Match.Value,"""")+1,Len(Match.Value)-Instr(Match.Value,"""")-1),"/","")
IfNotCheckExt(FSOs.GetExtensionName(tFile))Then
CallScanFile(Server.MapPath("")&""&tFile,replace(FilePath,server.MapPath("")&"","",1,1,1))
EndIf
Next
SetMatches=Nothing
SetregEx=Nothing
'CheckServer&.Execute|Transfer
SetregEx=NewRegExp
regEx.IgnoreCase=True
regEx.Global=True
regEx.Pattern="Server.(Exec"&"ute|Transfer)([t]*|()"".*"""
SetMatches=regEx.Execute(filetxt)
ForEachMatchinMatches
tFile=Replace(Mid(Match.Value,Instr(Match.Value,"""")+1,Len(Match.Value)-Instr(Match.Value,"""")-1),"/","")
IfNotCheckExt(FSOs.GetExtensionName(tFile))Then
CallScanFile(Mid(FilePath,1,InStrRev(FilePath,""))&tFile,replace(FilePath,server.MapPath("")&"","",1,1,1))
EndIf
Next
SetMatches=Nothing
SetregEx=Nothing
endif
setofile=nothing
setfsos=nothing
EndSub
'检查文件后缀,如果与预定的匹配即返回TRUE
FunctionCheckExt(FileExt)
IfScanFileType="*"ThenCheckExt=True
Ext=Split(ScanFileType,",")
Fori=0ToUbound(Ext)
IfLcase(FileExt)=Ext(i)Then
CheckExt=True
ExitFunction
EndIf
Next
EndFunction
'删除文件
SubDelFile(FilePath)
Setfso=Server.CreateObject("Scripting.FileSystemObject")
iffso.FileExists(FilePath)then
fso.DeleteFile(FilePath)
Response.Write("<h2>成功删除文件:</h2>"&FilePath)
else
response.Write("<h2>删除失败!文件:"&FilePath&"没有找到!</2>")
endif
setfso=nothing
endSub
'下载文件
subDownload(FilePath)
dimoStream
SetFSO=Server.CreateObject("Scripting.FileSystemObject")
ifFSO.FileExists(FilePath)then
setoStream=Server.CreateObject("ADODB.Stream")
oStream.Type=1
oStream.Open
onerrorresumenext
oStream.LoadFromFile(FilePath)
ifErr.Number=0then
Response.AddHeader"Content-Disposition","attachment;filename="&FSO.GetFileName(FilePath)
Response.AddHeader"Content-Length",oStream.Size
Response.ContentType="bad/type"'yeucauiehienhopthoaisave-as
Response.BinaryWriteoStream.Read
endif
oStream.Close
setoStream=nothing
endif
setFSO=nothing
endsub
FunctionGetDateModify(filepath)
dims,days
Setfso=CreateObject("Scripting.FileSystemObject")
Setf=fso.GetFile(filepath)
s=f.DateLastModified
setf=nothing
setfso=nothing
days=DateDiff("d",Cdate(s),now())
if(days>-7anddays<7)then
s="<fontcolor=""red"">"&s&"</font>"
endif
GetDateModify=s
EndFunction
FunctionGetDateCreate(filepath)
dims,days
Setfso=CreateObject("Scripting.FileSystemObject")
Setf=fso.GetFile(filepath)
s=f.DateCreated
setf=nothing
setfso=nothing
days=DateDiff("d",Cdate(s),now())
if(days>-7anddays<7)then
s="<fontcolor=""red"">"&s&"</font>"
endif
GetDateCreate=s
EndFunction
%>