网页木马的免杀
一次性进群,长期免费索取教程,没有付费教程。
教程列表见微信公众号底部菜单
进微信群回复公众号:微信群;QQ群:16004488
微信公众号:计算机与网络安全
ID:Computer-network
网页木马分为入侵服务器时所用的脚本木马,以及黑客挂马时所用的网页挂马。本文分别从这两个方面入手,介绍一些简单的网页木马免杀技术。
一、脚本木马免杀
关于脚本木马,从某种角度来说它应该是属于开源的,这也就给我们带来了很大的方便,我们只要懂得脚本语言,就可以去分析这些脚本木马,从而学习别人的编程思路。
正是由于这个“程序”具有完全开放的特性,所以对于黑客们来说它更容易修改,这也就导致了传统杀毒软件对脚本木马的查杀力度不够,因而也就出现了诸如“思易ASP木马追捕”、“雷克图”等的脚本专杀程序。基于此,下面将分为两个方向,介绍针对传统杀毒软件及专杀程序免杀的具体方法,帮助大家提高反病毒水平。
1、针对传统杀毒软件的免杀
对于脚本木马的免杀,其实也是需要有一定的脚本语言基础的。下面将由浅入深地为大家讲解。先带您熟悉一下如何使用工具进行免杀,从思维上过渡一下。
(1)加密免杀
壳就是将PE文件加密且不影响其正常运行的一种保护技术。脚本也有自己的“壳”,但是鉴于脚本的开放性,它的“壳”对于免杀来说效果可能不是很好。
对于ASP脚本的加密,目前比较流行的是使用微软的screnc加密,虽然还有一些别的加密方法,但万变不离其宗。下面就先介绍几款ASP脚本的加密工具。
ASP木马加密免杀工具GUI版
这款其实是微软screnc加密工具的GUI版,因为原版的screnc加密工具是在命令行下使用的,不方便刚入门的初学者学习,所以找了个Windows界面的程序。
下面先用它为海阳顶端木马加密一下。打开“ASP木马加密免杀工具”后单击“选择源木马”按钮,在弹出的对话框中选择要加密的脚本木马,如图1所示。选择完毕后单击“读取”,再单击“加密”按钮就可以加密成功。
图1 为脚本木马加密
加密完成后,我们再来看看加密后的木马变成什么样子了,如图2所示。我想这没人能看得懂,既然连人都看不懂,那么杀毒软件自然也看不懂了。但是有一点需要大家注意,我们加密完成后需要测试一下脚本木马的功能是否完全正常,因为加密后的脚本木马有可能导致变量、参数等不能完全还原。
图2 加密后的脚本木马
ASP木马加解密
“ASP木马加密解密”是一款支持批量加密解密的软件,它的算法与微软screnc加密的算法不同,但是使用起来依然非常方便。我们只要选择ASP木马所在的文件夹,那么在这个文件夹下的所有木马都将被进行加密,所以大家在操作时要记得先备份文件。
将需要加密的ASP木马放入一个单独的文件夹里,然后打开程序,选择相应的文件夹,并选择“编码”选项,最后单击“执行批量转换”就可以完成加密了。
webshell免杀工具
“webshell免杀工具”是一款采用特殊“算法”的加密工具,可以加密asp、jsp、php、cgi、aspx等不同的脚本木马,而且加密完成后文件的大小基本不会变。
打开工具后单击“文件打开/保存”按钮,选择脚本木马,然后就会弹出一个提示对话框,让我们选择输出路径(也就是加密后木马的保存路径),选择完毕后程序就会自动进行加密了。由于加密速度较慢,配置较低的计算机有可能会出现假死状态,因此需要稍等一会儿。大概一分钟的时间加密就会完成了。
为什么这款工具几乎可以加密所有的脚本木马呢?其实只不过是简单的大小写字母替换而已。除此之外,它还会对ASP等脚本的对象及变量进行拆分。
(2)特征码免杀
就目前来讲,只要是针对木马的免杀,就一定少不了与特征码打交道,特别是针对传统杀毒软件的免杀,与特征码打交道更是尤为重要。
我们返回到特征码的问题上来,由于脚本木马里出现的所有字符都在文本文件里,所以第一步要做的就是更改版权,将木马“个人化”,从而达到一定的免杀效果。由于我们使用的ASP脚本木马大多数都是中文版的,因此不懂脚本的朋友可以暂时不用考虑语法与程序逻辑问题,见到中文尽管改就可以。但是怎么改呢?其实很简单,在脚本文件上单击右键,在弹出的菜单里选择“属性”,然后在对话框的“常规”选项里单击“更改”按钮,在弹出的新窗口中选择“记事本”,最后单击“确定”即可,如图3所示。
图3 设置文件的默认打开方式
设置完毕后就会变成类似于文本文档的图标,以后我们只要双击脚本文件就会自动使用文本文档打开了。
针对性免杀
当我们拿到一个脚本木马时需要先将它“切割”,也就是将里面的代码分成几部分,然后分别保存到文本文档里,并将扩展名改为.asp,最后使用杀毒软件查杀。如果哪个文件被杀,就说明它里面含有特征码,那么我们就将这个被杀的文件再次进行分割,然后查杀,如果还有被杀的文件,那么就再次重复这一过程,直到发现里面的特征码为止。
但是如果手工来做这件事的话非常麻烦而且也容易出错,可以借助“webshell特征码定位器”这款小工具来帮我们完成这项工作,它同样是利用文件分割的思想进行查杀的。
打开“webshell特征码定位器”,单击“打开文件”按钮选择木马,加载完毕后就会看到它提示“文件行数:3151”。这个信息告诉了我们两件事,一是我们的脚本木马共有多少行代码,二是它一会儿就要生成3151个样本文件。
可能您认为生成的文件太多了,但是只能如此,这也是该程序有待改进的地方。接下来单击“生成文件”按钮,它就会将样本文件生成在程序目录下的output文件夹里,而不是与木马文件存放在同一目录下,这点也是它与众不同的地方,大家在使用时需要注意。当状态栏提示“已经写文件完毕”时我们就可以进行下一步操作了。
生成完毕后使用杀毒软件查杀,并将报毒的文件删除。查杀完毕后单击“特征码定位”按钮,就会弹出如图4所示的文本文档,里面就是定位好的特征码。大多数情况下更改大小写就可以。
图4 定位出的特征码
宽泛性免杀
对于木马的免杀,除了寻找特征码以外,还可以无目的地替换代码的大小写,以达到免杀的效果。其实它利用的原理就是这种大小写替换的方法,虽然都是大小写的替换,不过这款加密程序利用的却是宽泛性的免杀方法。
究竟什么是宽泛性免杀呢?宽泛性免杀就是指无目的随意替换可能会被定为成特征码的一些文本、代码信息。例如无目的地对脚本文件里的代码大小写进行替换、在对象中插入空变量等,这都属于宽泛性免杀的范畴内。另外需要注意的是,不是经过宽泛性免杀的脚本木马就一定能起到免杀的效果,其实宽泛性免杀要与针对性免杀结合起来使用效果才够好。
那么要怎样进行宽泛性免杀呢?宽泛性免杀的第一步就是选择操作方法,我们可以选择将全部字母替换成大写或只替换一部分字母的大小写,也可以专门替换一些声明的变量或对象。当然我们一般会同时应用这两种方法。关于前一种方法,由于操作简便,只是替换的问题,相信操作起来不难,所以下面主要介绍一下关于变量与对象的替换方法。
要想对其进行替换,自然要知道什么是变量与对象,我们先看看下面一段代码。
这就是著名木马day.asp的部分源代码,注意里面的变量与对象。如果您不懂脚本,可以初步认为凡是关键字dim后面跟着的就是变量(注意前3行代码),而且关键字dim后面可以跟一个变量,也可以跟多个变量。当后面跟多个变量时要使用","隔开,例如dim FSOFIL,Fildata,CountFil这行代码与上面代码的2至4行是等价的。
那么,又是怎样区分对象的呢?我们可以寻找它的关键字Server.CreateObject("xxxx.xxx"),关键字括号中的xxxx.xxx就是要调用的对象。例如上面代码的Server.CreateObject("Scripting.FileSystemObject")所调用的就是Scripting.FileSystemObject这个对象。通过以上的讲解大家应该可以看出,如果我们能记住脚本的关键字,那么就能看懂简单的脚本代码,所以希望刚入门的朋友能学会上面所讲的脚本基础知识,知道这些后我们就可以试着更改这些变量与对象了。
对于变量我们可以随便更改,因为这些变量都是程序员自定义的,例如我们想修改FSOFIL这个变量,可以将它改成HZBOOK或A1Pass,替换完毕后如果不出意外的话都是可以正常运行的。
至于对象就不能随便更改了,因为它引用的是系统组件,与关键字有些相近。那我们就只能对它进行大小写替换了吗?当然不是!除此之外我们还有一种方法,就是可以往对象里插入空变量,例如我们想在ABCD这个组件中插入空变量123,那么插入完毕后就成了""AB"&"1234"&"CD"",也就是说在空变量两边都加上“&”,然后再将其插入到目标变量里,但是当程序运行到这里时,由于1234是空变量,也就是表示什么都没有,所以真正的执行结果还是ABCD。
下面就对Set FSOFIL=Server.CreateObject("Scripting.FileSystemObject")这句代码进行更改,演示一下具体的更改方法。通过上面的介绍可以知道Server.CreateObject("xxxx.xxxx")是关键字,那么里面的Scripting.FileSystemObject自然也就是对象了,因此我们就可以往里面插入诸如A1Pass等未声明的变量,并用连接符“&”或“+”(只适用于字符串)号连接起来,而且这样改过后的意义并不会发生变化。改完后就成了"Set FSOFIL=Server.CreateObject("Scri"&"A1Pass"&"pting.FileSyste"&"A1Pass"&"mObject")",说白了也就是随便插入诸如""&"A1Pass"&""这样的字符。这样杀毒软件就识别不出来了,而且意义未变,也就起到免杀的效果了。
您可能还会想到插入连接符的方法,即直接在对象里插入连接符"&"或"+",这样做同样可以打乱顺序,而且比较省事。但是现在已经有杀毒软件可以识别这种无效的连接符了,并且可以直接将其替换。
(3)其他方法的免杀
以上的两种免杀方法都是比较传统的,对于黑客来说,最好的方法永远都还未出现,所以他们不会走寻常路,会不断地探索。而我们也要学会怀疑,学会探索。下面再为大家介绍一下其他的免杀方法。
数据库合并法
从题目就可以看出来,这个方法是通过将ASP木马与数据库合并到一起来达到免杀的目的的。但是原理是怎样的呢?大家都知道现在的病毒木马不计其数,种类也是多种多样的,就以大家所熟悉的木马来说,就分为脚本木马与可执行文件木马这两种。大家有兴趣的话可以试试,就算将木马的扩展名改掉了依然会被查杀。可能您要问了,改完扩展名连Windows系统都认不出来了,杀毒软件为什么依然认得出来呢?这是因为杀毒软件是靠文件头来确认文件性质的,其实这也不是多复杂的功能,例如CMD就有这个功能,只是没有杀毒软件强大而已。
一般的杀毒软件为了提高扫描速度会给病毒归类,例如扫描到一个脚本,就会使用脚本类病毒库里的特征码进行扫描,扫描到可执行文件时就使用可执行文件病毒库里的特征码进行扫描。看到这儿大家可能就明白了,如果把ASP木马与数据库合并到一起的话,那么杀毒软件就会将这个文件当作数据库文件来扫描,从而调用针对数据库文件的病毒库,因此也就达到了免杀的目的。
明白原理后操作就简单了,有一个叫做“数据库木马合并器”的工具,它可以使免杀操作更加简便,而且可以省去新建数据库的烦恼。“数据库木马合并器”的使用方法很简单,只要选择好木马程序,然后单击“合并”按钮然后选择保存路径就可以了,如图5所示。
图5 将脚本木马与数据库合并
位移、逆位法
位移法的核心操作都是使用escape和unescape函数实现的,其原理类似于壳,在脚本执行前先执行解密代码,待脚本完全解密完成后再执行真正的脚本代码。下面先介绍一下工具的用法。
我们先来看看这两种方法的加密效果,如图6所示。通过此图可以看出,所谓的逆位法就是将脚本木马的代码都倒过来,而位移法则是使字母变成另外一个可显示的符号,汉字并没有变化。所以相对来说还是逆位法的加密效果比较好。
图6 逆位与位移的加密效果对比
在使用工具加密前,需要先筛选代码。方法也很简单,只要选定一个语句块即可,例如sub语句块或if语句块。
把这段代码复制到一个新的文本文档里,单击菜单栏上的“文件”,选择“另存为……”,在新弹出的对话框中选择保存类型为所有类型,最后另存为.asp的格式。
接下来打开一个提供逆位、位移加密功能的软件“加密最终版”,单击“选择”按钮选择刚才保存的文件,然后选择加密方式,最后单击“加密”就可以了。
加密完成后需要再对加密好的文件做一下处理,去掉最前面的“<%”与最后面的“%>”,然后将开始选择的语句块在原文件中删除掉,并以加密后的代码替换之,最后保存,如图7所示。
图7 加密后的效果
2、针对专杀工具的免杀
这里的专杀工具就是指“思易ASP木马追捕”、“雷克图”等通过分析脚本文件所调用参数的可疑程度,来辅助管理员查杀脚本木马的工具,它们大多数自己本身就是一个脚本文件。那么它又是通过什么来查找某个脚本文件所调用的函数的呢?
若脚本想要完成一些涉及其他文件或系统的工作,就一定要调用相应的组件。例如上面的例子代码中的Set FSOFIL=Server.CreateObject("Scripting.FileSystemObject")就是调用系统FSO组件的代码,中间括号里的Scripting.FileSystemObject便是FSO组件的特征,所以专杀工具只要扫描哪些文件里有这些代码就可以判定它调用了什么组件了。
恰好脚本木马就是与系统打交道的,所以如果木马被专杀工具扫到的话,那么后果可想而知,数个脚本木马特征会集合到一个文件上,网络管理员会毫不犹豫地删除掉黑客的木马。
首先是加密免杀,使用软件加密的后果其实是非常严重的,专杀程序会提醒“似乎脚本被加密了”,如图8中第三列所示。有的则会提醒“该程序已被加密,但是一般的脚本是不会加密的”,什么意思?就是说加密后的木马不是一般脚本文件,后果自然不言而喻。
图8 脚本木马被专杀工具发现疑点
其次是特征码免杀,如果我们寻找专杀工具的特征码,无疑就是在一些组件的名称与一些加密特征上找到突破口。如果将组件调用的名称都用空变量法替换的话,这样确实会收到很好的效果。但是还有一个致命的缺点,那就是我们不可能替换所有相关的特征码,有的特征码替换后木马就会运行错误,而且木马功能越强大存在这种错误的可能性就越明显,特别是海阳木马。
最后就剩下“针对传统杀毒软件免杀”里的“其他方法”了。根据实验,数据库合并法在这里毫无用处,几乎不会对专杀工具产生任何障碍,而位移、逆位法还有点可取之处,基本上加密后就剩一两个可疑特性了。其实很多普通文件也有所谓的可疑特性,所以说效果还算可以,但是不完美。
那么要怎样对付专杀呢?目前对付专杀的方法主要有两种,一种是利用Windows的目录漏洞,另一种就是通过调用别的文件来躲过专杀。
关于目录漏洞其实就是Windows与DOS之间的目录结构不兼容造成的一个小Bug,在命令行下执行一个建立目录的命令,例如C:\>md a1pass..\,这样就会建立一个名称为a1pass.的目录,而这个目录对于Windows来说是不存在的,自然,这样一来基于Windows的杀毒软件及专杀工具都找不到我们的木马,被杀也就无从谈起了。但是,建立这个目录却是需要有系统管理员权限的。
另外一个方法就是调用图片,当然这是一个特殊的图片,里面包含了木马代码。在桌面上按快捷键Win+R,在弹出的“运行”栏中输入CMD,打开命令提示符。将一个GIF格式的图片与我们的一句话木马放到C:\下。然后依次执行命令CD\与copy 1.gif/b+1.asp/a 2.gif,从而就将1.gif与1.asp合成为2.gif了。
可能有朋友要问了,必须是GIF格式的图片才可以吗?当然不是了,只要是图片就可以。这个特殊的图片制作好之后,在别的ASP页面上使用<!——include file="xxx/xxx/2.gif"——>这行代码来调用这个特殊的图片就可以了,其中的xxx/xxx/2.gif指的是这个特殊图片在服务器上的位置。但是还有一点需要大家注意,当某些专杀程序扫描到包含此调用代码的文件时,就会提示管理员这个脚本调用了我们的那个图片,如果管理员对那个文件比较熟悉,就会察觉出存在问题。
所以综合来说,针对专杀工具,没有绝对有效的方法,所能做的就是将木马的可疑点尽可能地降至最小,以使管理员忽略。
3、脚本木马免杀巅峰—编写自己的加密算法
脚本木马免杀的最高境界就是有一套自己能熟练运用的加密算法,这并不复杂,但不可否认的是,这确实有一定的难度。
(1)分隔符加密算法
分隔符加密算法是利用ASP脚本中的一个称为Split的函数来实现的,这个函数的功能就是以某个字符为标记将字符串分为数组。例如常见的防注入程序就应用了Split函数。
这段代码就是一个以“|”为分隔符的例子,它将SQLij里的内容以“|”分成了若干个数组。既然它可以将一段字符串分为若干个数组,当然也可以将它重组起来。例如原先有一段字符串为“222333555”,可以将其分为“22|233|35|55”或“2|22333|555”等任何形式。假设将它分为了“22|233|35|55”形式,那么分割完毕后它在内存中就变成了“22”、“233”、“35”、“55”这4组字符串,中间的分隔符"|"此时已经不见了。当我们将包含这4组字符串的数组组合在一起时,它又变成了“222333555”这样一组字符串。
您可能还不明白这有什么用,就以最简单的Server.CreateObject("Scripting.FileSystemObject")来说,用前面讲过的处理的方法—通过插入空变量来使其免杀,但是前面的Server.CreateObject不能使用这种方法,因此这会引起专杀工具的怀疑。但是如果我们使用分隔符加密算法的话,就可以无限制地使用任意不常见的字符将其打乱了。来看下面这个演示程序:
首先变量Msg里包含了一个加密的可执行ASP语句response.write("Hi!this is a Backdoor.ASP.Ace.cm!"),它的作用就是打印"Hi!this is a Backdoor.ASP.Ace.cm!"这个句子,但是我们发现源程序中的句子已经被做了处理,其中被随意插入了许多“@”号,我们就当它是已经加密的木马文件。利用Split函数将变量Msg里加密的ASP语句以“@”号为分隔符分别存入数组data里,由于已加密的ASP语句里有6个“@”,因此它们被当成了7个不同的成员保存在数组data里。接下来就是以一个for循环语句解密,循环条件里的变量i被设为数组的下标,用来代表数组里的不同成员,后面的ubound(data)则返回数组data的成员个数,并且每执行一次,i的值就加1。循环体的内容是将数组data里下标为i的成员里的数据附加给变量temp,假设原来temp里的内容为resp,且下标为1的成员里的内容为onse.writ,那么执行完毕后temp的内容便为response.writ了。由此不难看出,这个循环语句的作用就是将数组里的所有成员所保存的内容都一一“吐”给变量temp。
接下来就是执行变量temp里的语句了。到此,已经成功地将脚本中的干扰符号@给去除了,并且完美地执行了脚本,如图9所示。
图9 脚本解密后并正确执行
但如何将其应用到真正的脚本木马中呢?其实只要在实际应用过程中稍加注意就可以了,首先需要注意的是execute函数不支持HTML语言,也就是说纯粹的HTML语言是不可以使用这种方法加密的。其次就是如果需要加密的木马很大的话,里面肯定会包含许多双引号或单引号,程序有可能对其判断失误,因此在使用此办法加密前先使用其他的办法处理一下也未尝不是明智之举。除此之外,replace函数也可以实现类似的功能,而且原理更简单,执行效率也更高。
(2)ASCII码转换加密法
既然是ASCII码转换加密法,就必然要与ASCII码打交道了,在ASP脚本中有一个asc()函数可以将任意字符转换为ASCII码,当然反过来也可以将任意ASCII码转化为可见字符。下面就利用这个原理来做一个简单的免杀加密器。
首先需要确定的是如何将asc()函数转换为ASCII码,其实只需要执行下面这段vbs脚本代码即可。
这段代码的意思就是将变量Data里的内容全部转换为ASCII码,那么它如何运行呢?可以新建一个文本文档,在里面输入相应代码后,再将其.txt后缀名更改为.vbs即可。当然了,仅凭以上那一小段代码还是运行不起来的。为此编写了一个加密程序,并在关键的地方为大家进行了相应的解释,方便大家的学习和使用,代码如下:
现在只要将以上代码保存为以.vbs结尾的文件就可以运行了。
下面可以轻松地将任何文本文件加密成ASCII码的形式了。那么怎么应用呢?同样只需要一段ASP代码就可以了。
例如有以下加密好的数据:79.610.32.69,如果要想将其解密执行的话,就要将其插入如下代码中:
并将其保存为.asp文件执行。
二、网页挂马的免杀
网页挂马的主体构成就是HTML,除此之外还要涉及JavaScript与VBScript,所以虽说难度不大,但其修改方法还是比较多变的。网页挂马也是木马,当然也存在特征码,网页挂马找特征码的方法与脚本木马是一模一样的,而且其免杀方法也是与脚本木马相通的。下面介绍一下使用相关工具免杀的方法。
1、HTML混淆器
HTML混淆器是一款为HTML进行加密的工具,当然也可以对JavaScript和VBScript进行加密,而且它还有一个优点,就是可以多次加密,所以免杀效果还是不错的。
打开HTML混淆器后单击"……"按钮选择要加密的HTML文件,如图10所示。其中“混淆度”使用默认的10即可,然后单击“生成”按钮就可以完成加密了。如果加密后没有达到免杀的效果,还可以进行第二次加密,直到不被查杀为止。
图10 HTML混淆器
2、蓝星网页加解密专家
这是一款专门为HTML文件进行加密的工具,号称是“转换HTML为不可识别字符的最好方法”,我们就来见识一下这款软件。
打开软件后先单击“操作”按钮,如图11所示。然后单击“添加文件”按钮添加要加密的HTML文件,如果需要批量转换的话,还可以单击“添加路径”按钮。选择好后再单击“开始加密”按钮就行了。
图11 蓝星网页加解密专家
3、网页挂马压缩器
以上两个加密工具在加密完成后都会使网页挂马体积变大,下面再介绍一款网页挂马的压缩工具。
打开“网页木马压缩器”后单击“添加文件”按钮,在弹出的对话框中选择要加密压缩的文件。大家要注意“文件类型”选项,网页文件分为*.html与*.htm两种类型。然后单击“开始压缩”按钮就可以压缩了,压缩完毕后的效果如图12所示。
图12 网页木马压缩器
微信公众号:计算机与网络安全
ID:Computer-network