在 Nmap 中执行 TCP FIN 扫描

NmapNmapBeginner
立即练习

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

简介

在本实验中,你将学习如何使用 Nmap 进行 TCP FIN 扫描。你将从对目标 IP 执行基本的 FIN 扫描开始,然后扫描特定端口,增加扫描的详细程度,并保存结果。此外,你将把 FIN 扫描与 TCP 扫描进行比较,并在 Xfce 终端中分析开放端口。FIN 扫描会向目标主机发送一个 FIN 数据包,这有助于绕过某些防火墙或入侵检测系统。


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/service_detection("Service Detection") nmap/NmapGroup -.-> nmap/firewall_evasion("Firewall Evasion Techniques") nmap/NmapGroup -.-> nmap/stealth_scanning("Stealth and Covert Scanning") subgraph Lab Skills nmap/output_formats -.-> lab-547093{{"在 Nmap 中执行 TCP FIN 扫描"}} nmap/save_output -.-> lab-547093{{"在 Nmap 中执行 TCP FIN 扫描"}} nmap/port_scanning -.-> lab-547093{{"在 Nmap 中执行 TCP FIN 扫描"}} nmap/scan_types -.-> lab-547093{{"在 Nmap 中执行 TCP FIN 扫描"}} nmap/target_specification -.-> lab-547093{{"在 Nmap 中执行 TCP FIN 扫描"}} nmap/verbosity -.-> lab-547093{{"在 Nmap 中执行 TCP FIN 扫描"}} nmap/service_detection -.-> lab-547093{{"在 Nmap 中执行 TCP FIN 扫描"}} nmap/firewall_evasion -.-> lab-547093{{"在 Nmap 中执行 TCP FIN 扫描"}} nmap/stealth_scanning -.-> lab-547093{{"在 Nmap 中执行 TCP FIN 扫描"}} end

使用 nmap -sF 192.168.1.1 运行 FIN 扫描

在这一步中,你将学习如何使用 Nmap 执行 FIN 扫描。FIN 扫描是一种 TCP 扫描类型,它向目标主机发送一个 FIN(完成)数据包。与尝试建立连接的 SYN 扫描不同,FIN 扫描只是简单地发送一个 FIN 数据包并观察响应。这对于绕过某些防火墙或入侵检测系统可能很有用。

在我们开始之前,让我们先明确一下什么是 FIN 数据包。在 TCP 通信中,FIN 标志表示连接的结束。当主机发送一个 FIN 数据包时,它本质上是在说:“我已完成发送数据。”

现在,让我们执行 FIN 扫描。打开你的 Xfce 终端。

执行以下命令:

sudo nmap -sF 192.168.1.1
  • -sF:此选项告诉 Nmap 执行 FIN 扫描。
  • 192.168.1.1:这是目标 IP 地址。如果不同,请将其替换为你要扫描的机器的实际 IP 地址。

你可能需要调整 IP 地址 192.168.1.1,以匹配从你的 LabEx VM 可访问的目标机器的 IP 地址。如果你没有特定的目标,可以使用你的网关或本地网络上的其他设备的 IP 地址。如果你不确定,可以尝试使用 127.0.0.1(localhost)扫描你自己的机器。

输出将显示目标机器上每个端口的状态。开放端口通常不会对 FIN 数据包做出响应,而关闭端口将用 RST(重置)数据包进行响应。被过滤的端口可能根本不响应,这使得难以确定它们的状态。

示例输出(实际输出将根据目标而有所不同):

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.00043s latency).
Not shown: 999 closed ports
PORT    STATE    SERVICE
22/tcp  filtered ssh

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

在此示例中,端口 22(SSH)显示为被过滤。这意味着由于防火墙规则或其他网络条件,Nmap 无法确定该端口是开放还是关闭。“Not shown: 999 closed ports”这一行表示 Nmap 没有显示 999 个关闭的端口,以保持输出简洁。

使用 nmap -sF -p 22,80 127.0.0.1 扫描特定端口

在上一步中,你学习了如何执行基本的 FIN 扫描。现在,你将学习如何在 FIN 扫描期间针对特定端口进行扫描。当你想将扫描重点放在可能在特定端口上运行的服务上时,这很有用,比如 SSH(端口 22)和 HTTP(端口 80)。

