引言
Metasploit Framework 是一个强大的开源工具,用于针对远程目标机器开发、测试和执行 exploit 代码。任何安全评估的关键部分是信息收集,这包括端口扫描以识别开放端口和运行的服务。
Metasploit 通过 db_nmap 命令集成了流行的 Nmap 扫描器。db_nmap 的主要优势在于它能自动将扫描结果直接保存到 Metasploit 数据库中,让你能够轻松管理和查询收集到的数据。
在本实验中,你将学习如何使用 db_nmap 执行基本的端口扫描,并在 Metasploit 控制台中查看结果。
为扫描结果选择工作区
在本步骤中,你将启动 Metasploit 控制台并创建一个专用工作区。Metasploit 中的工作区通过为每次评估隔离主机、服务和其他收集到的数据,帮助你组织项目。
首先,打开你的终端并通过运行以下命令启动 Metasploit Framework 控制台。加载可能需要一些时间。
msfconsole
一旦出现 msfconsole 提示符 (msf6 >),你就可以创建并切换到一个新的工作区。我们将工作区命名为 portscan_lab。使用 -a 标志来添加一个新工作区。
workspace -a portscan_lab
你应该会看到一条确认消息。
[*] Added workspace: portscan_lab
[*] Workspace: portscan_lab
为了确认你当前处于正确的工作区,你可以不带任何参数运行 workspace 命令。星号 * 表示当前活动的工作区。
workspace
输出将列出所有可用的工作区:
default
* portscan_lab
现在你的工作区已设置完毕,可以开始扫描了。
使用 db_nmap -sS 运行 TCP SYN 扫描
在本步骤中,你将执行一次 TCP SYN 扫描。这种扫描类型,也称为“隐蔽扫描”或“半开放扫描”,是一种流行的选择,因为它速度快且不太可能被目标系统记录。-sS 标志告诉 Nmap 执行 SYN 扫描。
在 msfconsole 提示符下,使用 db_nmap 命令扫描你的本地机器 (localhost)。结果将自动保存到你的 portscan_lab 工作区。
db_nmap -sS localhost
该命令将执行 Nmap 并显示其进度和结果。输出将类似于标准的 Nmap 输出。
[*] Nmap: Starting Nmap 7.94 ( https://nmap.org ) at ...
[*] Nmap: Nmap scan report for localhost (127.0.0.1)
[*] Nmap: Host is up (0.000084s latency).
[*] Nmap: Other addresses for localhost (not scanned): ::1
[*] Nmap: Not shown: 997 closed tcp ports (reset)
[*] Nmap: PORT STATE SERVICE
[*] Nmap: 22/tcp open ssh
[*] Nmap: 5432/tcp open postgresql
[*] Nmap: 6200/tcp open oracle-tns
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
扫描已识别出多个开放端口,这些信息现在已存储在 Metasploit 数据库中。
使用 db_nmap -sV 运行服务版本检测扫描
在本步骤中,你将执行一次更详细的扫描,以识别开放端口上运行的服务具体版本。了解服务版本对于发现潜在漏洞至关重要。-sV 标志在 Nmap 中启用版本检测。
在你的 msfconsole 提示符下运行以下命令。这次扫描将比之前的扫描花费更长的时间,因为 Nmap 需要与每个开放端口进行交互以探测版本信息。
db_nmap -sV localhost
输出将比 SYN 扫描更详细。请注意新的 VERSION 列,其中包含版本检测探测收集到的信息。
[*] Nmap: Starting Nmap 7.94 ( https://nmap.org ) at ...
[*] Nmap: Nmap scan report for localhost (127.0.0.1)
[*] Nmap: Host is up (0.00011s latency).
[*] Nmap: Other addresses for localhost (not scanned): ::1
[*] Nmap: Not shown: 997 closed tcp ports (reset)
[*] Nmap: PORT STATE SERVICE VERSION
[*] Nmap: 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
[*] Nmap: 5432/tcp open postgresql PostgreSQL DB 14.10 (Ubuntu 14.10-0ubuntu0.22.04.1)
[*] Nmap: 6200/tcp open unknown
[*] Nmap: Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 6.78 seconds
这些新信息也会自动添加到数据库中,更新已发现主机及其服务的记录。
使用 hosts 命令列出数据库中已发现的主机
在本步骤中,你将学习如何查询 Metasploit 数据库以查看在扫描过程中发现的主机。hosts 命令提供了当前工作区中存储的所有主机的摘要。
在你的 msfconsole 提示符下运行 hosts 命令:
hosts
输出将是一个列出所有找到的主机的表格。由于你只扫描了 localhost,你将看到一个条目。
Hosts
=====
address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------
127.0.0.1 localhost Linux Linux device
此命令是一种快速查看已识别并存储在你的项目工作区中的所有目标的方法。
使用 services 命令列出已发现的服务
在本步骤中,你将使用 services 命令查看数据库中主机上发现的开放端口和服务的详细信息。此命令在运行版本检测扫描后尤其有用。
在你的 msfconsole 提示符下执行 services 命令:
services
输出将显示一个包含所有找到的服务的详细表格。请注意,它包含了端口、协议、服务名称以及你在步骤 3 中收集到的版本信息。
Services
========
Host Port Proto Name State Info
---- ---- ----- ---- ----- ----
127.0.0.1 22 tcp ssh open OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
127.0.0.1 5432 tcp postgresql open PostgreSQL DB 14.10 (Ubuntu 14.10-0ubuntu0.22.04.1)
127.0.0.1 6200 tcp unknown open
services 命令允许你快速回顾目标系统上所有潜在的入口点,这是规划安全评估下一阶段的基础部分。
总结
在本实验中,你已成功掌握了在 Metasploit Framework 中执行端口扫描的基础知识。
你首先设置了一个专门的工作区来保持项目井然有序。然后,你使用了 db_nmap 命令执行了快速的 TCP SYN 扫描 (-sS) 和更详细的服务版本检测扫描 (-sV)。最后,你学习了如何使用 hosts 和 services 命令查询 Metasploit 数据库,以回顾自动保存的扫描结果。
这个工作流程是渗透测试和安全分析中信息收集阶段的基石。


