淘特ASP木马扫描器的代码

2018-09-06 10:09

阅读:983

  +-----------------+
|淘特ASP木马扫描器|
+-----------------+
本程序可以扫描服务器上的所有指定类型(asp,cer,asa,cdx)的文件,查出可疑的木马程序。系统采用扫描程序与病毒库分离的形式,
以后升级只需像杀毒软件那样升级病毒库就可以了。目前可以查杀所有流行的ASP木马程序。

系统提供了全站扫描、按文件夹和指定文件扫描三种扫描方式,如果网站文件比较少的话,推荐使用全站扫描,如果文件比较多,推荐
使用按文件夹扫描。扫描过程,系统会记录被扫描过的文件列表,同时对怀疑是木马程序的文件以列表的形式展现,为了便于比较最近有可能
被上传过ASP木马程序,系统特别对当前时间7日内修改、创建的文件以加红显示;系统会对怀疑是木马的文件作出级别判断,并加以颜色区分
;建议对级别为一般的程序作手动检查后,再作处理,对级别为严重的文件,可以点击文件名称下的文件链接,一般打开后木马程序都会
有一个登录提示,这时就点击文件名称下的删除链接,直接将文件从服务器中删除即可。如果担心会误删除,可以先点击下载将文件备份。
使用方法:
将本程序解压后的文件上传至服务器中。执行:的网址/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*LANGUAGE\s*=\s*[]?\s*(vbscriptjscriptjavascript).encode\b
virus_Regx(1,0)=级别:<fontcolor=green>严重!</font><br>脚本被加密了,一般ASP文件是不会加密的。
virus_Regx(0,1)=\bEval\b
virus_Regx(1,1)=级别:<fontcolor=gray>一般!</font><br>eval()函数可以执行任意ASP代码,被一些后门利用。其形式一般是:ev&al(X)<br>但是javascript代码中也可以使用,有可能是误报。
virus_Regx(0,2)=[^.]\bExecute\b
virus_Regx(1,2)=级别:<fontcolor=gray>一般!</font><br>execute()函数可以执行任意ASP代码,被一些后门利用。其形式一般是:ex&ecute(X)。
virus_Regx(0,3)=Server.(ExecuteTransfer)([\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=VBSCRIPTCODEPAGE=936%>
<!--#includefile=virus_lib.asp-->
<%
server.ScriptTimeout=90000
dimact
act=request.QueryString(act)
ConstPASSWORD=totscan
ifact=loginthen
ifrequest.Form(pwd)=PASSWORDthensession(login)=ok
endif
%>
<!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.01Transitional//EN
<html>
<head>
<metahttp-equiv=Content-Typecontent=text/html;charset=gb2312>
<title>Asp木马扫描器</title>
<scriptlanguage=JavaScripttype=text/JavaScript>

functionConfirmDel()
{
if(confirm(确认删除?并且不能恢复!))
returntrue;
else
returnfalse;

}
</script>
</head>

<body>
<divalign=center><h2>Asp木马扫描器</h2></div>
<hr>
<%
IfSession(login)<>okthen
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=scanthen
dimScanFileType,Suspect,ScanFileNum,ScanFolderNum,BeginTime,EndTime,TmpPath,Report
ScanFileType=asp,cer,asa,cdx
Suspect=0
ScanFileNum=0
ScanFolderNum=0
BeginTime=timer
response.Write(<textareaname=textareastyle=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=delthen
CallDelFile(request.QueryString(file))
response.Write(<br><ahref=&request.ServerVariables(HTTP_REFERER)&>返回</a>)
elseifact=downthen
CallDownload(request.QueryString(file))
else
callFileList(pathStr)
callScanForm()
endif
endif

%>
<hr>
</body>
</html>
<%
SubLoginForm
%>
<formname=form1method=postaction=?act=login>
<divalign=center>Password:
<inputname=pwdtype=passwordsize=15>
<inputtype=submitname=Submitvalue=提交>
</div>
</form>
<%
endSub
SubScanForm
%>
<formaction=?act=scanmethod=post>
<inputtype=submitvalue=全站扫描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=?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=0cellpadding=0cellspacing=0class=CContent>
<tr>
<tdclass=CPanelstyle=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=0cellpadding=0cellspacing=1style=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=文件包含执行
EndIf
SetFSOs=CreateObject(Scripting.FileSystemObject)
onerrorresumenext
setofile=fsos.OpenTextFile(FilePath)
filetxt=Lcase(ofile.readall())
IferrThenExitSubendif
iflen(filetxt)>0then
特征码检查
fileUri=<ahref=
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*#include\s*file\s*=\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(Mid(FilePath,1,InStrRev(FilePath,\))&tFile,replace(FilePath,server.MapPath(\)&\,,1,1,1))
SumFiles=SumFiles+1
EndIf
Next
SetMatches=Nothing
SetregEx=Nothing

Checkincludevirtual
SetregEx=NewRegExp
regEx.IgnoreCase=True
regEx.Global=True
regEx.Pattern=<!--\s*#include\s*virtual\s*=\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&.ExecuteTransfer
SetregEx=NewRegExp
regEx.IgnoreCase=True
regEx.Global=True
regEx.Pattern=Server.(Exec&uteTransfer)([\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.AddHeaderContent-Disposition,attachment;filename=&FSO.GetFileName(FilePath)
Response.AddHeaderContent-Length,oStream.Size
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

%>


评论


亲,登录后才可以留言!