指定端口可以显著减少扫描时间,并使结果更具相关性。你无需扫描所有 65535 个端口,而是可以专注于最有可能感兴趣的端口。

打开你的 Xfce 终端。

执行以下命令:

sudo nmap -sF -p 22,80 127.0.0.1
  • -sF:此选项告诉 Nmap 执行 FIN 扫描。
  • -p 22,80:此选项指定你要扫描端口 22 和 80。你可以指定单个端口、端口范围(例如 1 - 100)或用逗号分隔的端口列表。
  • 127.0.0.1:这是目标 IP 地址,在这种情况下是你自己的机器(localhost)。

输出将显示你机器上端口 22 和 80 的状态。

示例输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000027s latency).

PORT   STATE    SERVICE
22/tcp filtered ssh
80/tcp filtered http

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

在此示例中,端口 22 和 80 都显示为被过滤。这意味着 Nmap 无法确定这些端口是开放还是关闭。这是 FIN 扫描常见的结果,尤其是在存在防火墙的情况下。

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

在这一步中,你将学习如何增加 Nmap FIN 扫描的详细程度。详细程度会提供有关扫描过程的更详细信息,这有助于故障排除或理解扫描结果。

Nmap 中的 -v 选项会增加详细程度级别。你可以多次使用它(例如 -vv)以获得更详细的输出。

打开你的 Xfce 终端。

执行以下命令:

sudo nmap -v -sF 192.168.1.1
  • -v:此选项增加详细程度级别。
  • -sF:此选项告诉 Nmap 执行 FIN 扫描。
  • 192.168.1.1:这是目标 IP 地址。如有需要,请记得将其替换为有效的 IP 地址。

现在输出将包含有关扫描的更多信息,例如发送和接收的数据包、某些决策的原因以及整体进度。

示例输出(实际输出将根据目标和网络条件而有所不同):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
NSE: Loaded 0 scripts for scanning.
Initiating Ping Scan at 10:10
Scanning 192.168.1.1 [2 ports]
Completed Ping Scan at 10:10, 0.00s elapsed (1 total hosts)
Initiating FIN Scan at 10:10
Scanning 192.168.1.1 [1000 ports]
Completed FIN Scan at 10:10, 2.12s elapsed (1000 total ports)
Nmap scan report for 192.168.1.1
Host is up (0.00038s latency).
Not shown: 999 closed ports
PORT    STATE    SERVICE
22/tcp  filtered ssh

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 2.18 seconds
Raw packets sent: 1001 (44.044KB) | Rcvd: 1 (44B)

请注意所提供的额外信息,例如 NSE 脚本加载、ping 扫描和 FIN 扫描的启动及完成时间,以及发送和接收的数据包数量。在排查网络问题或分析扫描结果时,这种详细程度可能非常宝贵。

使用 nmap -sF -oN fin.txt 127.0.0.1 保存 FIN 扫描结果

在这一步中,你将学习如何将 Nmap FIN 扫描的结果保存到文件中。这对于后续的分析、报告或与其他扫描结果进行比较很有用。

Nmap 提供了多种以不同格式保存扫描结果的选项。-oN 选项以“普通”的人类可读格式保存结果。

打开你的 Xfce 终端。

执行以下命令:

sudo nmap -sF -oN fin.txt 127.0.0.1
  • -sF:此选项告诉 Nmap 执行 FIN 扫描。
  • -oN fin.txt:此选项指定你要将结果以普通格式保存到名为 fin.txt 的文件中。该文件将保存在你当前的目录(~/project)中。
  • 127.0.0.1:这是目标 IP 地址,在这种情况下是你自己的机器(localhost)。

扫描完成后,你可以使用像 nano 这样的文本编辑器打开 fin.txt 文件来查看保存的结果。

nano fin.txt

该文件将包含扫描期间在屏幕上显示的相同信息,但格式更结构化。

fin.txt 的示例内容:

## Nmap 7.80 scan initiated Tue Oct 27 10:15:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000027s latency).
Not shown: 999 closed ports
PORT    STATE    SERVICE
22/tcp  filtered ssh

## Nmap done at Tue Oct 27 10:15:02 2023 -- 1 IP address (1 host up) scanned in 1.89 seconds

