在 Nmap 中执行 TCP Null 扫描

NmapNmapBeginner
立即练习

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

简介

在本实验中,你将学习如何在 Nmap 中执行 TCP 空扫描。本实验涵盖了空扫描的各个方面,包括在特定 IP 地址上运行基本的空扫描、扫描定义的端口范围、增加扫描的详细程度、保存扫描结果、将空扫描与 SYN 扫描进行比较,以及在 Xfce 终端中查看结果。

空扫描是将所有 TCP 标志都设置为零,它可以帮助确定端口状态,但由于某些防火墙或系统会丢弃无标志的数据包,所以空扫描并不总是可靠的。通过一系列 Nmap 命令,你将获得不同空扫描操作的实践经验。


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/scan_types("Scan Types and Techniques") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/verbosity("Verbosity Levels") nmap/NmapGroup -.-> nmap/syn_scan("SYN Scan") subgraph Lab Skills nmap/output_formats -.-> lab-547100{{"在 Nmap 中执行 TCP Null 扫描"}} nmap/save_output -.-> lab-547100{{"在 Nmap 中执行 TCP Null 扫描"}} nmap/port_scanning -.-> lab-547100{{"在 Nmap 中执行 TCP Null 扫描"}} nmap/scan_types -.-> lab-547100{{"在 Nmap 中执行 TCP Null 扫描"}} nmap/target_specification -.-> lab-547100{{"在 Nmap 中执行 TCP Null 扫描"}} nmap/verbosity -.-> lab-547100{{"在 Nmap 中执行 TCP Null 扫描"}} nmap/syn_scan -.-> lab-547100{{"在 Nmap 中执行 TCP Null 扫描"}} end

使用 nmap -sN 192.168.1.1 运行空扫描

在这一步中,我们将使用 Nmap 执行一次空扫描。空扫描是一种 TCP 扫描类型,其中所有 TCP 标志都被设置为零。这意味着在 TCP 报头中没有设置任何标志(SYN、ACK、RST、FIN、URG、PSH)。对空扫描的响应可以帮助确定端口的状态。

以下是对空扫描工作原理的简要概述:

  • 空扫描:发送一个未设置任何标志的 TCP 数据包。
  • 开放或被过滤的端口:如果端口是开放的或被过滤的,则不会有响应。
  • 关闭的端口:如果端口是关闭的,目标主机应该用一个 RST(重置)数据包进行响应。

需要注意的是,空扫描并不总是可靠的,因为一些防火墙或系统可能会丢弃未设置标志的数据包。

让我们针对 IP 地址 192.168.1.1 运行一次空扫描。打开你的 Xfce 终端并执行以下命令:

sudo nmap -sN 192.168.1.1

此命令告诉 Nmap 针对目标 IP 地址 192.168.1.1 执行一次空扫描(-sN)。你需要 sudo 权限才能运行 Nmap。

输出将显示目标机器上端口的状态。由于空扫描通常无法提供明确的答案,你可能会看到端口被列为 open|filteredclosed

示例输出(实际输出将因目标而异):

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
All 1000 scanned ports on 192.168.1.1 are filtered

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

在这个示例中,所有 1000 个被扫描的端口都被报告为被过滤。这意味着由于防火墙规则或其他网络配置,Nmap 无法确定这些端口是开放的还是关闭的。

使用 nmap -sN -p 1-100 127.0.0.1 扫描端口范围

在这一步中,我们将通过指定要扫描的端口范围来扩展空扫描的使用。这使我们能够将扫描重点放在特定的感兴趣端口上,而不是扫描所有 1000 个默认端口。我们将扫描本地主机(127.0.0.1)上的 1 到 100 号端口。

Nmap 中的 -p 选项允许你指定端口范围。语法是 -p <起始端口>-<结束端口>。在我们的例子中,我们将使用 -p 1-100 来扫描 1 到 100 号端口。

打开你的 Xfce 终端并执行以下命令:

sudo nmap -sN -p 1-100 127.0.0.1

此命令告诉 Nmap 对本地主机(127.0.0.1)的 1 到 100 号端口(-p 1-100)执行空扫描(-sN)。请记住,你需要 sudo 权限才能运行 Nmap。

