简介
在本实验中,你将把 Nmap 从一个简单的端口扫描器转变为一个多功能的审计工具。你将探索 Nmap 脚本引擎 (NSE),这是 Nmap 最强大且灵活的功能之一。
NSE 允许用户编写和共享简单的脚本,以自动化执行各种网络任务。这些脚本与 Nmap 本身一样,能够以高效的速度并行执行。在本实验结束时,你将学会如何在 Linux 系统中定位这些脚本、运行默认的非侵入式脚本,并执行特定脚本来自动提取信息(例如 HTTP 网页标题)。
NSE 的重要性在于它将 Nmap 从一个简单的映射工具变成了一个小型审计平台。一旦发现端口,脚本就可以直接询问更深入的应用程序相关问题,而无需立即切换到其他工具。
定位 NSE 脚本
在这一步中,你将探索 Nmap 存储脚本的位置以及如何搜索特定脚本。
Nmap 脚本引擎 (NSE) 使用 Lua 编程语言编写脚本。当你安装 Nmap 时,它会预装数百个此类脚本,涵盖从基础网络发现到复杂漏洞利用的各个方面。
了解脚本的存储位置非常有用,因为防御者和测试人员都需要了解他们实际上在对目标运行什么样的逻辑。
默认情况下,Nmap 将其所有 NSE 脚本存储在 /usr/share/nmap/scripts/ 目录中。你可以列出该目录的内容以查看可用脚本。
运行以下命令列出目录中的前几个脚本:
ls /usr/share/nmap/scripts/ | head -n 10
你将看到类似以下的输出:
acarsd-info.nse
address-info.nse
afp-brute.nse
afp-ls.nse
afp-path-vuln.nse
afp-serverinfo.nse
afp-showmount.nse
ajp-auth.nse
ajp-brute.nse
ajp-headers.nse
请注意,所有文件都以 .nse 扩展名结尾,这代表 Nmap Scripting Engine。
由于有超过 600 个脚本,搜索与特定服务相关的脚本通常很有帮助。例如,如果你想查找与 HTTP(Web 服务器)相关的脚本,可以使用 grep 命令过滤结果。
运行以下命令查找与 HTTP 相关的脚本:
ls /usr/share/nmap/scripts/ | grep http | head -n 10
这将显示一系列旨在与 Web 服务器交互的脚本,例如用于获取网页标题的 http-title.nse,或用于检查身份验证机制的 http-auth.nse。
运行默认脚本 (-sC)
在这一步中,你将学习如何运行 Nmap 的默认脚本集。
Nmap 根据脚本的用途和侵入性将其分为不同的组。default 类别包含被认为是安全、快速且可靠的脚本。它们在收集有用信息的同时,不会对目标进行激进攻击或导致服务中断。
类别实际上是一种风险和意图分类。它们可以帮助你选择适合当前场景的脚本,而不是盲目运行所有可用脚本。
要运行默认脚本集,可以使用 -sC 标志。这等同于输入 --script=default。
在本实验中,后台已启动了一个轻量级 Web 服务器(端口 8080),并且标准 SSH 服务正在端口 22 上运行。让我们使用默认脚本扫描本地机器 (localhost) 上的这些特定端口。
运行以下命令:
nmap -sC -p 22,8080 localhost
你将看到类似以下的输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 14:56 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
22/tcp open ssh
8080/tcp open http-proxy
|_http-title: LabEx Nmap NSE Target
Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds
仔细观察输出。在端口 8080 下,Nmap 自动运行了 http-title 脚本,并成功提取了网页标题:“LabEx Nmap NSE Target”。Nmap 使用这些默认脚本无缝地收集有关开放端口的更多信息。
这展示了 -sC 标志如何瞬间将 Nmap 从一个简单的端口扫描器升级为信息收集工具。
运行特定类别的脚本
在这一步中,你将学习如何使用 --script 参数执行特定脚本或整个类别的脚本。
虽然默认脚本 (-sC) 非常适合常规侦察,但有时你需要为特定任务运行特定的脚本。你可以通过将脚本名称传递给 --script 参数来实现这一点。
例如,如果你只想获取端口 8080 上运行的 Web 服务器的 HTTP 标题,而不运行任何其他默认脚本,则可以直接指定 http-title 脚本。
运行以下命令:
nmap --script=http-title -p 8080 localhost
输出将非常精简,仅显示端口状态和 http-title 脚本的结果:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 14:56 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000057s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
8080/tcp open http-proxy
|_http-title: LabEx Nmap NSE Target
Nmap done: 1 IP address (1 host up) scanned in 0.28 seconds
除了单个脚本名称外,你还可以指定脚本类别。Nmap 将脚本分为 safe(安全)、intrusive(侵入性)、vuln(漏洞检测)、discovery(发现)和 exploit(利用)等类别。
运行以下命令对端口 8080 执行所有 safe 脚本:
nmap --script=safe -p 8080 localhost
注意: 运行整个类别的脚本可能需要相当长的时间(有时超过 9 分钟!),具体取决于网络环境和该类别中的脚本数量。某些脚本可能还会等待超时。如果你不想等待,可以按
Ctrl+C取消扫描并跳过此步骤。
输出将包含 HTTP 标题,根据具体的 Nmap 版本和环境,还可能包含其他安全检查结果:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 14:56 CST
Pre-scan script results:
| targets-asn:
|_ targets-asn.asn is a mandatory parameter
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000057s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
8080/tcp open http-proxy
|_http-date: Mon, 09 Mar 2026 06:57:04 GMT; 0s from local time.
|_http-fetch: Please enter the complete path of the directory to save data in.
| http-headers:
| Server: SimpleHTTP/0.6 Python/3.10.12
| Date: Mon, 09 Mar 2026 06:57:03 GMT
| Content-type: text/html
| Content-Length: 103
| Last-Modified: Mon, 09 Mar 2026 06:55:32 GMT
|
|_ (Request type: HEAD)
|_http-title: LabEx Nmap NSE Target
Host script results:
| dns-blacklist:
| SPAM
| list.quorum.to - SPAM
| l2.apews.org - FAIL
|_ bl.nszones.com - SPAM
|_fcrdns: FAIL (No PTR record)
| resolveall:
| Host 'localhost' also resolves to:
| Use the 'newtargets' script-arg to add the results as targets
|_ Use the --resolve-all option to scan all resolved addresses without using this script.
| unusual-port:
|_ WARNING: this script depends on Nmap's service/version detection (-sV)
Post-scan script results:
| reverse-index:
|_ 8080/tcp: 127.0.0.1
Nmap done: 1 IP address (1 host up) scanned in 551.51 seconds
使用 --script 参数可以让你对审计过程进行精细控制,从而根据特定的安全测试需求定制扫描。
总结
恭喜!你已成功完成了 Nmap 脚本引擎 (NSE) 基础实验。
在本实验中,你学习了如何:
- 定位 NSE 脚本的默认目录 (
/usr/share/nmap/scripts/) 并使用标准 Linux 命令搜索特定脚本。 - 使用
-sC标志运行一系列默认的安全脚本,以自动收集 SSH 主机密钥和 HTTP 网页标题等信息。 - 使用
--script参数按名称执行单个脚本或运行整个类别的脚本,从而对网络审计任务进行精确控制。
这些基础技能将使你在未来的网络探索和渗透测试工作中,能够将 Nmap 作为强大的自动化安全审计工具加以利用。



