本节摘要:SOURCE 3.2:Auxiliary 模块、
db_nmap、服务版本识别;情报质量决定 P_attack。
真正的攻防较量在按下 run 之前就已开始。信息收集的目标是把"盲目的试探者"变成"全知全觉的观察者"。先在隔离 lab 里跑一次最典型的 SMB 版本探测:
use auxiliary/scanner/smb/smb_version set RHOSTS 192.168.56.10 set THREADS 4 run # [*] 192.168.56.10:445 - SMB Detected (versions:1,2,3) # [+] 192.168.56.10:445 - Windows 7 Professional Service Pack 1 # [*] Scanned 1 of 1 hosts (100% complete)
结合 services 查看 445 版本字符串,再 search ms17_010。版本字符串是后续选模块的最重要情报——Windows 7 SP1 直接指向永恒之蓝的 target 选择。
Auxiliary 扫描模块遵循 Msf::Auxiliary 基类规范,通常混入 Msf::Auxiliary::Scanner(并发扫描)与 Msf::Auxiliary::Report(自动落库)。它们直接运行在框架的 Ruby 环境中,能无缝调用底层协议栈与报告 API——即扫即报,情报不会在工具间流转时丢失。
# 常用探测模块清单(隔离环境) use auxiliary/scanner/portscan/tcp # TCP 端口扫描 use auxiliary/scanner/smb/smb_version # SMB 版本识别 use auxiliary/scanner/smb/smb_ms17_010 # 永恒之蓝漏洞探测 use auxiliary/scanner/http/http_version # HTTP 版本 use auxiliary/scanner/ssh/ssh_version # SSH 版本 # 端口扫描示例 use auxiliary/scanner/portscan/tcp set RHOSTS 192.168.56.0/24 set PORTS 22,80,443,445,3389 run -j
Metasploit 不试图取代 Nmap、Nessus,而是做"数据中台"。Nmap 的 XML、Nessus 的 .nessus 文件都能导入数据库,统一为 hosts/services/vulns 对象:
# 方式一:直接在框架内跑 Nmap,结果自动落库 db_nmap -sV -p1-1000 192.168.56.10 # 方式二:导入外部扫描结果 db_import /tmp/nmap-result.xml db_import /tmp/nessus-report.nessus # [+] Imported 15 hosts and 42 services # 查看聚合结果 hosts services -s microsoft-ds vulns
这一过程本质是 ETL(抽取—转换—加载):解析器提取主机、端口、服务、OS 指纹、CVE 编号,映射为标准数据模型。三个表构成核心三元组:服务归属于主机,漏洞依附于服务。
数据库的核心价值是关联分析。框架内部维护模块引用表(CVE/BID/OSVDB → 模块),遍历服务记录做自动匹配:
# 列出存在已知漏洞的服务(-u = vulnerable) services -u # 查看某个 CVE 的完整上下文 vulns -p 445 # 192.168.56.10:445 - CVE-2017-0143 (MS17-010) - EternalBlue SMB
匹配逻辑可以理解为集合运算:目标 OS 在模块要求集合内,且端口、版本同时满足,才算命中。services -u 一键筛出"有已知漏洞的服务",把几万个模块缩小到几个候选。
[*] 192.168.56.10:445 - SMB Detected (versions:1,2,3) [*] 192.168.56.10:445 - Windows 7 Professional Service Pack 1 [+] 192.168.56.10:445 - Host is likely VULNERABLE to MS17-010! [*] 192.168.56.11:22 - SSH-2.0-OpenSSH_7.4 [*] 192.168.56.11:80 - Apache httpd 2.4.6
把这些行映射进数据库后,search 与 vulns 就能给出"这台机器能打什么"的答案。

⚠️ 常见坑:版本识别错一位(SMB signing 环境不同)——至少两种工具交叉验证。Nmap 报的 OS 版本与 banner 不一致时,以实际握手结果为准。
💡 关键直觉:孙子「知彼知己」在 MSF 里 = 数据库里的 services 行。情报质量决定攻击概率,先扫准、再打巧。
services -u、vulns 是把数据变情报的两个关键命令不是所有输出都值得入库,按"能否推动下一步决策"分类:
| 数据 | 用途 | 入库方式 |
|---|---|---|
| 存活主机 | 划定攻击面 | db_nmap 自动 |
| 端口与服务版本 | 模块匹配依据 | db_nmap 自动 |
| OS 指纹 | target 选择 | db_nmap -O 或手动 |
| 漏洞确认 | check 预判 | vulns 记录 |
| 手工情报(笔记) | 备忘上下文 | notes add |
# 手工情报入库示例 notes add -t "192.168.56.10 使用弱口令 admin/123456(扫描发现)" notes # [*] Time: ... Note: 192.168.56.10 使用弱口令 ...
数据库里每一条记录都带着主机关联与时间戳,这不仅是情报,也是日后写报告的证据链。
扫描是有成本的(时间、流量特征、触发告警)。实战策略是快慢结合:
# 快扫:找存活主机与高危端口 db_nmap -sn 192.168.56.0/24 db_nmap -sV --top-ports 100 192.168.56.10 # 慢扫:确认版本与指纹 db_nmap -sC -sV -p- 192.168.56.10 # -sC 默认脚本;-sV 版本探测;-p- 全端口
# 快扫输出样例 Nmap scan report for 192.168.56.10 Host is up (0.00048s latency). PORT STATE SERVICE VERSION 445/tcp open microsoft-ds Windows 7 Professional SP1 3389/tcp open ms-wbt-server Microsoft RDP # 慢扫输出样例 445/tcp open microsoft-ds Samba smbd 4.6.2 OS details: Windows 7 Professional SP1 (Build: 7601)
版本字符串必须与模块的 target 精确对应。比如 banner 写 Samba smbd 4.6.2,说明这台"像 Windows"的主机实际跑 Samba——模块选择逻辑完全不同。
信息收集的同一套命令,蓝队用来做攻击面测绘:定期对自有网段 db_nmap、services -u 筛查已知漏洞、用 search cve: 对比补丁状态。这不是渗透,而是把 MSF 当"漏洞雷达"。理解侦察阶段的数据流动,是写检测规则(如"内网主机频繁 445 探测")的基础。信息的价值在于驱动决策:每次扫描前想清楚"我要回答什么问题",扫描后把答案固化进数据库,才能让整个工作流越打越清晰。
信息收集不是"多扫一点",而是"扫得准、存得下、关联得上"。Auxiliary 提供原生探测力,db_nmap/db_import 拓宽情报来源,hosts/services/vulns 三元组把碎片数据织成攻击面情报网。没有这一步,再精巧的 payload 也只是无的放矢——侦察阶段建立的数据库资产,正是下一阶段 exploit 直接依赖的弹药库。练习建议:在隔离 lab 里对同一网段做两次不同策略的扫描,对比 services 与 vulns 的差异,体会"情报质量决定攻击概率"这条核心原则。