现在你可以使用此文件进行进一步的分析或报告。

在 Xfce 终端中比较 FIN 扫描和 TCP 扫描

在这一步中,你将比较 FIN 扫描和 TCP 连接扫描的结果。这种比较将突出这些扫描在识别开放端口方面的差异,以及防火墙可能如何不同地对待它们。

TCP 连接扫描(-sT)会与目标建立完整的 TCP 连接,这使其更可靠,但也更容易被检测到。另一方面,FIN 扫描(-sF)会发送一个 FIN 数据包,防火墙记录该数据包的可能性较小,但可能并不总是能提供准确的结果。

打开你的 Xfce 终端。

首先,对本地主机(127.0.0.1)执行 TCP 连接扫描:

sudo nmap -sT 127.0.0.1

此命令将尝试与你本地机器上的每个端口建立完整的 TCP 连接。

接下来,对同一目标执行 FIN 扫描:

sudo nmap -sF 127.0.0.1

现在,比较两次扫描的结果。你可能会注意到 TCP 连接扫描识别出的开放端口比 FIN 扫描更多。这是因为一些防火墙或系统可能会阻止或忽略 FIN 数据包,从而导致结果不准确。

TCP 连接扫描的示例输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:20 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000026s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
631/tcp  open  ipp
3306/tcp open  mysql

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

FIN 扫描的示例输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:21 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000026s latency).
Not shown: 999 closed ports
PORT    STATE    SERVICE
22/tcp  filtered ssh

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

在这个示例中,TCP 连接扫描显示端口 22、631 和 3306 为开放,而 FIN 扫描仅显示端口 22 为被过滤状态。这展示了不同的扫描类型如何产生不同的结果,以及为什么在进行网络侦察时使用多种技术很重要。“被过滤”状态意味着防火墙、过滤器或其他网络障碍正在阻止该端口,使 Nmap 无法确定它是开放还是关闭。

在 Xfce 终端中分析开放端口

在这一步中,你将分析在前几次扫描中识别出的开放端口,以了解目标系统上运行的服务。这涉及解释 Nmap 输出并研究每个开放端口的用途。

打开你的 Xfce 终端。

假设你在上一步中执行了 TCP 连接扫描(sudo nmap -sT 127.0.0.1)并获得了以下输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:20 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000026s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
631/tcp  open  ipp
3306/tcp open  mysql

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

此输出表明你的本地机器上端口 22、631 和 3306 是开放的。现在,让我们分析这些端口中的每一个:

  • 端口 22(ssh):此端口通常用于 SSH(安全外壳协议),这是一种用于远程登录和命令执行的安全协议。如果此端口开放,则意味着你的机器上正在运行 SSH 服务器,允许你远程连接到它。

  • 端口 631(ipp):此端口用于 IPP(互联网打印协议),这是一种用于通过网络进行打印的协议。如果此端口开放,则意味着你的机器上正在运行打印服务,允许你远程打印文档。

  • 端口 3306(mysql):此端口是 MySQL(一种流行的开源关系数据库管理系统)的默认端口。如果此端口开放,则意味着你的机器上正在运行 MySQL 服务器,允许你访问和管理数据库。

要进一步调查这些服务,你可以使用其他工具,如 netstatss 来检查哪些进程正在监听这些端口。例如,要检查监听端口 22 的进程,你可以使用以下命令:

sudo netstat -tulnp | grep :22

此命令将显示监听端口 22 的进程 ID(PID)和进程名称。

示例输出:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1234/sshd

此输出表明 sshd 进程(SSH 守护进程)正在监听端口 22。

通过分析开放端口及其上运行的服务,你可以深入了解目标系统的安全态势并识别潜在的漏洞。

总结

在本实验中,你学会了使用 Nmap 进行 TCP FIN 扫描。你首先使用命令 nmap -sF 加上目标 IP 进行了基本的 FIN 扫描。你还学会了扫描特定端口、增加扫描的详细程度以及将结果保存到文件中。此外,你在 Xfce 终端中比较了 FIN 扫描和 TCP 扫描,并分析了开放端口。FIN 扫描会向目标主机发送一个 FIN 数据包,这有助于绕过某些防火墙或入侵检测系统。