输出将显示目标机器上 1 到 100 号端口的状态。与之前的空扫描一样,结果可能不明确,你可能会看到端口被列为 open|filteredclosed

示例输出(实际输出会有所不同):

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000090s latency).
Not shown: 99 filtered ports
PORT    STATE  SERVICE
7/tcp   closed echo

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

在这个例子中,7 号端口(echo)被报告为关闭,其他 99 个端口被过滤。这表明目标主机对 7 号端口用 RST 数据包进行了响应,而其他端口要么没有响应,要么其响应被防火墙阻止。

使用 nmap -v -sN 192.168.1.1 添加详细程度

在这一步中,我们将为空扫描添加详细程度。Nmap 中的详细程度会提供有关扫描过程的更详细信息,这有助于理解 Nmap 在做什么以及排查任何问题。

Nmap 中的 -v 选项会增加详细程度级别。你可以多次使用 -v(例如 -vv)来进一步增加详细程度。在这一步中,我们将使用单个 -v

打开你的 Xfce 终端并执行以下命令:

sudo nmap -v -sN 192.168.1.1

此命令告诉 Nmap 针对目标 IP 地址 192.168.1.1 执行空扫描(-sN),并增加详细程度(-v)。你需要 sudo 权限才能运行 Nmap。

输出将比之前的空扫描更详细。你会看到有关扫描进度、正在扫描的端口以及出现的任何错误或警告的信息。

示例输出(实际输出会因目标而异):

Starting Nmap 7.80 ( https://nmap.org )
NSE: Loaded 0 scripts for scanning.
Initiating Null scan for 192.168.1.1
Scanning 192.168.1.1 [1000 ports]
Completed Null scan for 192.168.1.1
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
All 1000 scanned ports on 192.168.1.1 are filtered

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

注意输出中额外的行,例如“NSE: Loaded 0 scripts for scanning.”、“Initiating Null scan for 192.168.1.1”、“Scanning 192.168.1.1 [1000 ports]”和“Completed Null scan for 192.168.1.1”。这些行提供了对扫描过程的更多洞察。

使用 nmap -sN -oN null.txt 127.0.0.1 保存空扫描结果

在这一步中,我们将把空扫描的结果保存到一个文件中。这对于后续分析或记录你的发现很有用。Nmap 提供了几种以不同格式保存扫描结果的选项。我们将使用 -oN 选项,它会以普通的、人类可读的格式保存结果。

-oN 选项以文件名作为参数。在我们的例子中,我们将把结果保存到 ~/project 目录下一个名为 null.txt 的文件中。

打开你的 Xfce 终端并执行以下命令:

sudo nmap -sN -oN null.txt 127.0.0.1

此命令告诉 Nmap 对本地主机(127.0.0.1)执行空扫描(-sN),并将结果以普通格式(-oN)保存到 null.txt 文件中。你需要 sudo 权限才能运行 Nmap。

扫描完成后,你可以使用 cat 命令或像 nano 这样的文本编辑器来查看 null.txt 文件的内容。

cat null.txt

示例输出(实际输出会有所不同):

## Nmap 7.80 scan initiated Mon Oct 26 14:35:00 2020
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000090s latency).
All 1000 scanned ports on localhost (127.0.0.1) are filtered

## Nmap done at Mon Oct 26 14:35:03 2020 -- 1 IP address (1 host up) scanned in 3.21 seconds

你也可以使用 nano 打开该文件:

nano null.txt

这将在 nano 文本编辑器中打开 null.txt 文件,让你查看和编辑内容。

在 Xfce 终端中比较空扫描和 SYN 扫描

在这一步中,我们将比较空扫描和 SYN 扫描的结果。这将帮助你理解这两种扫描类型之间的差异,以及它们如何用于收集有关目标的不同信息。

SYN 扫描(也称为半开放扫描)是一种更隐蔽的扫描,它不会完成 TCP 握手。它向目标发送一个 SYN 数据包,如果目标用 SYN/ACK 响应,则表明该端口是开放的。然后 Nmap 发送一个 RST 数据包来关闭连接。

