使用 Nmap 执行隐蔽网络扫描

NmapBeginner
立即练习

介绍

在本实验中,你将学习如何使用 Nmap 进行隐蔽网络扫描。Nmap 是一款强大的开源工具,用于网络发现和安全审计。隐蔽扫描在网络安全中至关重要,它使安全专业人员能够识别网络漏洞,同时降低被检测到的风险。

你将探索不同的 Nmap 扫描技术,从基本的隐蔽扫描开始,逐步深入到更高级的隐秘方法。这些技能对于进行网络审计的安全专业人员至关重要,因为它们能够在不触发现有安全系统或警示网络潜在威胁的情况下进行操作。通过本实验的学习,你将获得使用 Nmap 进行隐蔽扫描的实践经验,并了解如何在实际安全评估中应用这些技术。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 93%。获得了学习者 98% 的好评率。

设置你的测试环境

本步骤将准备你的环境,用于隐蔽网络审计。我们将设置一个简单的 Web 服务器,作为我们扫描的目标。拥有这样的受控目标至关重要,因为它允许你练习隐蔽扫描技术,而不会影响真实世界的系统。

首先,我们需要打开一个终端。终端就像一个命令行界面,你可以在其中输入命令与你的计算机交互。打开终端后,你需要导航到你的工作区。你的工作区是一个特定的目录,你将保留所有与项目相关的文件。为此,请使用以下命令:

cd /home/labex/project

cd 命令代表“更改目录”。它指示系统将你从当前位置移动到指定的目录,在本例中为 /home/labex/project

现在你已进入你的工作区,我们将创建一个名为 stealth 的新目录。目录就像你电脑上的文件夹一样,创建专用目录有助于你组织工作。使用以下命令创建该目录:

mkdir -p /home/labex/project/stealth

mkdir 命令用于创建新目录。-p 选项确保如果路径中的任何中间目录不存在,它们也会被创建。

创建目录后,你需要导航到该目录中。这样,你创建的所有文件都将存储在 stealth 目录中。再次使用 cd 命令:

cd /home/labex/project/stealth

接下来,我们将创建一个简单的 HTML 文件。HTML(超文本标记语言)是创建网页的标准语言。此文件将由我们的 Web 服务器提供服务,模拟真实世界的 Web 服务。使用以下命令创建该文件:

echo "Robotics server running..." > index.html

echo 命令将文本 "Robotics server running..." 打印到终端。> 符号将该输出重定向并写入名为 index.html 的新文件中。

现在,我们需要设置一个 DNS 解析器。DNS(域名系统)就像互联网的电话簿。它将域名(例如 google.com)转换为 IP 地址。通过设置 DNS 解析器,我们确保我们的系统能够正确连接到其他网络。使用以下命令:

sudo sh -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'

sudo 命令授予你管理员权限来执行需要特殊权限的操作。sh -c 用于运行 shell 命令。我们将行 "nameserver 8.8.8.8" 写入 /etc/resolv.conf 文件,该文件是系统存储 DNS 配置的位置。

最后,我们将使用 nc(netcat)命令启动一个简单的 Web 服务器。Netcat 是一款功能强大的网络实用程序,可用于各种任务,包括设置简单的服务器。此服务器将在端口 8080 上监听并提供我们之前创建的 HTML 文件。使用以下命令:

nc -lvp 8080 < index.html &

让我们分解这个命令:

  • nc 是用于网络连接的 netcat 实用程序。它允许你创建不同网络端点之间的连接。
  • -l 指示 netcat 监听传入连接。它不会尝试连接到另一个服务器,而是等待其他服务器连接到它。
  • -v 启用详细输出。这意味着 netcat 将提供有关其正在执行操作的更详细的信息。
  • -p 8080 指定要监听的端口。端口就像计算机上的门,在本例中,我们为传入连接打开端口 8080。
  • < index.htmlindex.html 的内容提供给任何连接。当客户端连接到我们的服务器时,它将收到 index.html 文件的内容。
  • & 在后台运行该进程。这样,你就可以继续使用终端运行其他命令,同时服务器正在运行。

运行命令后,你应该会看到指示服务器正在监听端口 8080 的输出:

Listening on 0.0.0.0 8080

你现在已在端口 8080 上运行了一个 Web 服务器,它将作为你隐蔽扫描练习的目标。

使用 Nmap 执行基本隐蔽扫描

本步骤将学习如何使用 Nmap 执行基本隐蔽扫描。但首先,让我们了解什么是隐蔽扫描。隐蔽扫描,也称为 SYN 扫描,是网络安全领域非常有用的技术。当你尝试找出目标系统上哪些端口是开放的时,隐蔽扫描可以帮助你做到这一点,同时降低被目标检测到的可能性。这一点很重要,因为如果目标系统检测到你的扫描,它可能会采取防御措施或记录你的活动。

