介绍
在本实验中,你将学习使用 Nmap(网络映射器)进行网络扫描的基础知识。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运行版本检测扫描。为了提高扫描效率,我们将针对在步骤 1 中发现的特定端口(22, 2121, 2222, 3001, 8080),而不是扫描所有端口。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 标志,它会运行一组被认为安全且对发现有用的默认脚本。
对
localhost运行启用了默认脚本的 Nmap 扫描。-sC标志是在不指定单个脚本的情况下获取更多信息的便捷方式。nmap -sC localhost查看输出。你会看到在每个端口下缩进显示的额外信息。这就是 NSE 脚本的输出。例如,
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 22/tcp open ssh 2121/tcp open ccproxy-ftp 2222/tcp open EtherNetIP-1 3001/tcp open nessus | ssl-cert: Subject: commonName=localhost | Subject Alternative Name: DNS:localhost | Not valid before: 2024-07-18T03:37:05 |_Not valid after: 2034-07-16T03:37:05 8080/tcp open http-proxy |_http-open-proxy: Proxy might be redirecting requests |_http-title: Site doesn't have a title (text/html). Nmap done: 1 IP address (1 host up) scanned in 0.62 seconds
如你所见,默认脚本发现 2121 端口允许匿名 FTP 登录,并获取了 8080 端口网页的标题。这些都是自动收集到的宝贵情报。
运行漏洞扫描
现在是寻找漏洞的时候了。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 的字节范围过滤器相关的漏洞:
| VULNERABLE: | State: VULNERABLE要查看完整的漏洞详情,你可以搜索特定的 CVE 编号或查看完整的扫描输出。例如,你可能会在 8080 端口上发现一个 Apache 拒绝服务漏洞(CVE-2011-3192)。请注意,你可能还会看到一些脚本错误(如
clamav-exec: ERROR),这是正常现象,可以忽略——当某些漏洞脚本无法在实验环境中正常执行时,就会发生这种情况。
这一步演示了如何主动探测弱点,从简单的发现转向有针对性的安全审计。
保存并格式化扫描结果
妥善记录和报告你的发现是任何安全专业人员的关键技能。Nmap 支持多种适用于不同用途的输出格式。在最后一步中,你将学习如何以多种格式保存结果并创建用户友好的 HTML 报告。
首先,创建一个专用目录以保持报告井然有序。
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 localhostXML 格式对人类来说不太易读。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 应用于现实世界的网络安全评估打下了坚实的基础。



