使用 Nmap 及其脚本引擎发现网络服务

NmapNmapBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将了解 Nmap 脚本引擎(Nmap Scripting Engine,NSE),它是 Nmap 网络扫描工具的一个强大组成部分。NSE 增强了 Nmap 的功能,使你能够进行高级网络发现、漏洞检测和服务枚举。

这个引擎对于现代网络管理员、安全专家和道德黑客来说至关重要。他们需要了解网络拓扑结构、发现潜在的安全问题,并收集有关网络服务的详细信息。在这个实验中,你将设置一个本地网络服务,并使用 Nmap 对其进行发现和分析。最后,你将掌握使用 Nmap 及其脚本引擎来探索和收集网络服务数据的基础知识。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") subgraph Lab Skills nmap/installation -.-> lab-415931{{"使用 Nmap 及其脚本引擎发现网络服务"}} nmap/save_output -.-> lab-415931{{"使用 Nmap 及其脚本引擎发现网络服务"}} nmap/port_scanning -.-> lab-415931{{"使用 Nmap 及其脚本引擎发现网络服务"}} nmap/target_specification -.-> lab-415931{{"使用 Nmap 及其脚本引擎发现网络服务"}} nmap/service_detection -.-> lab-415931{{"使用 Nmap 及其脚本引擎发现网络服务"}} end

设置用于扫描的本地网络服务

在这一步中,我们将创建一个简单的网络服务。为什么要这样做呢?在现实的网络安全领域中,你经常需要查找和分析网络上运行的服务。通过创建这个简单的服务,我们可以在之后练习使用 Nmap 对其进行扫描,就像在现实场景中一样。

首先,你需要打开一个终端。终端是一个基于文本的界面,你可以在其中输入命令与计算机进行交互。打开终端后,你需要确保自己处于项目目录中。项目目录就像一个文件夹,存储着与该项目相关的所有文件。要导航到项目目录,请在终端中输入以下命令:

cd /home/labex/project

接下来,我们要创建一个简单的 HTML 文件。HTML 代表超文本标记语言(HyperText Markup Language),用于创建网页。这个文件将由我们的服务器托管,就像你在互联网上看到的网页一样。该文件的内容类似于现实世界中的 Web 服务器可能提供给用户的内容。要创建这个文件,请使用以下命令:

echo "<h1>Welcome to the hidden treasure chamber</h1>" > treasure.html

这个命令做了两件事。首先,它创建了一个包含 HTML 标题的字符串。然后,它将该字符串重定向到一个名为 treasure.html 的文件中。要检查文件是否正确创建,你可以使用 cat 命令。cat 命令用于显示文件的内容。在终端中输入以下命令:

cat treasure.html

如果一切顺利,你应该会看到我们刚刚添加的 HTML 内容:

<h1>Welcome to the hidden treasure chamber</h1>

现在,我们要启动一个简单的 HTTP 服务器。HTTP 代表超文本传输协议(HyperText Transfer Protocol),是用于在互联网上传输网页的协议。我们将使用 Python 的内置模块来启动这个服务器。该服务器将监听 8000 端口。端口就像你计算机上的一扇门,网络流量可以通过它进出。服务器将从当前目录(即我们之前导航到的项目目录)提供文件。要启动服务器,请在终端中输入以下命令:

python3 -m http.server 8000

运行此命令后,你应该会看到类似以下的输出:

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

这个输出表明 HTTP 服务器现在正在运行,并在 8000 端口等待连接。请确保保持这个终端窗口打开。如果你关闭它,服务器将停止运行,我们之后就无法使用 Nmap 对其进行扫描了。

使用 Nmap 发现网络服务

既然我们已经成功设置了一个网络服务,现在是时候使用 Nmap 来发现并分析它了。Nmap 是网络映射器(Network Mapper)的缩写,是一款知名且强大的开源工具。它广泛用于网络发现(即找出网络上有哪些设备和服务可用)和安全审计(有助于识别潜在的安全风险)。

首先,打开一个新的终端窗口。请确保保持之前的终端窗口打开,因为它正在运行 HTTP 服务器。打开新终端后,你需要导航到项目目录。这很重要,因为与该项目相关的所有命令都将从这个目录执行。使用以下命令来更改目录:

cd /home/labex/project

让我们从基本的端口扫描开始。端口扫描是一种用于检查设备上哪些端口处于开放状态并运行服务的技术。端口就像网络流量进出设备的门。在这种情况下,我们将扫描本地主机(即我们正在使用的当前机器)上的 8000 端口。运行以下命令:

nmap -p 8000 localhost

这个命令指示 Nmap 专门扫描本地机器上的 8000 端口。运行该命令后,你应该会看到类似以下的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-XX-XX XX:XX XXX
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000016s latency).

PORT     STATE SERVICE
8000/tcp open  http-alt

Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

输出告诉我们 8000 端口是开放的,这意味着有一个服务正在该端口上运行。“http - alt”是 Nmap 识别替代 HTTP 服务的默认方式。

接下来,我们想收集关于这个服务的更多详细信息。我们将在 Nmap 中使用 -sV 标志。这个标志告诉 Nmap 尝试确定正在运行的服务的版本。了解服务版本对于安全目的至关重要,因为它有助于识别该特定版本是否存在已知的漏洞。运行以下命令:

