在 Nmap 中执行空闲扫描

NmapNmapBeginner
立即练习

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

简介

在本实验中,你将学习如何使用 Nmap 执行空闲扫描。本实验将引导你完成使用 ping 扫描(nmap -sn)在网络上识别僵尸主机的过程。这一初始步骤有助于发现活跃主机,这对于为空闲扫描选择合适的僵尸主机至关重要。

然后,本实验将演示如何使用已识别的僵尸主机对目标执行空闲扫描(nmap -sI)。你将探索增加详细程度(-v)、针对特定端口(-p)以及将扫描结果保存到文件(-oN)的选项。最后,你将在 Xfce 终端中分析空闲扫描的结果。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/host_discovery("Host Discovery Techniques") nmap/NmapGroup -.-> nmap/scan_types("Scan Types and Techniques") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/verbosity("Verbosity Levels") subgraph Lab Skills nmap/output_formats -.-> lab-547105{{"在 Nmap 中执行空闲扫描"}} nmap/save_output -.-> lab-547105{{"在 Nmap 中执行空闲扫描"}} nmap/port_scanning -.-> lab-547105{{"在 Nmap 中执行空闲扫描"}} nmap/host_discovery -.-> lab-547105{{"在 Nmap 中执行空闲扫描"}} nmap/scan_types -.-> lab-547105{{"在 Nmap 中执行空闲扫描"}} nmap/target_specification -.-> lab-547105{{"在 Nmap 中执行空闲扫描"}} nmap/verbosity -.-> lab-547105{{"在 Nmap 中执行空闲扫描"}} end

使用 nmap -sn 192.168.1.0/24 识别僵尸主机

在这一步中,我们将使用 nmap 来发现网络 192.168.1.0/24 上的活跃主机。这是网络扫描和侦察中的一个基本步骤。nmap 中的 -sn 选项执行 ping 扫描,这意味着它只尝试确定主机是否在线,而不进行端口扫描。这对于快速识别网络上的活跃主机很有用。

在开始之前,让我们了解一下这个命令:

  • nmap:网络映射工具。
  • -sn:此选项告诉 Nmap 仅执行 ping 扫描(主机发现)。它禁用端口扫描。
  • 192.168.1.0/24:这是用 CIDR 表示法的目标网络。/24 表示 IP 地址的前 24 位是固定的,最后 8 位可以变化,这给我们提供了 256 个 IP 地址的范围(192.168.1.1 到 192.168.1.254,不包括网络地址和广播地址)。

现在,让我们执行这个命令。打开你的 Xfce 终端并输入以下内容:

sudo nmap -sn 192.168.1.0/24

系统会提示你输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

