Webshell过安全狗的几种技巧[附特征免杀法]

因为之前找一个免杀的大马找了很久,昨天就专门研究了下如何做大马的免杀。要免杀,首先就要了解杀手,我们不妨从装个安全狗看看,从中真就能发现一些简单易行的免杀方法。
扫描设置 主动防御设置
大家注意观察上面两个截图,一个之扫描网马的默认设置,一个是主动防御的默认设置,从中就可以看出两个亮点:
1.手动扫描和主动防御都默认忽略大于1M的文件
2.手动扫描默认扫描所有类型文件,而主动防御默认之扫描脚本后缀文件
从这两点出发,就会有两种简单易行的免杀方式,其实大家肯定都早知道了,不过我还是总结一下,细节不再阐述:
1.使webshell文件大小大于1M——对手动扫描及主动防御都有效 (如果你是*nix用户,可以简单用dd命令产生一个1M文件,然后用cat命令将其与webshell文件连接)
2.将大马保存为jpg后缀文件,利用文件包含执行脚本——只对主动防御有效
这两种方式估计大家都用烂了,当然也是最简单易行的,可我就是爱折腾,下面第三种方式,也就是这篇文章主要要说的,就是特征码定位式免杀。

作为script kiddie我对软件安全一窍不通,不过还是听说过myccl,multiccl之类的工具,受此启发,webshell也应能运用类似原理定位。可是直 接用*ccl定位的话是以字节为单位拆分,而面对脚本文件,我们需要以行为单位。由于不知道*ccl到底是什么工作流程,于是决定从头做起,用一句流行话 来讲,就是“自主研发”。首先我疯狂的打了个草稿,想好了流程(火星人的草稿,大家忽略)
1.jpg
大致讲解下工作流程,巨伪伪代码如下:

  • 循环体开始
  • 分割文件(001为删去第一行,002为删去1至2行……依次类推,直至只剩最后一行)
  • 安全狗扫描
  • 检查剩余文件,若剩余编号n以后的文件,则说明第n-1行中有特征码;若没有任何文件被查杀,退出循环
  • 用0填充已定位出的特征码行
  • 循环体结束

就这样,就可以定位出足够数量的特征码。“足够数量”是指刚好足以免杀,而非所有特征码。经我实验,一个webshell中有n个特征码,而只要有m(m<=n)个以上就会被查杀,而小于m个就不会被查杀。
写完代码后,做了个实验,以啊D目录检测工具(asp)为小白鼠。
22.png
定位出第75和147行,我们来看看
3.png

在这两行中我们只需简单的拆分修改一下字符串,然后就免杀啦:
4.png

 

[via@ettack f4ck team]