Sine安全-网络安全背后的巨人,提供服务器安全_服务器维护_网站安全解决方案

BASE64一句话网站木马后门检测与清除



                 网站木马检测,是基于含有恶意代码特征的一项网站安全检测,关于网站木
 
     马后门,分很多种,有PHP网站木马,asp网站大马,JSP网站木马,一句话木马后
 
门,PHP小马,ASP小马,等等的网站木马,关于BASE64一句话后门木马的检测与清
 
除,今天详细的介绍一下。
 
 
先大致讲一下,任何由 {A-Z|a-z|0-9|+|/} 组合的字符串(如果不够4的倍数可以
 
用'='补全),如果长度为4的倍数,则都可以作为base64解码的材料,而在
 
base64decode的时候,会产生原字符串包含字符集以外的字符,举个例子:
 
字符串sine进行base64解码:

 
结果为i��,有一部分为乱码,不过不要紧,因为至少产生了一个多余的、可以被
 
利用的字符i,如果是md5那样的哈希编码,多一位字母,编码后的整个字符串就完
 
全不一样了,但是base64不一样。Sine安全公司是一家专注于:服务器安全、

站安全
、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务

提供商。



 
 
我们再来看一下什么是base64,base64编码是一种基于64个可打印字符来表示二进
 
制数据的表示方法,由于2的6次方等于64,所以每6个比特为一个单元,对应某个
 
可打印字符,三个字节有24个比特,对应于4个Base64单元,即3个字节可表示4个
 
可打印字符,也就是说3个字节进行base64编码之后是4个字节,四个字节解码后为
 
三个字节。
 
 
base64一句话木马后门还有一个特性,就是会自动抛弃不符合要求的字符,如果要
 
进行解密的base64字符串包括有不合法的字符,也就是不在集合 {A-Z|a-z|0-9|
 
+|/} 里,同时也不是末尾的等号的字符。会被自动抛弃。
 

 
三个网站木马的相关背景知识点:
 
编码和解码不是唯一对应,就是说字母a可能通过不同的,其它字符的组合进行
 
base64解码解出来。(组合种类远多于base64的合法字符种类)
 
 
被解码的字符,以四位为一个单位,多个单位组合起来,进行多次解密,得到
 
的结果和组合的顺序相同。Sine安全公司是一家专注于:服务器安全、网站安全、

网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务提供商。

 
 
我们的一句话<?php @eval($_POST[a]);?>,可以通过解密另一个字符串,我们
 
假设为字符串一号获得,而字符串一号可以通过解密字符串二号获得,并且这种序
 
列不是唯一的。我们有可能找到仅仅由acgtACGT这8个字符组合起来的一串字符,
 
这串字符在经过n次解密后的结果为我们的一句话木马。当然,在这个过程中,要
 
保证四位一组,否则会乱序。
 
如下图:
 

 
 
首先输出了base64_chars,这是在之前的 base64_chars = string.letters + 
 
string.digits + "+/" 中定义好的。base64除了‘=’以外可能会用到的字符串。
 
然后tables = enmu_tables(set(chars))将可以使用的8个字符带入了
 
enmu_tables()函数。

 
我们跟进enmu_tables()函数,它将我们可以使用的8个字符带入enmu_table()函数
 
,四位为一组进行组合,然后进行base64解码,生成了一个list,这个list的key
 
值为所有acgtACGT组合能够生成的合法数字(再带两个注定要被遗弃的非法数字)
 
,value值为生成这个合法数字的‘acgtACGT’四位字符组合。
 
 
我们可以把一句话密码中的字符分隔开,挨个去最后一个表(64个key)中寻找由
 
第二次循环生成的57个字符组成的4位字符串。找到之后,再去第二个表中,将目
 
前的这些字符,用第一次循环得到的26位字符串的4位组合替换掉,然后再去第一
 
个表中,找到用最初始的8位字符组成的四位字符串替换.根据base64的特征,我们

可以一点一点去解密一句话木马后门,凡是网站使用了
base64代码的程序文件,基

本上可以判定是网站木马,进一步的木马确认,需要一
层层的解密base64的编码。

关于BASE64一句话网站木马就先讲到这里。
分享: