介绍
在本实验中,你将学习使用 Nmap (Network Mapper) 进行网络扫描的基础知识。Nmap 是一款功能强大的开源工具,广泛用于网络发现和安全审计。你将从基础的端口扫描开始,逐步深入到服务与版本检测,并探索 Nmap 脚本引擎 (NSE) 以执行漏洞检查。最后,你将学习如何分析扫描结果,并将其保存为多种格式以生成报告。本实验通过循序渐进的实操,带你掌握 Nmap 的核心功能,从而进行有效的网络安全评估。
执行基础网络扫描
在这一步中,你将通过执行一次基础扫描来熟悉 Nmap。基础扫描用于发现目标机器上哪些端口处于开放状态。开放的端口意味着有服务(如 Web 服务器或 SSH)正在运行并监听连接。
实验环境已预先配置了多个运行在 localhost(你自己的虚拟机)上的服务,供你练习使用。nmap 工具已经安装完毕。
首先,验证 Nmap 是否已安装并检查其版本。打开终端并运行以下命令:
nmap --version
你应该能看到类似以下的输出,确认 Nmap 的版本信息:
Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libssh2-1.8.0 libz-1.2.11 libpcre-8.39 nmap-libpcap-1.9.1
Compiled without:
Available nsock engines: epoll poll select
现在,针对 localhost 执行你的第一次扫描。此命令告诉 Nmap 检查本地机器上最常见的开放端口。
nmap localhost
检查输出结果。Nmap 将列出它发现的开放端口,以及端口的状态和关联的常见服务。输出结果应类似于以下内容,展示了为本实验准备的服务:
Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000092s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
2121/tcp open ccproxy-ftp
2222/tcp open EtherNetIP-1
3001/tcp open nessus
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
这次初步扫描为你提供了运行服务的映射图,这是任何网络安全评估的第一步。
检测服务版本
在这一步中,你将使用 Nmap 执行服务和版本检测。了解哪些端口开放固然有用,但对于安全分析师来说,明确这些端口上运行的具体软件及其版本信息则更为重要。过时的软件是漏洞的主要来源。
我们将使用 -sV 参数,它会指示 Nmap 探测开放端口,以确定详细的服务和版本信息。
针对 localhost 运行版本检测扫描。为了提高扫描效率,我们指定本示例中使用的特定端口,而不是扫描所有端口。
nmap -sV -p 22,8080 localhost
专业提示:针对特定端口扫描可以显著缩短扫描时间。使用
-sV进行全端口范围扫描可能需要几分钟,而这种定向扫描通常只需几秒钟即可完成。
将输出结果与步骤 1 中的基础扫描进行对比。你现在会看到多了一列 VERSION,其中提供了每个端口上运行软件的详细信息。
输出结果会更加详细,类似于:
Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Not shown: 995 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
8080/tcp open http nginx 1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Nmap done: 1 IP address (1 host up) scanned in 2.15 seconds
这些信息至关重要。例如,如果扫描发现了一个已知存在严重漏洞的旧版本 nginx,你就能准确地知道修复工作的重点在哪里。
使用 Nmap 脚本引擎 (NSE)
在这一步中,你将使用 Nmap 脚本引擎 (NSE),这是 Nmap 最强大的功能之一。它允许你利用脚本库自动执行各种网络任务。这些脚本可用于更高级的发现、漏洞检测,甚至漏洞利用。
你将使用 -sC 参数,它会运行一组被认为安全且对发现有用的默认脚本。由于本实验中的 FTP 服务运行在非标准端口 2121 上,因此我们将 -sC 与服务检测 (-sV) 结合使用,以便 Nmap 在选择匹配脚本之前能够识别出该服务。
针对 localhost 运行包含服务检测和默认脚本的 Nmap 扫描。指定端口 2121 和 8080,这样既能保持扫描速度,又能显示 FTP 和 Web 服务的脚本输出。
nmap -sV -sC -p 2121,8080 localhost
查看输出结果。你会看到每个端口下方缩进显示了额外信息,这就是 NSE 脚本的输出。例如,ftp-anon 脚本可以报告端口 2121 上是否允许匿名 FTP 登录,http-title 脚本可能会抓取端口 8080 上网页的标题,而 SSL 脚本则可能报告证书详情。
输出结果会更加详尽:
Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000099s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 995 closed ports
PORT STATE SERVICE VERSION
2121/tcp open ftp vsftpd 3.0.5
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
| STAT:
| FTP server status:
| Logged in as ftp
|_End of status
8080/tcp open http nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
Service Info: OS: Unix
Nmap done: 1 IP address (1 host up) scanned in 0.62 seconds
正如你所见,默认脚本自动发现了端口 2121 允许匿名 FTP 登录,并获取了端口 8080 上网页的标题。这些都是自动收集到的宝贵情报。
执行漏洞扫描
在这一步中,你将使用 NSE 脚本来搜寻漏洞。NSE 包含一类专门用于检查已知安全缺陷的脚本。你可以运行 vuln 类别中的所有脚本来执行全面的漏洞扫描。
最佳实践是始终将长时间或重要扫描的输出保存到文件中。我们将使用 -oN 参数以 Nmap 的标准格式保存输出。
首先,结合你所学的内容。运行一个包含服务检测 (-sV) 并执行所有漏洞脚本 (--script vuln) 的扫描。将输出保存到名为 vuln_scan.txt 的文件中。
nmap -sV --script vuln -oN vuln_scan.txt localhost
由于该扫描会对每个开放端口运行许多脚本,因此可能需要几分钟时间。
扫描完成后,当前目录 (/home/labex/project) 下将创建一个名为 vuln_scan.txt 的文件。你可以使用 cat 命令查看其内容:
cat vuln_scan.txt
输出文件很长,因此搜索关键字会更高效。使用 grep 查找指示漏洞的行。术语 "VULNERABLE" 是一个强有力的指标。
grep "VULNERABLE" vuln_scan.txt
你应该能看到显示已发现漏洞的输出。在此实验环境中,你可能会看到与 Apache byterange 过滤器相关的漏洞:
| VULNERABLE:
| State: VULNERABLE
要查看完整的漏洞详情,你可以搜索特定的 CVE 编号或查看完整的扫描输出。例如,你可能会在端口 8080 上发现一个 Apache DoS 漏洞 (CVE-2011-3192)。请注意,你可能还会看到一些脚本错误(如 clamav-exec: ERROR),这些是正常的,可以忽略——它们发生在某些漏洞脚本无法在实验环境中正常执行时。
这一步演示了如何主动探测弱点,从简单的发现转向有针对性的安全审计。
保存并格式化扫描结果
在这一步中,你将学习如何以多种格式保存结果,并创建用户友好的 HTML 报告。正确记录和报告你的发现是任何安全专业人员的关键技能。Nmap 支持多种适用于不同用途的输出格式。
首先,创建一个专用目录来整理你的报告。
mkdir -p ~/project/reports
现在,再次运行扫描,但这次同时以两种格式保存输出:标准文本 (-oN) 和 XML (-oX)。XML 是一种结构化格式,非常适合与其他工具进行后续处理。
nmap -sV -p 8080 --script vuln -oN ~/project/reports/scan_report.txt -oX ~/project/reports/scan_report.xml localhost
XML 格式对人类阅读不太友好。Nmap 提供了一个名为 xsltproc 的工具,可以将 XML 文件转换为整洁的 HTML 报告。运行以下命令生成 scan_report.html。
xsltproc ~/project/reports/scan_report.xml -o ~/project/reports/scan_report.html
验证你的所有报告文件是否已在 ~/project/reports 目录中创建。使用 ls -l 命令列出文件及其详细信息。
ls -l ~/project/reports
你应该能看到三个报告文件:
total 40
-rw-rw-r-- 1 labex labex 14276 Aug 28 15:12 scan_report.html
-rw-rw-r-- 1 labex labex 5686 Aug 28 15:11 scan_report.txt
-rw-rw-r-- 1 labex labex 14924 Aug 28 15:11 scan_report.xml
现在,你拥有了用于快速查阅的纯文本文件、用于机器处理的 XML 文件,以及用于轻松共享和演示的 HTML 文件。
总结
在本实验中,你获得了网络安全基础工具 Nmap 的实操经验。你从执行基础端口扫描以识别网络主机上的开放服务开始,逐步进阶到更高级的技术,包括服务版本检测 (-sV) 以识别特定软件及其版本。你还通过运行默认脚本 (-sC) 和全面的漏洞扫描 (--script vuln) 探索了 Nmap 脚本引擎 (NSE) 的强大功能。最后,你学习了保存扫描结果的专业做法,即以多种格式 (-oN, -oX) 保存并将其转换为可读的 HTML 报告,以便进行分析和存档。这些技能为你将 Nmap 应用于现实世界的网络安全评估奠定了坚实的基础。



