Board logo

标题: 【3AST分享】ASP木马免杀总结 [打印本页]

作者: 虚竹    时间: 2009-2-11 12:16     标题: 【3AST分享】ASP木马免杀总结

ASP木马免杀总结
作者:Tommie(C.R.S.T)
已经发表在黑客手册第十期.
前言
  有很多朋友对于字符型的木马免杀感觉到迷茫,又受到免杀班小编的创新“圣旨”,所以写了这篇文章解救水深火热之中的朋友。再加上近来国外国内的杀软都陆续推出自己的“主动防御”,如:江民,瑞星等。搞得人心惶惶,asp马还没在服务器上运行就已经被拦截掉了。还有一个叫什么的“雷客图ASP站长安全助手”的asp木马专杀,杀得连小马也甘拜下风。
杀软篇
一、加密
  这个算是一个比较老的方法了,至今还是比较实用。这里以落叶纷飞老兄增强过的asp(他博客有下载)为例做这次免杀的对象。首先运行AspEnCoder,如图1,



这里就用最简单的“MSSE”方式进行加密,类型选择“.asp”,记事本方式打开asp木马,然后全选代码复制进去,“加密”,如图2所示。



很显然,这种是基于VBScript.Encode方式进行加密的,将其加密代码进行保存用金山毒霸扫描一下看看,如图3,



然后扔到一个网站上是否能够让IIS解释?如图4。



我的评价:这种方法虽然比较古老实用,但有很多时候会损坏其中的源代码,也就是说加密后不能正常运行木马。
二、捆绑
  不一定PE文件才有捆绑技术,其实字符文件也有。首先准备一幅图片,蓝屏大叔一句话木马。然后运行asp图片木马生成器,将asp.asp及jpg.jpg放到该程序所在目录,填上文件名后如图5所示。



“生成图片木马”就会在同目录下生成一个“aspmuma.gif”文件,接着用瑞星进行查杀,如图6。




如果要捆绑其他格式的木马可以用微软的copy.exe,格式:copy.exe /b jpg.jpg+asp.asp asp.gif,如图7。



其中/b是用来表示二进制文件,并且jpg.jpg必须放在“+”前面。然后打开一句话客户端进行连接看看,如图8。



我的评价:这种方法局限性比较大,只允许一句话木马,为什么呢?是因为IIS处理图片木马的时候表面上已经将它解释成图片了,所以用大马捆绑的话所执行的内容是不会显示出来的。
三、文件头欺骗
  上面两种方法比较老了,现在介绍一种新颖点的。在5月的黑客手册里,马骏介绍了bbsxp程序的文件头欺骗上传漏洞,相信大家又入侵了一批bbsxp的网站。那么,文件头可以欺骗服务器继而上传,又能不能欺骗杀毒软件进行asp木马免杀呢?告诉大家,答案是肯定的。
  首先将其他文件格式的文件头,例如:gif、exe、rar、php加入到asp木马中,如图9。



在这里,我加入的是php脚本的文件头,大家可以用记事本打开文件得知其文件格式的文件头,如图10。



其中"MZP"就是exe的文件头。然后用卡巴斯基扫描,如图11。



如果还被杀的话,可以换下文件头,或者多个文件头组合进行欺骗,效果会更好。
  我的评价:只是通过加入其他文件格式的文件头欺骗杀毒软件免杀asp木马,这种方法比较新颖,既不会损坏源代码效果也很好,推荐大家使用。
四、定位
  这里用到的是lake写的文本特征码******************,还是以落叶纷飞asp为例,选好木马后设置“替换字节”,然后“定位”,在程序同一目录下就会生成一个out文件夹,并且生成完毕后弹出窗口,如图12。



先不要急着按“确定”,对其生成文件夹NOD32查杀,回到窗口“确定”就会在同目录下生成一个report.htm的报告文件,将其打开,找到红色字符串地方,这些就是特征字符了,将其复制到L.S.T的ASP木马免杀辅助工具上“随机转”,如图13。



将生成的代码覆盖回去,再查杀,发现已经过了。
  我的评价:定位无疑是对付杀毒软件最有效、最根源的方法之一了,建议大家定位一些老牌asp木马,例如海洋,老兵那些,新的asp木马诸如十三,已经被杀毒软件虎视眈眈了。
专杀篇
一、原理
  雷客图ASP站长安全助手是基于asp脚本的asp木马专杀,最新出到1.6版本了,如果想要过它的话,就得从它的源码进行分析,找到相关判断语句的内容,分析后再有针对性地修改asp木马即可。下面来分析admin_scanshell.asp的代码,获知它是通过什么来判断asp木马的。

