淘特ASP木马扫描器的代码
淘特ASP木马扫描器的代码
发布时间:2016-12-29 来源:查字典编辑
摘要:+-----------------+|淘特ASP木马扫描器|+-----------------+本程序可以扫描服务器上的所有指定类型(a...

+-----------------+

|淘特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

%>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新ASP教程学习
热门ASP教程学习
编程开发子分类