简介
欢迎来到「使用 NSE 进行漏洞扫描」实验。
Nmap (Network Mapper) 是一款功能强大的开源工具,用于网络发现和安全审计。其最灵活且强大的功能之一是 Nmap 脚本引擎(NSE)。NSE 允许用户编写和共享简单的脚本,以自动化执行各种网络任务。
使用 NSE 进行漏洞扫描非常强大,但这也改变了扫描的性质。你不再仅仅是观察暴露情况,而是在主动探测已知的弱点。因此,范围控制和谨慎的分析变得尤为重要。
在本实验中,你将学习如何将 Nmap 从一个简单的端口扫描器转变为主动漏洞扫描器。你将利用特定的脚本类别(如 vuln)来主动探测目标服务。此过程有助于识别已知的通用漏洞披露(CVE)和危险的服务器配置错误。实验结束时,你将能够更新脚本数据库、运行基于类别的扫描、审计 HTTP 和 SMB 等特定服务,并分析扫描结果。
更新 NSE 脚本数据库
在此步骤中,你将学习如何更新 Nmap 脚本引擎(NSE)数据库。
Nmap 预装了数百个脚本,位于 /usr/share/nmap/scripts/ 目录中。这些脚本按其用途分类,例如 default、discovery、safe、intrusive、vuln 和 exploit。
在运行任何漏洞扫描之前,最佳实践是确保 Nmap 的内部脚本数据库是最新的。该数据库充当索引,使 Nmap 能够快速查找和分类脚本。当系统中添加了新脚本或修改了现有脚本时,必须更新数据库,以便 Nmap 知道如何使用它们。
这反映了一个更广泛的安全原则:检测和评估内容更新迅速。工具的有效性取决于其所依赖的规则、签名或模板的实时性。
要更新 NSE 脚本数据库,你需要使用 --script-updatedb 参数。由于此命令会修改 Nmap 安装目录中的系统文件,因此需要管理员权限。
在终端中运行以下命令:
sudo nmap --script-updatedb
你应该会看到类似以下的输出,表明数据库已成功更新:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 15:25 CST
NSE: Updating rule database.
NSE: Script Database updated successfully.
Nmap done: 0 IP addresses (0 hosts up) scanned in 1.09 seconds
这确认了 Nmap 已成功刷新其可用脚本和类别的索引。现在你可以开始扫描了。
运行漏洞扫描(vuln 类别)
在此步骤中,你将使用 NSE 脚本的 vuln 类别来扫描本地机器上的已知漏洞。
vuln 类别包含专门用于检查已知漏洞并报告它们的脚本。当你指定一个类别而不是单个脚本名称时,Nmap 会自动针对其发现的开放端口运行属于该类别的所有脚本。
这些脚本的发现结果仅作为线索,而非入侵的最终证据。积极的结果通常意味着「该服务看起来与已知问题一致」,仍需要分析师进行审查。
为了获得最准确的结果,强烈建议将 NSE 脚本与版本检测结合使用。版本检测 (-sV) 会尝试确定开放端口上运行的确切软件及其版本。许多漏洞脚本在发送侵入性探测之前,会依赖此版本信息来判断目标是否存在漏洞。
你将使用版本检测和 vuln 脚本类别扫描你的本地机器 (localhost)。
执行以下命令:
nmap -sV --script vuln -p 80,139,445 localhost
扫描可能需要一两分钟才能完成,因为漏洞脚本会执行复杂的检查。你的输出将类似于以下内容:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 15:25 CST
Pre-scan script results:
| broadcast-avahi-dos:
| Discovered hosts:
| 224.0.0.251
| After NULL UDP avahi packet DoS (CVE-2011-1002).
|_ Hosts are all up (not vulnerable).
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0014s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
| http-enum:
|_ /server-status/: Potentially interesting folder
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
| vulners:
| cpe:/a:apache:http_server:2.4.52:
| PACKETSTORM:176334 9.8 https://vulners.com/packetstorm/PACKETSTORM:176334 *EXPLOIT*
| HTTPD:C072933AA965A86DA3E2C9172FFC1569 9.8 https://vulners.com/httpd/HTTPD:C072933AA965A86DA3E2C9172FFC1569
| ... (truncated for brevity)
139/tcp open netbios-ssn Samba smbd 4.6.2
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
| vulners:
| cpe:/a:samba:samba:4.6.2:
| SSV:93139 10.0 https://vulners.com/seebug/SSV:93139 *EXPLOIT*
| SAMBA_IS_KNOWN_PIPENAME 10.0 https://vulners.com/canvas/SAMBA_IS_KNOWN_PIPENAME *EXPLOIT*
| ... (truncated for brevity)
445/tcp open netbios-ssn Samba smbd 4.6.2
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
| vulners:
| cpe:/a:samba:samba:4.6.2:
| SSV:93139 10.0 https://vulners.com/seebug/SSV:93139 *EXPLOIT*
| ... (truncated for brevity)
Host script results:
|_samba-vuln-cve-2012-1182: Could not negotiate a connection:SMB: ERROR: Server returned less data than it was supposed to (one or more fields are missing); aborting [9]
|_smb-vuln-ms10-054: false
|_smb-vuln-ms10-061: Could not negotiate a connection:SMB: ERROR: Server returned less data than it was supposed to (one or more fields are missing); aborting [9]
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 66.86 seconds
在此输出中,Nmap 在 80 端口发现了 Apache Web 服务器,并在 139 和 445 端口发现了 Samba 服务。vuln 类别下的脚本自动针对这些服务运行,检查常见的安全问题,如有趣的 HTTP 目录和已知的 SMB 漏洞。
审计特定服务(例如 SMB/HTTP)
在此步骤中,你将学习如何使用单个 NSE 脚本针对特定服务,而不是运行整个类别。
运行像 vuln 这样的整个类别可能会产生大量噪音且耗时。通常,在安全评估期间,你会识别出特定的服务(如 Web 服务器或文件共享),并希望针对它运行特定的脚本。
例如,http-enum 脚本可以枚举流行 Web 应用程序和服务器使用的目录。这是查找隐藏管理面板或备份文件夹的好方法。为了加快扫描速度,你可以使用 -p 标志告诉 Nmap 仅扫描服务运行的特定端口(例如,HTTP 使用 80 端口)。
运行以下命令来审计本地 Apache Web 服务器:
nmap -p 80 --script http-enum localhost
你将看到仅针对 80 端口的输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 15:27 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000096s latency).
PORT STATE SERVICE
80/tcp open http
| http-enum:
|_ /server-status/: Potentially interesting folder
Nmap done: 1 IP address (1 host up) scanned in 0.62 seconds
同样,你可以针对 Samba (SMB) 服务。SMB 是一种网络文件共享协议,历史上一直是漏洞利用的常见目标。你可以使用 smb-os-discovery 脚本来收集有关操作系统和 SMB 配置的详细信息。SMB 通常运行在 139 和 445 端口。
运行以下命令来审计本地 SMB 服务:
nmap -p 139,445 --script smb-os-discovery localhost
输出将提供有关 SMB 服务的详细信息:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 15:27 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).
PORT STATE SERVICE
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Nmap done: 1 IP address (1 host up) scanned in 0.21 seconds
通过针对特定端口和脚本,你可以显著减少扫描时间,并生成高度聚焦、可操作的结果。
分析 NSE 输出
在最后一步中,你将学习如何将 Nmap 扫描结果保存到文件,并分析输出中的特定关键字。
进行漏洞扫描时,输出内容可能非常庞大。将结果保存到文件至关重要,这样你以后可以查看、与团队共享或使用其他命令行工具进行解析。Nmap 提供了多种输出格式。-oN 标志以正常的、人类可读的文本格式保存输出。
你将针对本地机器运行漏洞扫描,并将结果保存到项目目录中名为 vuln_scan.txt 的文件中。
执行以下命令:
nmap -sV --script vuln -p 80,139,445 localhost -oN ~/project/vuln_scan.txt
等待扫描完成。完成后,结果将安全地存储在 ~/project/vuln_scan.txt 中。
现在,你可以分析该文件。在现实场景中,你可能正在寻找特定的入侵指标或严重漏洞。你可以使用 grep 命令搜索文本文件。例如,你可以搜索单词「VULNERABLE」(使用 -i 标志忽略大小写),以快速发现任何已确认的问题。
运行以下命令搜索输出文件:
grep -i "VULNERABLE" ~/project/vuln_scan.txt
|_ Hosts are all up (not vulnerable).
要验证文件是否已创建并包含扫描数据,你可以使用 head 命令查看文件的前几行:
head -n 10 ~/project/vuln_scan.txt
你应该会看到标准的 Nmap 标题和扫描报告的开头:
## Nmap 7.80 scan initiated Mon Mar 9 15:27:21 2026 as: nmap -sV --script vuln -p 80,139,445 -oN /home/labex/project/vuln_scan.txt localhost
Pre-scan script results:
| broadcast-avahi-dos:
| Discovered hosts:
| 224.0.0.251
| After NULL UDP avahi packet DoS (CVE-2011-1002).
|_ Hosts are all up (not vulnerable).
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000085s latency).
保存和解析输出是任何安全专业人员的基本技能,它使你能够高效地管理大量数据。
总结
恭喜!你已成功完成「使用 NSE 进行漏洞扫描」实验。
在本实验中,你学习了如何将 Nmap 从标准的端口扫描器提升为主动漏洞评估工具。你首先更新了 Nmap 脚本引擎数据库,以确保拥有最新的可用脚本。然后,你利用 vuln 类别自动探测已发现服务中的已知漏洞。此外,你还练习了使用单个脚本针对 HTTP 和 SMB 等特定服务进行重点审计。最后,你学习了如何将扫描结果保存到文件,并使用命令行工具进行解析,以便进行高效分析。
这些技能为网络安全审计和漏洞管理奠定了坚实的基础。



