介绍
在本实验中,你将学习如何在 Nmap 中执行窗口扫描,这是网络安全中的一项重要技能。实验首先在目标 IP 地址上运行基本的窗口扫描,然后逐步扫描特定的端口范围。你还将增加扫描的详细程度,将结果保存到文件中,在 Xfce 终端中分析扫描结果,并与 ACK 扫描进行比较。这种实践经验将增强你对 Nmap 窗口扫描功能的理解。
使用 nmap -sW 192.168.1.1 运行窗口扫描
在这一步中,我们将使用 Nmap 执行窗口扫描。窗口扫描是一种 TCP 扫描类型,有时它能比其他扫描类型揭示更多关于开放和被过滤端口的信息。当存在可能阻止其他类型扫描的防火墙时,它特别有用。
在开始之前,让我们简要讨论一下窗口扫描的作用。窗口扫描利用了一些 TCP 实现中的一个特性。它向目标主机发送一个 SYN 标志位被设置的 TCP 数据包。如果端口开放,目标会用一个 SYN/ACK 数据包进行响应。然后 Nmap 会检查响应的 TCP 窗口大小。基于这个窗口大小,Nmap 可以确定端口是开放还是被过滤。
现在,让我们执行窗口扫描。我们将使用以下命令:
nmap -sW 192.168.1.1
将 192.168.1.1 替换为你要扫描的目标的实际 IP 地址。如果你不确定使用什么 IP 地址,可以使用回环地址 127.0.0.1,它指的是你自己的机器。
打开你的 Xfce 终端。你可以在桌面上或应用程序菜单中找到终端图标。
在终端中,输入以下命令并按回车键:
nmap -sW 127.0.0.1
这个命令告诉 Nmap 对回环地址(127.0.0.1)执行窗口扫描(-sW)。
你应该会看到类似于以下的输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost
PORT STATE SERVICE
135/tcp closed msrpc
139/tcp closed netbios-ssn
445/tcp closed microsoft-ds
Nmap done: 1 IP address (1 host up) scanned in 2.50 seconds
输出显示了目标机器上开放、关闭或被过滤的端口。在这个例子中,端口 135、139 和 445 是关闭的。具体的端口及其状态会因目标系统而异。
使用 nmap -sW -p 1-100 127.0.0.1 扫描端口范围
在这一步中,我们将通过指定端口范围来扩展窗口扫描。这使我们能够将扫描重点放在特定的一组端口上,这对于识别目标机器上运行的服务很有用。
默认情况下,Nmap 会扫描一组预定义的常用端口。但是,你可以使用 -p 选项自定义扫描,以针对特定端口或端口范围。当你想检查特定服务是否在非标准端口上运行,或者当你想通过专注于较小的端口集来限制扫描时间时,这特别有帮助。
现在,让我们使用端口范围执行窗口扫描。我们将使用以下命令:
nmap -sW -p 1-100 127.0.0.1
此命令告诉 Nmap 对回环地址(127.0.0.1)的 1 到 100 号端口(-p 1-100)执行窗口扫描(-sW)。
打开你的 Xfce 终端。
在终端中,输入以下命令并按回车键:
nmap -sW -p 1-100 127.0.0.1
你应该会看到类似于以下的输出:
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.000070s latency).
Other addresses for localhost (alias(es)): localhost
PORT STATE SERVICE
22/tcp closed ssh
25/tcp closed smtp
80/tcp closed http
Nmap done: 1 IP address (1 host up) scanned in 2.35 seconds
输出显示了目标机器上指定范围内(1 - 100)开放、关闭或被过滤的端口。在这个例子中,端口 22、25 和 80 是关闭的。具体的端口及其状态会因目标系统而异。
使用 nmap -v -sW 192.168.1.1 添加详细信息
在这一步中,我们将为窗口扫描添加详细输出。详细输出会提供有关扫描过程的更多详细信息,这有助于故障排除或理解扫描结果。
Nmap 的详细输出选项(-v)会增加扫描期间显示的信息量。这可能包括有关扫描阶段、发送和接收的数据包以及 Nmap 做出某些决策的原因的详细信息。当你试图诊断网络问题或想要了解 Nmap 如何解释来自目标的响应时,使用详细输出会特别有用。
现在,让我们使用详细输出执行窗口扫描。我们将使用以下命令:
nmap -v -sW 192.168.1.1
将 192.168.1.1 替换为你要扫描的目标的实际 IP 地址。如果你不确定使用什么 IP 地址,可以使用回环地址 127.0.0.1,它指的是你自己的机器。
打开你的 Xfce 终端。
在终端中,输入以下命令并按回车键:
nmap -v -sW 127.0.0.1
此命令告诉 Nmap 对回环地址(127.0.0.1)执行窗口扫描(-sW)并增加详细输出级别(-v)。
你应该会看到类似于以下的输出(确切输出会有所不同):
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
NSE: Loaded 0 scripts for scanning.
Initiating Window Scan at 10:10
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Completed Window Scan at 10:10, 0.12s elapsed (1000 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000039s latency).
Other addresses for localhost (alias(es)): localhost
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.19 seconds
现在的输出包含了有关扫描过程的更多信息,例如开始和结束时间、扫描的端口数量以及加载的任何脚本。具体细节会因目标系统和 Nmap 配置而异。
使用 nmap -sW -oN window.txt 127.0.0.1 保存窗口扫描结果
在这一步中,我们将把窗口扫描的结果保存到一个文件中。这对于后续分析或将结果分享给他人很有用。
Nmap 提供了多种以不同格式保存扫描结果的选项。-oN 选项以“普通”的人类可读格式保存结果。这种格式易于阅读和理解,但可能不适合自动解析。其他选项包括用于 XML 格式的 -oX 和用于脚本小子格式的 -oS。
现在,让我们执行窗口扫描并将结果保存到 ~/project 目录下一个名为 window.txt 的文件中。我们将使用以下命令:
nmap -sW -oN window.txt 127.0.0.1
此命令告诉 Nmap 对回环地址(127.0.0.1)执行窗口扫描(-sW),并将结果以普通格式(-oN)保存到文件 window.txt 中。
打开你的 Xfce 终端。
在终端中,输入以下命令并按回车键:
nmap -sW -oN window.txt 127.0.0.1
你应该会看到类似于以下的输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000070s latency).
Other addresses for localhost (alias(es)): localhost
PORT STATE SERVICE
22/tcp closed ssh
25/tcp closed smtp
80/tcp closed http
Nmap done: 1 IP address (1 host up) scanned in 2.35 seconds
扫描结果现在已保存在 ~/project 目录下的 window.txt 文件中。
要验证文件是否已创建并包含扫描结果,你可以使用 cat 命令来显示文件内容:
cat window.txt
你应该会在输出中看到 Nmap 扫描报告。
## Nmap 7.80 scan initiated Fri Oct 27 10:15:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000070s latency).
Other addresses for localhost (alias(es)): localhost
PORT STATE SERVICE
22/tcp closed ssh
25/tcp closed smtp
80/tcp closed http
## Nmap done: 1 IP address (1 host up) scanned in 2.55 seconds
在 Xfce 终端中分析窗口扫描结果
在这一步中,我们将分析上一步中保存到 window.txt 文件的窗口扫描结果。理解 Nmap 扫描的输出对于识别潜在漏洞和安全风险至关重要。
window.txt 文件包含一份人类可读的扫描结果报告。该报告包括有关目标主机、扫描的端口以及每个端口状态的信息。
打开你的 Xfce 终端。
首先,让我们使用 cat 命令显示 window.txt 文件的内容:
cat window.txt
你应该会看到类似于以下的输出(确切输出将取决于目标系统和使用的扫描选项):
## Nmap 7.80 scan initiated Fri Oct 27 10:15:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000070s latency).
Other addresses for localhost (alias(es)): localhost
PORT STATE SERVICE
22/tcp closed ssh
25/tcp closed smtp
80/tcp closed http
## Nmap done: 1 IP address (1 host up) scanned in 2.35 seconds
让我们来剖析一下这个输出的关键部分:
- **
Nmap scan report for localhost (127.0.0.1)**:这一行表明扫描是在回环地址127.0.0.1上执行的。 - **
Host is up**:这一行确认目标主机是可达的。 - **
PORT STATE SERVICE**:这一部分列出了扫描的端口及其相应的状态和服务。 - **
22/tcp closed ssh**:这一行表明端口 22(SSH)是关闭的。 - **
25/tcp closed smtp**:这一行表明端口 25(SMTP)是关闭的。 - **
80/tcp closed http**:这一行表明端口 80(HTTP)是关闭的。
STATE 列尤为重要。在窗口扫描中,可能的状态通常是 open(开放)、closed(关闭)或 filtered(被过滤)。
- **
open**:表示该端口正在监听连接。 - **
closed**:表示该端口未监听连接,但主机是可达的。 - **
filtered**:表示 Nmap 无法确定该端口是开放还是关闭,因为网络过滤阻止 Nmap 访问该端口。
在这个例子中,所有扫描的端口都报告为 closed(关闭)。这意味着目标主机是可达的,但它没有在这些端口上接受连接。
你可以利用这些信息来识别潜在的漏洞或安全风险。例如,如果一个端口意外地为 open(开放),这可能表明该端口上运行着一个易受攻击的服务。
现在,让我们使用 grep 命令在 window.txt 文件中查找开放端口。
grep "open" window.txt
如果没有开放端口,该命令将不会返回任何输出。在我们的例子中,输出为空。
在 Xfce 终端中与 ACK 扫描进行比较
在这一步中,我们将执行一次 ACK 扫描,并将其结果与我们之前执行的窗口扫描结果进行比较。这种比较将帮助我们理解这两种扫描类型之间的差异,以及它们如何用于收集有关目标系统的不同类型信息。
ACK 扫描(-sA)向目标主机发送 TCP ACK 数据包。与 SYN 扫描不同,ACK 扫描不会尝试建立连接。相反,它用于确定是否存在防火墙以及防火墙如何处理未经请求的 ACK 数据包。
如果存在防火墙并配置为阻止未经请求的 ACK 数据包,ACK 扫描将把所有端口报告为 filtered(被过滤)。如果不存在防火墙或配置为允许未经请求的 ACK 数据包,ACK 扫描将把端口报告为 unfiltered(未被过滤)或 closed(关闭)。
现在,让我们对回环地址(127.0.0.1)执行 ACK 扫描,并将结果保存到一个名为 ack.txt 的文件中。
打开你的 Xfce 终端。
在终端中,输入以下命令并按回车键:
nmap -sA -oN ack.txt 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.000070s latency).
Other addresses for localhost (alias(es)): localhost
PORT STATE SERVICE
22/tcp unfiltered ssh
25/tcp unfiltered smtp
80/tcp unfiltered http
Nmap done: 1 IP address (1 host up) scanned in 2.35 seconds
现在,让我们将 ACK 扫描的结果与窗口扫描的结果进行比较。
回忆一下窗口扫描(来自 window.txt)的输出:
## Nmap 7.80 scan initiated Fri Oct 27 10:15:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000070s latency).
Other addresses for localhost (alias(es)): localhost
PORT STATE SERVICE
22/tcp closed ssh
25/tcp closed smtp
80/tcp closed http
## Nmap done: 1 IP address (1 host up) scanned in 2.35 seconds
在窗口扫描中,端口被报告为 closed(关闭)。在 ACK 扫描中,端口被报告为 unfiltered(未被过滤)。这种差异是由于这两种扫描类型的工作方式不同。窗口扫描尝试建立连接,而 ACK 扫描只发送 ACK 数据包。
ACK 扫描中的 unfiltered(未被过滤)状态意味着 Nmap 无法确定端口是开放还是关闭,因为 ACK 数据包没有被过滤。这可能表明不存在防火墙,或者防火墙配置为允许未经请求的 ACK 数据包。
你也可以使用 cat 命令来显示 ack.txt 文件的内容:
cat ack.txt
你应该会在输出中看到 Nmap 扫描报告。
## Nmap 7.80 scan initiated Fri Oct 27 10:20:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000070s latency).
Other addresses for localhost (alias(es)): localhost
PORT STATE SERVICE
22/tcp unfiltered ssh
25/tcp unfiltered smtp
80/tcp unfiltered http
## Nmap done: 1 IP address (1 host up) scanned in 2.35 seconds
总结
在这个实验中,参与者学习如何在 Nmap 中执行窗口扫描。他们首先使用命令 nmap -sW 后跟一个 IP 地址来运行基本的窗口扫描,了解它如何利用 TCP 实现的特性来揭示端口状态。然后,他们使用 nmap -sW -p 1-100 扫描特定的端口范围,使用 -v 增加扫描的详细程度,并使用 -oN 将扫描结果保存到文件中。最后,他们在 Xfce 终端中分析窗口扫描结果并将其与 ACK 扫描进行比较。