<%
server.scripttimeout = 600
dimfileext = "asp,cer,asa,cdx" '扫描指定文件类型
dim report, sun, sumfiles, sumfolders '定义变量
sun = 0
sumfiles = 0
sumfolders = 1
requestpath = request.form("path")
if requestpath = "" or instr(requestpath,"..\") then
  response.write("no hack")
  response.end()
end if
timer1 = timer
if requestpath = "\" then
  tmppath = server.mappath("\")
elseif requestpath = "." then
  tmppath = server.mappath(".")
else
  tmppath = server.mappath("\" & requestpath)
end if
call showallfile(tmppath) '以上代码都是如何获取扫描路径
%>
  这里可以看出,只是扫描asp,cer,asa,cdx的后缀,对于htr和其他扩展名它是管不着的,所以我们上传htr,php,jsp都可以避过这个专杀。有经验的朋友可能又会说:将asp木马改为jpg或其他格式,然后用include函数包含asp木马,不就行了吗,非也非也,我们继续再往下看代码...
<%
sub showallfile(path) '定义SUB子程序
on error resume next '容错语句
if not response.isclientconnected then response.end() '检查浏览器和服务器是否还在链接
set fso = createobject("scripting.filesystemobject") '建立FSO对象
if not fso.folderexists(path) then exit sub 'if判断,如果路径不存在则退出SUB子程序,否则继续往下执行
set f = fso.getfolder(path) '提取path所在路径
set fc2 = f.files '取得这个目录下的文件
for each myfile in fc2 'for循环,获取每个文件
  if err then response.write("权限不足,不能检查目录 <b>"&path&"</b><br>"):exit sub '错误处理,退出SUB子程序
  if checkext(fso.getextensionname(path&"\"&myfile.name)) then '使用checkext函数判断
   call scanfile(path&temp&"\"&myfile.name, "") '对指定文件类型进行扫描
   sumfiles = sumfiles + 1
  end if
next
set fc = f.subfolders '取得二级目录路径
for each f1 in fc 'for循环,获取每个文件
  showallfile path&"\"&f1.name '递归调用
  sumfolders = sumfolders + 1
    next
set fso = nothing
end sub
%>
  这部分我做了相关注释,主要是遍历处理path及其子目录所有文件,并且path是通过request方式获得相对路径。
sub scanfile(filepath, infile)
if infile <> "" then
  infiles = "<font color=red>该文件被<a href=""[url=http://][url=http://]http://"&request.servervariables("server_name")&"/"&turlencode(infile[/url])&"""[/url] target=_blank>"& infile & "</a>文件包含执行</font>"
end if
temp = "<a href=""[url=http://][url=http://]http://"&request.servervariables("server_name")&"/"&turlencode(replace(replace(filepath[/url],server.mappath("\")&"\","",1,1,1),"\","/[/url]"))&""" target=_blank>"&replace(filepath,server.mappath("\")&"\","",1,1,1)&"</a>"
on error resume next
set tstream = server.createobject("adodb.stream")
tstream.type = 1
tstream.mode = 3
tstream.open
tstream.position=0
tstream.loadfromfile filepath
if err then exit sub end if
tstream.type = 2
tstream.charset = "gb2312"
do until tstream.eos
  filetxt = filetxt & lcase(replace(tstream.readtext(102400), chr(0), ""))
loop
tstream.close()
set tstream = nothing
set fsos = createobject("scripting.filesystemobject")
if len(filetxt) >0 then
  '特征码检查
  filetxt = vbcrlf & filetxt
   'check "wscr"&domybest&"ipt.shell"
   if instr( filetxt, lcase("wscr"&domybest&"ipt.shell") ) or instr( filetxt, lcase("clsid:72c24dd5-d70a"&domybest&"-438b-8a42-98424b88afb8") ) then
    report = report&"<tr><td>"&temp&"</td><td>wscr"&domybest&"ipt.shell 或者 clsid:72c24dd5-d70a"&domybest&"-438b-8a42-98424b88afb8</td><td><font color=red>危险组件,一般被asp木马利用</font>"&infiles&"</td><td>"&getdatecreate(filepath)&"<br>"&getdatemodify(filepath)&"</td></tr>"
    sun = sun + 1
   end if '判断asp程序里是否含有“wscript.shell”这个字符串和对应CLSID


毋庸置疑,雷客图ASP站长安全助手是采用特征码对比验证来判断每个asp程序是否为木马,而且还追杀用include函数包含的文件,可以算是一个小型的杀毒软件了。由于代码较为多,我就抽取一部分进行说明,其他的代码大同小异。认真看看上面的代码,其实我们可以“以其人之道治其人之身”,他为了防止误杀自己,特意写成“wscr"&domybest&"ipt.shell”,懂点asp知识的朋友都知道“&”是连接符,解释的时候会变回“wscript.shell”。
  特征码有:wscript.shell组件,shell.application组件,(vbscript|jscript|javascript).encode,eval函数,Execute函数,ExecuteStatement函数,createtextfile函数,opentextfile函数,savetofile函数,save&saveas函数,run函数,exec函数,shellexecute函数,create函数,
  最后多嘴一句,如果想用加密技术改变特征字符是行不通的,因为程序还会检查程序是否被加密,一般asp程序是不会加密的。
二、
实战
  如果是2003服务器则可以建立一个"nohack.asp"这样的文件夹,然后把asp木马改为非asp格式扔进这个目录里,可以避过专杀,而2000服务器可以采用添加应用程序扩展的方法,这两个都很简单,不会的朋友详见百度。我们来修改特征字符,用记事本打开asp木马,“编辑”-“替换”,例如wscript.shell可以改为wscript"&Tommie&".shell,shell.application改为sh"&T&"el"&o&"l."&m&"application,改好后“全部替换”,然后再修改下一处特征。
写在最后
  最后留下自己的博客:www.deadrain.cn。特征比较多,嫌麻烦的朋友可以到我博客下载,有不明白的地方欢迎来nohack论坛或者到我博客留言交流。论坛Id:Tommie。
``此號巳封.. 忘記. 關于過去''




欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com/) Powered by Discuz! 7.2