另一方面,空扫描发送一个未设置标志的 TCP 数据包。根据目标的操作系统和防火墙配置,目标的响应可以指示端口是开放、关闭还是被过滤。

首先,让我们对本地主机(127.0.0.1)执行 SYN 扫描,并将结果保存到一个名为 syn.txt 的文件中。

打开你的 Xfce 终端并执行以下命令:

sudo nmap -sS -oN syn.txt 127.0.0.1

此命令告诉 Nmap 对本地主机(127.0.0.1)执行 SYN 扫描(-sS),并将结果以普通格式(-oN)保存到 syn.txt 文件中。你需要 sudo 权限才能运行 Nmap。

现在,让我们将 null.txt(我们在上一步中创建的)的内容与 syn.txt 的内容进行比较。你可以使用 diff 命令来比较这两个文件:

diff null.txt syn.txt

diff 命令将显示两个文件之间的差异。你也可以使用像 nano 这样的文本编辑器来打开这两个文件并并排比较它们。

nano null.txt syn.txt

检查两次扫描的输出。你可能会注意到,SYN 扫描比空扫描更有可能识别开放端口,特别是如果目标系统配置为丢弃未设置标志的数据包。空扫描通常用于尝试绕过防火墙或入侵检测系统,但它们并不总是可靠的。

关键区别在于,SYN 扫描试图建立连接,而空扫描发送一个未设置标志的数据包,依靠目标的响应来推断端口状态。

在 Xfce 终端中查看结果

在这一步中,我们将查看在前几步中执行的空扫描和 SYN 扫描的结果。这包括检查输出文件(null.txtsyn.txt)并解读其中包含的信息。

打开你的 Xfce 终端,使用 cat 命令或 nano 编辑器来查看这两个文件的内容。

cat null.txt
cat syn.txt

或者,使用 nano

nano null.txt
nano syn.txt

查看结果时,请考虑以下几点:

  • 主机状态:检查目标主机报告为“已启动”还是“已关闭”。如果主机已关闭,Nmap 可能无法收集到太多信息。
  • 端口状态:查看每个端口的状态。常见的端口状态包括“开放”、“关闭”和“被过滤”。
    • 开放:表示该端口正在监听连接。
    • 关闭:表示该端口未监听连接。
    • 被过滤:表示防火墙或其他网络设备正在阻止对该端口的访问,因此难以确定其状态。
  • 空扫描和 SYN 扫描之间的差异:比较两次扫描的结果。一次扫描识别出的开放端口是否比另一次多?是否有任何端口在一次扫描中被报告为“被过滤”,而在另一次扫描中被报告为“关闭”?

例如,null.txt 可能显示所有端口都被过滤:

## Nmap 7.80 scan initiated Mon Oct 26 14:35:00 2020
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000090s latency).
All 1000 scanned ports on localhost (127.0.0.1) are filtered

## Nmap done at Mon Oct 26 14:35:03 2020 -- 1 IP address (1 host up) scanned in 3.21 seconds

syn.txt 可能显示一些端口为开放:

## Nmap 7.80 scan initiated Mon Oct 26 14:36:00 2020
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000090s latency).
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   closed smtp
80/tcp   open  http
111/tcp  open  rpcbind
...
## Nmap done at Mon Oct 26 14:36:03 2020 -- 1 IP address (1 host up) scanned in 3.21 seconds

通过比较不同扫描类型的结果,你可以更全面地了解目标系统的安全态势。请记住,结果的准确性可能会受到各种因素的影响,例如防火墙、入侵检测系统和目标的操作系统配置。

总结

在本实验中,参与者学习了如何使用 Nmap 执行 TCP 空扫描。他们首先使用命令 sudo nmap -sN 192.168.1.1 对 IP 地址 192.168.1.1 运行空扫描,了解到空扫描会将所有 TCP 标志设置为零,并且响应可以帮助确定端口状态。他们还学习了扫描 127.0.0.1 上的特定端口范围(1 - 100),增加扫描的详细程度,将结果保存到文件中,将空扫描与 SYN 扫描进行比较,以及在 Xfce 终端中查看结果。需要注意的是,由于一些防火墙或系统会丢弃未设置标志的数据包,空扫描并不总是可靠的。