简介
在这个实验中,你将学习使用 Nmap 进行网络扫描的基础知识。Nmap 是一款功能强大且用途广泛的工具,被网络管理员和安全专家广泛使用。它是一个用于网络发现和安全审计的开源实用程序,能够扫描网络以查找主机和服务、识别操作系统并检测漏洞。
通过实际操作练习,你将了解如何执行不同类型的端口扫描。你还将学习解读扫描结果,并深入了解网络安全评估技术。
在这个实验中,你将学习使用 Nmap 进行网络扫描的基础知识。Nmap 是一款功能强大且用途广泛的工具,被网络管理员和安全专家广泛使用。它是一个用于网络发现和安全审计的开源实用程序,能够扫描网络以查找主机和服务、识别操作系统并检测漏洞。
通过实际操作练习,你将了解如何执行不同类型的端口扫描。你还将学习解读扫描结果,并深入了解网络安全评估技术。
在开始学习端口扫描之前,了解计算机网络中端口的概念至关重要。端口充当通信端点,使计算机上的不同进程能够共享网络资源。你可以将它们想象成数据进出计算机的通道。总共有 65,535 个端口可供使用,它们被分为三个范围:
在这一步中,我们将在实验环境中设置一个本地服务,稍后我们将对这个服务进行扫描。这种实践方法将帮助你理解强大的端口扫描工具 Nmap 是如何检测开放端口以及运行在这些端口上的服务的。
首先,打开一个终端。终端是一个基于文本的界面,你可以在其中输入命令与计算机进行交互。打开终端后,你需要确保自己位于项目目录中。项目目录是存储与本实验相关的所有文件的地方。你可以通过运行以下命令导航到项目目录:
cd /home/labex/project
接下来,我们将在你的机器上创建一个简单的 HTTP 服务器。我们将使用 Python 内置的 HTTP 服务器模块。这个服务器将监听端口 8080。监听某个端口意味着服务器正在该特定端口上等待传入的请求。这个服务器将成为我们 Nmap 扫描的目标。要启动服务器,请执行以下命令:
python3 -m http.server 8080 &
运行此命令后,输出应该类似于:
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
命令末尾的 &
符号很重要,它会使进程在后台运行。这意味着服务器将继续运行,而你可以继续使用终端输入其他命令。
为了验证服务器是否正在运行,我们将检查监听端口。我们可以通过运行以下命令来实现:
ss -tuln | grep 8080
ss
命令用于显示套接字统计信息。-tuln
选项告诉该命令显示 TCP、UDP、监听套接字并显示数字地址。|
符号是管道符,它将 ss
命令的输出传递给 grep
命令。grep
命令会在输出中搜索字符串 8080
。
如果服务器正常运行,输出应该显示端口 8080 正在被使用:
tcp LISTEN 0 1 0.0.0.0:8080 0.0.0.0:*
此输出确认我们的 HTTP 服务器正在按预期运行,并且已准备好由 Nmap 进行扫描。
现在我们的 HTTP 服务器已经启动并运行,我们准备开始使用 Nmap 执行基本的端口扫描。但首先,让我们了解一下什么是端口扫描。端口扫描是网络安全中的一项基本技术,它帮助我们找出主机上哪些端口是开放的。端口就像建筑物中的门,计算机上运行的每个服务都使用特定的端口进行通信。对于网络管理员来说,了解哪些端口是开放的可以确保他们的服务按预期运行。对于安全专家来说,这是识别潜在漏洞的关键步骤,因为开放的端口有时可能会被攻击者利用。
首先,我们需要确保 Nmap 已安装在我们的系统上。Nmap 是一个强大的网络扫描工具,我们将在整个实验中使用它。要检查它是否已安装,我们可以在终端中运行以下命令:
nmap --version
此命令要求系统显示已安装的 Nmap 版本。如果 Nmap 安装正确,你应该会看到类似以下的输出:
Nmap version 7.80 ( https://nmap.org )
现在我们已经确认 Nmap 已安装,让我们执行一次基本扫描,检查本地主机(localhost)上的端口 8080 是否开放。本地主机指的是我们当前正在使用的计算机,其 IP 地址为 127.0.0.1。要执行扫描,请执行以下命令:
nmap -p 8080 localhost
在这个命令中,-p
标志用于指定我们要扫描的端口。这里,我们只对端口 8080 感兴趣。当你运行此命令时,Nmap 将向本地主机的端口 8080 发送特殊的网络数据包,并分析响应以确定该端口是否开放。
你应该会看到类似以下的输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-01 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00020s latency).
PORT STATE SERVICE
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
此输出为我们提供了重要信息。它告诉我们端口 8080 是开放的,并且 Nmap 已将运行在该端口上的服务识别为“http - proxy”。
接下来,我们要将这次扫描的输出保存到一个文件中。保存扫描结果很有用,因为我们以后可以参考它们进行进一步分析。要保存输出,请运行以下命令:
nmap -p 8080 localhost > /home/labex/project/basic_scan.txt
在这个命令中,>
符号用于将 Nmap 扫描的输出重定向到位于 /home/labex/project
目录下名为 basic_scan.txt
的文件中。
为了验证输出是否已正确保存,我们可以使用 cat
命令。cat
命令用于显示文件的内容。运行以下命令:
cat /home/labex/project/basic_scan.txt
你应该会看到与之前相同的输出,现在它已保存在文件中。
让我们仔细查看 Nmap 扫描的输出,了解每一行的含义:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-01 10:00 UTC
:这一行告诉我们 Nmap 扫描何时开始,有助于记录扫描执行的时间。Nmap scan report for localhost (127.0.0.1)
:这一行标识了扫描的目标主机。在这种情况下,是 IP 地址为 127.0.0.1 的本地主机。Host is up (0.00020s latency)
:这一行确认目标主机在线。延迟值表示网络数据包往返主机所需的时间。对于本地主机,由于它就是我们正在使用的同一台计算机,因此预期延迟非常低。PORT STATE SERVICE
:这是端口扫描结果的标题,它告诉我们接下来的行将显示哪些信息。8080/tcp open http-proxy
:这一行表明端口 8080 是开放的。/tcp
部分指定了所使用的网络协议类型(TCP,这是一种用于可靠数据传输的常见协议)。Nmap 已将运行在该端口上的服务识别为“http - proxy”。Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
:这一行总结了扫描情况。它告诉我们 Nmap 扫描了一个 IP 地址(本地主机),发现主机在线,并在 0.05 秒内完成了扫描。既然我们已经成功完成了基本的端口扫描,现在是时候提升技能,探索一些更高级的 Nmap 扫描技术了。Nmap 是一个强大的工具,它提供了众多选项来收集有关网络服务的详细信息。这些信息对于网络管理和安全评估都至关重要。通过使用高级扫描技术,你可以更深入地了解网络中的系统,这有助于识别潜在的安全风险并更有效地管理网络。
Nmap 最有用的功能之一是能够确定开放端口上运行的服务及其版本。了解服务及其版本至关重要,因为这有助于你识别与特定服务版本相关的潜在漏洞。许多软件漏洞都与特定版本相关,因此通过了解端口上运行的确切版本,你可以快速检查是否存在已知的安全问题。
要对端口 8080 执行服务版本检测扫描,你需要执行以下命令:
nmap -sV -p 8080 localhost
在这个命令中,-sV
标志是关键。它告诉 Nmap 探测开放端口以确定服务信息。-p 8080
指定我们要扫描端口 8080,localhost
表示我们正在扫描自己的机器。
此命令的输出应该类似于以下内容:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-01 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00022s latency).
PORT STATE SERVICE VERSION
8080/tcp open http SimpleHTTPServer 0.6 (Python 3.10.12)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.32 seconds
如你所见,Nmap 现在提供了关于端口 8080 上运行的服务的更详细信息。它将该服务识别为 Python SimpleHTTPServer,并显示了其版本以及运行它的 Python 版本。
现在,让我们将这些有价值的信息保存到一个文件中。你可以通过运行以下命令来实现:
nmap -sV -p 8080 localhost > /home/labex/project/advanced_scan.txt
>
符号用于将 nmap
命令的输出重定向到指定的文件。
要查看文件的内容,你可以使用 cat
命令:
cat /home/labex/project/advanced_scan.txt
让我们比较一下基本扫描和高级扫描,以了解为什么高级扫描如此有用。
nmap -p 8080 localhost
):当你运行基本扫描时,它只告诉你端口 8080 是开放的并且正在运行一个服务。根据端口号,Nmap 会猜测该服务可能是“http - proxy”。然而,这只是一个粗略的估计,它不会为你提供有关实际服务的详细信息。nmap -sV -p 8080 localhost
):相比之下,高级扫描提供了更详细的信息。它告诉你确切的服务名称(SimpleHTTPServer)、其版本(0.6),甚至是服务所运行的编程语言及其版本(Python 3.10.12)。这些额外的信息之所以有价值,有以下几个原因:
Nmap 提供了许多其他扫描选项,这些选项可以组合使用以执行不同类型的扫描。以下是一些最常用的选项:
-sS
:这是一种 TCP SYN 扫描,也称为隐身扫描。这是一种快速且隐蔽的端口扫描方式,因为它不会完成完整的 TCP 连接,因此更难被检测到。-O
:此选项启用操作系统检测。它允许 Nmap 尝试确定目标机器上运行的操作系统。-A
:一种激进扫描,结合了多种功能,包括操作系统检测、版本检测、脚本扫描和路由跟踪。它提供了目标系统的全面视图。-T<0 - 5>
:此选项用于设置计时模板。数字越大意味着扫描速度越快,但也可能增加被检测到的几率。-Pn
:此选项将所有主机视为在线,跳过主机发现阶段。当你知道目标在线并且想节省时间时,这个选项很有用。例如,如果你想快速扫描本地机器上的所有知名端口,可以使用以下命令:
nmap -F localhost
-F
(快速)选项告诉 Nmap 扫描比默认扫描更少的端口。当你想快速了解系统上的开放端口时,这个选项很有用。
注意:在实际的网络安全评估中,在扫描任何系统之前获得适当的授权非常重要。在许多司法管辖区,未经授权的扫描可能是违法的。
在这一步,我们将学习如何理解和分析 Nmap 扫描的结果。在网络安全领域,能够解读扫描输出至关重要,它有助于你对网络安全状况做出明智的决策。例如,你可以根据扫描结果识别潜在的漏洞或未经授权的访问点。
让我们再进行几种不同类型的扫描,看看它们的输出有何不同。首先,我们进行一次全面扫描。这种扫描包含了所有常见的选项,能让我们详细了解目标。
nmap -A -p 8080 localhost > /home/labex/project/comprehensive_scan.txt
在这个命令中,-A
标志非常重要,它启用了激进扫描选项。这些选项包括检测目标的操作系统、确定运行服务的版本、扫描可用脚本以及执行路由跟踪。通过使用这个标志,我们可以收集到很多关于目标的有用信息。
现在,让我们看看这次全面扫描的结果。
cat /home/labex/project/comprehensive_scan.txt
输出会非常详细,其中包含了端口 8080 上运行的服务信息、可能针对该服务运行的脚本以及其他相关细节。这些详细信息能帮助我们更好地了解目标的安全状况。
Nmap 会报告端口的几种可能状态,每种状态都能让我们了解到端口的不同情况。
让我们通过扫描一系列端口,看看这些状态在扫描结果中是如何呈现的。
nmap -p 8080-8085 localhost > /home/labex/project/port_states.txt
扫描完成后,我们可以查看结果。
cat /home/labex/project/port_states.txt
你应该会看到端口 8080 被报告为开放,而该范围内的其他端口可能被报告为关闭。这能让我们了解哪些端口正在被积极使用,哪些没有。
现在,让我们从扫描结果中提取关键信息,创建一份总结报告。我们将使用 grep
命令来过滤出开放的端口。开放端口对于安全评估非常重要,因为它们是攻击者潜在的入口。
grep "open" /home/labex/project/comprehensive_scan.txt > /home/labex/project/open_ports.txt
过滤完成后,我们可以查看结果。
cat /home/labex/project/open_ports.txt
这种过滤后的输出让我们更容易关注开放端口。我们无需查看整个详细的扫描报告,就能快速了解哪些端口是开放的,并开始评估它们的安全风险。
理解扫描结果的安全影响至关重要。以下是一些需要牢记的关键点。
在我们的实验环境中,我们有意为 HTTP 服务器开放了端口 8080。但在现实的生产环境中,你需要仔细评估这个服务是否必要,以及它是否得到了妥善的安全保护。
在完成这一步之前,让我们清理一下,停止之前启动的 HTTP 服务器。首先,我们需要找到它的进程 ID。
ps aux | grep "python3 -m http.server"
当你运行这个命令时,找到显示我们 HTTP 服务器进程的那一行。输出的第二列包含进程 ID(PID)。找到 PID 后,你可以用它来停止服务器。
kill <PID>
将 <PID>
替换为上一个命令输出中的实际进程 ID。
或者,你可以使用以下命令一步完成查找并终止进程的操作。
pkill -f "python3 -m http.server"
停止服务器后,我们需要验证它是否不再运行。
ss -tuln | grep 8080
如果没有输出,就意味着服务器已成功停止。
在本次实验中,你学习了使用 Nmap 进行网络扫描的基础知识,Nmap 是网络安全行业中一款强大且广泛使用的工具。首先,你掌握了端口的概念及其在计算机网络中的功能。然后,你搭建了一个本地 HTTP 服务器,用于练习扫描实际的服务。
你进行了各种 Nmap 扫描,从基本的端口扫描到高级的服务版本检测。你学会了解读扫描结果,理解端口状态及其安全影响。你还练习了为安全评估过滤结果。这些技能对于网络管理员和安全专业人员来说至关重要,有助于他们识别开放端口、检测漏洞、做出明智的安全决策以及记录网络配置。通过掌握这些技术,你在网络安全评估和管理方面迈出了重要的一步。在现实场景中扫描系统之前,一定要获得适当的授权,因为未经授权的扫描可能是违法的。