现在,在开始扫描之前,我们需要确保我们位于正确的位置。我们将导航回我们的主要工作区。这就像回到你的基地,所有与项目相关的文件都存储在那里。为此,我们将使用以下命令:

cd /home/labex/project

理解隐蔽扫描

为了完全理解隐蔽扫描的工作原理,我们首先需要了解传统的 TCP 连接。传统的 TCP 连接遵循三次握手过程。这是客户端和服务器建立连接所经历的一系列步骤。

  1. 客户端向服务器发送 SYN(同步)数据包。这就像客户端说“嘿,我想开始对话”。
  2. 如果服务器准备好进行对话,它将响应 SYN-ACK(同步 - 确认)数据包。这就像服务器说“当然,我准备好了”。
  3. 最后,客户端发送 ACK(确认)数据包以完成连接。这就像客户端说“太好了,让我们开始对话”。

然而,隐蔽扫描并不遵循整个过程。相反:

  1. 客户端向服务器发送 SYN 数据包,就像在正常连接中一样。
  2. 如果服务器上的端口是开放的,服务器将响应 SYN-ACK 数据包。
  3. 但这里有所不同。客户端没有发送 ACK 数据包来完成连接,而是发送 RST(重置)数据包。这阻止了连接的完全建立。

之所以这样做有用,是因为目标系统不太可能记录这种交互,因为连接从未完全建立。因此,这是一种偷偷摸摸地找出哪些端口是开放的,而不会留下太多痕迹的方法。

执行隐蔽扫描

现在我们了解了隐蔽扫描的工作原理,让我们对我们的本地 Web 服务器执行一次隐蔽扫描。我们将使用以下 Nmap 命令:

sudo nmap -sS -p 8080 localhost > /home/labex/project/stealth_scan.txt

让我们分解这个命令,以便你知道每个部分的作用:

  • sudo 的使用是因为隐蔽扫描需要原始套接字访问。原始套接字访问是与网络进行低级交互的方式,它需要特殊权限。因此,我们使用 sudo 以管理员权限运行命令。
  • nmap 是我们使用的扫描工具。它是一个非常流行且功能强大的网络探索和安全审计工具。
  • -sS 指定我们要执行 SYN 隐蔽扫描。这告诉 Nmap 使用我们刚刚了解的隐蔽扫描技术。
  • -p 8080 告诉 Nmap 只扫描端口 8080。有时,你可能想要扫描多个端口,但在这种情况下,我们只对端口 8080 感兴趣。
  • localhost 是我们扫描的目标。由于我们在本地机器上运行此操作,localhost 指的是我们自己的计算机。
  • > /home/labex/project/stealth_scan.txt 将扫描结果重定向到文本文件。这样,我们就可以保存结果并在以后查看。

运行扫描后,我们希望查看结果。为此,我们将使用以下命令:

cat /home/labex/project/stealth_scan.txt

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-25 12:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

请注意,Nmap 正确地识别出端口 8080 是开放的。这意味着我们的隐蔽扫描成功地检测到了我们在步骤 1 中设置的 Web 服务器。

理解端口状态

在分析扫描结果时,你会注意到 Nmap 报告的端口处于不同的状态:

  1. open - 服务正在此端口上积极接受连接
  2. closed - 端口可访问,但没有服务在监听
  3. filtered - 防火墙或网络障碍正在阻止端口
  4. unfiltered - 端口可访问,但 Nmap 无法确定它是否打开或关闭
  5. open|filtered - Nmap 无法确定端口是打开的还是被过滤的

在我们的扫描中,端口 8080 报告为 open,这表明我们的 Web 服务器正在积极接受连接。

使用隐蔽扫描的优势在于,它提供了准确的结果,同时比完整的 TCP 连接扫描更不具有侵入性。完整的 TCP 连接扫描会经历整个三次握手过程,这更有可能被目标系统注意到并触发受监控系统的警报。

高级隐蔽扫描技术

本步骤将探索更高级的扫描技术,提供更高级别的隐蔽性。这些技术在网络安全中至关重要,因为它们允许你收集有关目标网络的信息,而不会轻易被检测到。其中一种强大的技术是空闲扫描,也称为僵尸扫描。此方法允许你扫描目标,同时在另一个主机后面掩盖你的身份。

在开始之前,确保你已进入你的工作区。这是执行所有与项目相关的文件和命令的地方。要导航到你的工作区,请在终端中运行以下命令:

cd /home/labex/project

理解空闲扫描

空闲扫描是 Nmap 中最隐蔽的扫描技术之一。但它是如何工作的呢?它使用第三方主机,我们称之为“僵尸”,来执行扫描。这使得扫描看起来像是来自僵尸主机,而不是你。