输出将显示网络上在线的主机。可能看起来像这样:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for 192.168.1.1
Host is up (0.00023s latency).
Nmap scan report for 192.168.1.2
Host is up (0.00031s latency).
Nmap scan report for 192.168.1.100
Host is up (0.00045s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 2.50 seconds

此输出表明 192.168.1.1192.168.1.2192.168.1.100 在网络上是在线的。在你的环境中,在线的具体 IP 地址可能会有所不同。在接下来的步骤中,我们将使用 192.168.1.2 作为僵尸主机,并使用 192.188.1.1 作为目标。

使用 nmap -sI 192.168.1.2 192.168.1.1 运行空闲扫描

在这一步中,我们将使用 nmap 执行空闲扫描。空闲扫描是一种高级扫描技术,它允许你在不暴露自己 IP 地址的情况下扫描目标。它通过利用一个“僵尸”主机来进行扫描转发。

其工作原理如下:

  1. 选择一个僵尸主机:你需要一个大部分时间处于空闲状态且具有可预测 IP ID(IP 标识)序列生成的主机。在上一步中,我们将 192.168.1.2 确定为一个潜在的僵尸主机。
  2. 向僵尸主机发送 SYN-ACK:Nmap 向僵尸主机发送一个 SYN-ACK 数据包。如果僵尸主机没有预期到这个 SYN-ACK,它将用一个 RST 数据包进行响应,并递增其 IP ID。
  3. 通过僵尸主机向目标发送 SYN:Nmap 构造一个发往目标主机的 SYN 数据包,但将源 IP 地址伪装成僵尸主机的 IP 地址。
  4. 分析僵尸主机的 IP ID
    • 如果目标主机的端口关闭,它将向僵尸主机发送一个 RST 数据包。僵尸主机的 IP ID 将增加 1。
    • 如果目标主机的端口开放,它将向僵尸主机发送一个 SYN-ACK 数据包。然后僵尸主机将向目标发送一个 RST 数据包(因为它没有发起连接)。僵尸主机的 IP ID 将增加 2。
  5. 确定端口状态:通过观察僵尸主机 IP ID 的变化,Nmap 可以确定目标端口是开放还是关闭。

现在,让我们执行空闲扫描命令。打开你的 Xfce 终端并输入以下内容:

sudo nmap -sI 192.168.1.2 192.168.1.1

以下是该命令的分解:

  • nmap:网络映射工具。
  • -sI 192.168.1.2:此选项指定空闲扫描并将 192.168.1.2 设置为僵尸主机。
  • 192.168.1.1:这是我们要扫描的目标主机。

系统会提示你输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

输出将显示通过空闲扫描确定的目标主机(192.168.1.1)上开放的端口。结果可能如下所示:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Idle scan using zombie 192.168.1.2 (192.168.1.2:80); Class: Incremental
Nmap scan report for 192.168.1.1
Host is up (0.00029s latency).
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

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

此输出表明在目标主机 192.188.1.1 上,端口 22(SSH)和 80(HTTP)是开放的。请注意,具体开放的端口可能因目标系统的配置而异。

使用 nmap -v -sI 192.168.1.2 192.168.1.1 增加详细程度

在这一步中,我们将为上一步的空闲扫描命令增加详细程度。nmap 中的详细程度选项会提供有关扫描过程的更详细信息,这有助于理解正在发生的事情并排查任何问题。

-v 选项会增加详细程度级别。你可以多次使用它(例如,-vv-vvv)以获得更详细的输出。对于本实验,我们将使用单个 -v

让我们执行带详细程度的命令。打开你的 Xfce 终端并输入以下内容:

sudo nmap -v -sI 192.168.1.2 192.168.1.1

以下是该命令的分解:

  • nmap:网络映射工具。
  • -v:此选项增加详细程度级别。
  • -sI 192.168.1.2:此选项指定空闲扫描并将 192.168.1.2 设置为僵尸主机。
  • 192.168.1.1:这是我们要扫描的目标主机。

系统会提示你输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

输出将比上一次空闲扫描更详细。它将显示正在发送的数据包的信息、僵尸主机的 IP ID 值以及端口状态确定背后的推理。输出可能如下所示(确切输出会有所不同):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
NSE: Loaded 0 scripts for scanning.
Initiating Idle scan for 192.168.1.1
Scanning 192.168.1.1 [1000 ports]
Idle scan using zombie 192.168.1.2 (192.168.1.2:80); Class: Incremental
Sending TCP SYN to 192.168.1.1:22
Got SYN-ACK from 192.168.1.1:22
PORT   STATE SERVICE
22/tcp open  ssh
Sending TCP SYN to 192.168.1.1:80
Got SYN-ACK from 192.168.1.1:80
PORT   STATE SERVICE
80/tcp open  http
Nmap done: 1 IP address (1 host up) scanned in 16.54 seconds

详细的输出提供了对扫描过程的洞察,使得更容易理解空闲扫描的工作原理并诊断任何潜在问题。

使用 nmap -sI 192.168.1.2 -p 80 192.168.1.1 扫描特定端口

在这一步中,我们将把空闲扫描聚焦在一个特定端口上。当你想要快速检查某个特定服务的状态而不扫描所有端口时,这会很有用。我们将扫描目标主机上的端口 80(HTTP)。

nmap 中的 -p 选项允许你指定想要扫描的端口。你可以指定单个端口、端口范围(例如,1 - 100)或用逗号分隔的端口列表(例如,22,80,443)。在这种情况下,我们将只扫描端口 80。

让我们使用空闲扫描技术执行扫描端口 80 的命令。打开你的 Xfce 终端并输入以下内容:

sudo nmap -sI 192.168.1.2 -p 80 192.168.1.1

以下是该命令的分解:

  • nmap:网络映射工具。
  • -sI 192.168.1.2:此选项指定空闲扫描并将 192.168.1.2 设置为僵尸主机。
  • -p 80:此选项指定我们只想扫描端口 80。
  • 192.168.1.1:这是我们要扫描的目标主机。

系统会提示你输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

输出将显示目标主机(192.168.1.1)上的端口 80 是开放还是关闭。结果可能如下所示:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Idle scan using zombie 192.168.1.2 (192.168.1.2:80); Class: Incremental
Nmap scan report for 192.168.1.1
Host is up (0.00031s latency).

PORT   STATE SERVICE
80/tcp open  http

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

此输出表明在目标主机 192.168.1.1 上端口 80(HTTP)是开放的。如果端口是关闭的,输出将显示 closed 而不是 open

使用 nmap -sI 192.168.1.2 -oN idle.txt 192.168.1.1 保存空闲扫描结果

在这一步中,我们将把空闲扫描的结果保存到一个文件中。这对于后续分析或报告目的很有用。我们将使用 -oN 选项以“正常”格式将结果保存到名为 idle.txt 的文件中。

-oN 选项告诉 nmap 以人类可读的格式保存输出,这种格式易于阅读和理解。还有其他输出格式可用(例如,-oX 用于 XML,-oG 用于可用于 Grep 的输出),但对于本实验,我们将使用正常格式。

让我们执行将空闲扫描结果保存到文件的命令。打开你的 Xfce 终端并输入以下内容:

sudo nmap -sI 192.168.1.2 -oN idle.txt 192.168.1.1

以下是该命令的分解:

  • nmap:网络映射工具。
  • -sI 192.168.1.2:此选项指定空闲扫描并将 192.168.1.2 设置为僵尸主机。
  • -oN idle.txt:此选项告诉 nmap 以正常格式将输出保存到名为 idle.txt 的文件中。
  • 192.168.1.1:这是我们要扫描的目标主机。

系统会提示你输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

扫描完成后,结果将保存到你当前目录(~/project)中名为 idle.txt 的文件中。你在终端中不会看到任何输出,因为输出已被重定向到该文件。

要验证文件是否已创建并包含扫描结果,你可以使用 cat 命令显示文件内容:

cat idle.txt

输出将显示扫描结果,类似于你在前面步骤中看到的,但现在它已保存在文件中。输出可能如下所示:

## Nmap 7.80 scan initiated Fri Oct 27 10:20:00 2023 as: nmap -sI 192.168.1.2 -oN idle.txt 192.168.1.1
Idle scan using zombie 192.168.1.2 (192.168.1.2:80); Class: Incremental
Nmap scan report for 192.168.1.1
Host is up (0.00031s latency).
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
## Nmap done at Fri Oct 27 10:20:15 2023 -- 1 IP address (1 host up) scanned in 15.00 seconds

现在你已将空闲扫描结果保存到文件中以供进一步分析。

在 Xfce 终端中分析空闲扫描

在这一步中,我们将分析上一步中保存到 idle.txt 文件的空闲扫描结果。我们将使用 grep 命令从文件中提取特定信息,并讨论如何解读结果。

首先,让我们使用 cat 命令显示 idle.txt 文件的内容,以唤起我们对扫描结果的记忆。打开你的 Xfce 终端并输入以下内容:

cat idle.txt

你应该会看到 nmap 扫描的输出,包括有关目标主机的信息以及扫描端口的状态。

现在,让我们使用 grep 来查找特定信息。例如,要找出哪些端口是开放的,我们可以使用 grep 搜索包含单词“open”的行:

grep "open" idle.txt

此命令将显示 idle.txt 文件中所有包含单词“open”的行。输出可能如下所示:

80/tcp open  http

这告诉我们目标主机上的端口 80(HTTP)是开放的。

你还可以使用 grep 来查找目标主机的 IP 地址:

grep "Nmap scan report for" idle.txt

此命令将显示包含目标主机 IP 地址的行:

Nmap scan report for 192.168.1.1

解读结果

空闲扫描结果提供了有关目标主机开放端口的信息。此信息可用于识别主机上运行的潜在漏洞或服务。

  • 开放端口:开放端口表示有服务正在监听该端口并接受连接。这可能是 Web 服务器(端口 80)、SSH 服务器(端口 22)或其他服务。
  • 关闭端口:关闭端口表示没有服务在监听该端口。
  • 被过滤的端口:被过滤的端口意味着 nmap 无法确定该端口是开放还是关闭,因为防火墙阻止了连接。

通过分析开放端口,你可以深入了解目标主机上运行的服务,并可能识别出可被利用的漏洞。请记住,空闲扫描是一种隐蔽的技术,但并非万无一失。如果网络管理员正在监控网络流量,他们仍可能检测到扫描。

至此,关于使用 nmap 进行空闲扫描的实验结束。你已经学会了如何识别僵尸主机、执行空闲扫描、增加详细程度、扫描特定端口、将结果保存到文件以及在 Xfce 终端中分析结果。

总结

在本实验中,我们首先使用 nmap -sn 192.168.1.0/24 来识别 192.168.1.0/24 网络上的活动主机。这种 ping 扫描使我们能够快速发现活动主机,例如 192.168.1.1、192.168.1.2 和 192.168.1.100,这些主机对于后续的扫描活动至关重要。然后,我们准备以 192.168.1.2 作为僵尸主机、192.168.1.1 作为目标执行空闲扫描。