sudo nmap -sV -p 8000 localhost > /home/labex/project/nmap_output_service_version.txt

这个命令对 8000 端口执行版本检测扫描。sudo 用于以管理员权限运行命令,某些 Nmap 操作可能需要此权限。> 符号将命令的输出重定向到一个名为 nmap_output_service_version.txt 的文件中。这样,我们可以保存结果以供后续分析。

要查看结果,请使用以下命令:

cat /home/labex/project/nmap_output_service_version.txt

你应该会看到关于 HTTP 服务的更详细信息,包括可能的软件版本。输出可能如下所示:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-XX-XX XX:XX XXX
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000016s latency).

PORT     STATE SERVICE VERSION
8000/tcp open  http    Python http.server 3.10.X (Python 3.10.X)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

这个输出确认了该服务是一个由 Python 驱动的 HTTP 服务器,这与我们在上一步中设置的内容相匹配。

使用 Nmap 脚本引擎(NSE)

Nmap 脚本引擎(Nmap Scripting Engine,NSE)是一个强大的工具,它允许你使用 Lua 脚本扩展 Nmap 的功能。Lua 是一种轻量级的编程语言,这些脚本可以执行各种各样的任务。例如,它们可以帮助进行高级服务检测,即更精确地识别网络设备上运行的服务。它们还可用于漏洞扫描,这对于发现系统中的安全弱点至关重要。

让我们使用 NSE 来收集关于我们的 HTTP 服务器的更多信息。NSE 脚本被分为不同的类别。这些类别包括“default”(包含常用且安全的脚本)、“discovery”(用于发现网络服务)、“safe”(不会对目标系统造成任何损害)和“vuln”(用于漏洞扫描)。

首先,我们想查看有哪些与 HTTP 相关的脚本可用。为此,我们将使用以下命令:

ls /usr/share/nmap/scripts/http*

这个命令会列出 /usr/share/nmap/scripts/ 目录下所有以 http 开头的 NSE 脚本。当你运行这个命令时,你会看到一系列旨在与 HTTP 服务进行交互的脚本。这些脚本可以执行不同的功能,从简单的信息收集(如获取网页标题)到更复杂的任务(如扫描 HTTP 服务中的漏洞)。

现在,让我们使用 http-title 脚本来提取我们网页的标题。http-title 脚本旨在查看 HTTP 服务并找出它所提供网页的标题。以下是运行此脚本的命令:

sudo nmap --script=http-title -p 8000 localhost > /home/labex/project/nmap_script_output.txt

在这个命令中,sudo 用于以管理员权限运行命令,因为某些 Nmap 操作可能需要这些权限。nmap 是主命令,--script=http-title 告诉 Nmap 使用 http-title 脚本。-p 8000 指定我们的目标是 8000 端口,这是我们的 HTTP 服务器运行的端口。localhost 是目标,这意味着我们正在对自己的机器进行扫描。> 符号将命令的输出重定向到文件 /home/labex/project/nmap_script_output.txt

让我们检查命令的输出。我们可以使用以下命令来完成:

cat /home/labex/project/nmap_script_output.txt

cat 命令用于显示文件的内容。当你运行这个命令时,你应该会看到包含我们网页标题信息的输出。输出可能如下所示:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-XX-XX XX:XX XXX
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000040s latency).

PORT     STATE SERVICE
8000/tcp open  http-alt
|_http-title: Directory listing for /

Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

现在,让我们尝试使用多个脚本进行更全面的扫描。“default”类别包含提供有关目标有用信息的安全脚本。要针对我们 8000 端口上的 HTTP 服务器运行“default”类别中的所有脚本,我们使用以下命令:

sudo nmap --script=default -p 8000 localhost > /home/labex/project/nmap_default_scripts.txt

这个命令与前面的命令类似,但我们不是指定单个脚本,而是告诉 Nmap 运行“default”类别中的所有脚本。

让我们检查这次扫描的结果。我们可以再次使用 cat 命令来完成:

cat /home/labex/project/nmap_default_scripts.txt

输出将包含由各种默认运行的 NSE 脚本收集的关于我们 HTTP 服务器的更详细信息。

最后,让我们探索脚本帮助功能,以了解更多关于特定脚本的信息。如果你想了解更多关于 http-title 脚本的信息,你可以使用以下命令:

nmap --script-help=http-title

这个命令会显示 http-title 脚本的文档。文档包括脚本的用途、如何使用它以及其输出的格式。在使用 NSE 执行特定任务时,理解脚本文档至关重要,因为它可以帮助你了解脚本的功能以及如何正确使用它。

总结

在本次实验中,你学习了如何使用 Nmap 脚本引擎(NSE)进行网络服务发现和分析。你首先搭建了一个本地 HTTP 服务器,然后使用各种 Nmap 命令对该服务进行扫描并收集相关信息。

你掌握了以下技能:搭建用于测试的基本网络服务、使用 Nmap 查找开放端口和正在运行的服务、使用 -sV 标志进行版本检测、利用 NSE 脚本获取详细的服务信息,以及解读 Nmap 扫描结果以了解服务特性。这些技能对于网络管理员、安全专家和道德黑客来说至关重要。随着你在网络安全领域的不断深入,Nmap 及其脚本引擎将在网络发现和安全评估方面发挥重要作用。