让我们逐步分解空闲扫描的过程:

  1. 首先,扫描器向僵尸主机发送探测包。此探测包帮助扫描器确定僵尸的当前 IP ID 序列。IP ID 序列是主机分配给它发送的每个 IP 数据包的唯一编号。
  2. 接下来,扫描器向目标发送 SYN 数据包。但是,它将此数据包的源 IP 地址设置为僵尸的 IP 地址。SYN 数据包用于启动 TCP 连接。
  3. 如果目标上的端口是开放的,目标将响应 SYN-ACK 数据包。此数据包发送到僵尸,因为这是它在 SYN 数据包中看到的源 IP 地址。
  4. 僵尸(未预料到此 SYN-ACK 数据包)将向目标发送 RST 数据包。RST 数据包用于重置 TCP 连接。
  5. 然后,扫描器再次探测僵尸。它检查僵尸的 IP ID 序列是否已增加。
  6. 如果 IP ID 序列已递增,则表明目标上的端口是开放的。这是因为僵尸响应目标的 SYN-ACK 发送了 RST 数据包。

此技术的精妙之处在于其隐蔽性。目标只看到来自僵尸的通信,而不是来自实际扫描器。因此,目标很难检测到它正在被扫描。

执行空闲扫描

现在,让我们使用 Nmap 执行空闲扫描。在真实世界中,你将使用外部僵尸主机。但是,在本实验中,我们将使用你的本地机器模拟此过程。

在你的终端中运行以下命令:

sudo nmap -sI 127.0.0.1 localhost -p 8080 > /home/labex/project/idle_scan.txt

让我们理解此命令的每个部分:

  • sudo 的使用是因为 Nmap 需要原始套接字访问才能执行空闲扫描。原始套接字访问允许 Nmap 创建和发送自定义 IP 数据包,这对于此类扫描是必要的。
  • nmap 是我们在此任务中使用的众所周知的扫描工具。
  • -sI 127.0.0.1 指定我们正在执行空闲扫描,并将 127.0.0.1(即 localhost)用作僵尸主机。
  • localhost 是我们想要扫描的目标。
  • -p 8080 告诉 Nmap 只扫描目标上的端口 8080。
  • > /home/labex/project/idle_scan.txt 将扫描结果重定向到文本文件。这样,我们就可以轻松地在以后查看结果。

运行扫描后,让我们检查结果。使用以下命令查看输出文件的內容:

cat /home/labex/project/idle_scan.txt

你可能会看到类似于此的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-25 12:10 UTC
Idle scan using zombie 127.0.0.1 (127.0.0.1:80); Class: Incremental
Skipping Idle Scan against localhost (127.0.0.1) -- you can't idle scan your own machine (localhost).
Nmap scan report for localhost (127.0.0.1)
Host is up.

PORT     STATE   SERVICE
8080/tcp unknown http-proxy

Nmap done: 1 IP address (1 host up) scanned in 2.03 seconds

请注意,Nmap 报告它正在跳过空闲扫描。这是因为你尝试将自己的机器用作僵尸和目标。在真实世界场景中,你有单独的主机时,此技术对于隐蔽扫描非常有效。

即使在我们的实验环境中存在此限制,此练习仍然向你展示了如何使用空闲扫描命令。在实践中,你将选择不同的主机作为僵尸,并且扫描将运行而不会出现此警告消息。

当需要最大程度的隐蔽性时,此高级技术非常有价值。它极大地增加了目标追踪扫描回实际扫描器的难度。

比较扫描结果

让我们比较两种扫描类型的输出,以查看差异:

echo "=== Stealth Scan Results ===" && cat /home/labex/project/stealth_scan.txt
echo "=== Idle Scan Results ===" && cat /home/labex/project/idle_scan.txt

两种扫描都成功检测到开放的端口 8080,但空闲扫描显示了有关所使用扫描技术的其他信息。

清理

在完成之前,让我们通过停止 Web 服务器来清理我们的环境:

pkill -f "nc -lvp 8080"

这将终止在端口 8080 上运行我们的 Web 服务器的 netcat 进程。

总结

在本实验中,你学习了如何使用 Nmap 执行隐蔽网络扫描,这对于网络安全专业人员来说是一项至关重要的技能。你首先设置了一个测试环境,其中包含一个简单的 Web 服务器,以便在受控环境中练习扫描。然后,你探索了基本的隐蔽扫描,使用了 SYN 扫描技术,它提供准确的结果并降低被检测的风险,使其在进行安全审计时不会警示受监控系统。

最后,你深入研究了更高级的隐蔽扫描方法,例如空闲扫描,它可以隐藏扫描的来源。虽然在实验环境中的应用受到限制,但你学习了它在真实世界场景中的工作原理。你还在实践中学习了如何解释扫描结果,理解不同的端口状态,并比较不同扫描技术的输出。掌握这些隐蔽扫描技术,可以帮助你在网络安全工作中进行全面的网络评估。