使用 Nmap 枚举 SMB 服务

NmapNmapBeginner
立即练习

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

简介

在本实验中,我们将探索如何使用 Nmap 枚举 SMB(服务器消息块)服务。SMB 是一种网络文件共享协议,识别可用的共享资源可以揭示有关目标系统的有价值信息。我们将使用 smb-enum-shares Nmap 脚本引擎(NSE)脚本来实现这一点。

本实验涉及运行 Nmap 命令以枚举目标机器上的 SMB 共享资源,指定目标 IP 地址(例如,192.168.1.1 或本地主机的 127.0.0.1),并解释输出以识别可用的共享资源、它们的类型以及相关注释。我们还将探索增加详细程度、将结果保存到文件以及将输出与横幅扫描进行比较。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/verbosity("Verbosity Levels") nmap/NmapGroup -.-> nmap/os_version_detection("OS and Version Detection") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") nmap/NmapGroup -.-> nmap/scripting_basics("Scripting Engine Basics") nmap/NmapGroup -.-> nmap/script_management("Script Categories and Updating") subgraph Lab Skills nmap/save_output -.-> lab-547099{{"使用 Nmap 枚举 SMB 服务"}} nmap/port_scanning -.-> lab-547099{{"使用 Nmap 枚举 SMB 服务"}} nmap/target_specification -.-> lab-547099{{"使用 Nmap 枚举 SMB 服务"}} nmap/verbosity -.-> lab-547099{{"使用 Nmap 枚举 SMB 服务"}} nmap/os_version_detection -.-> lab-547099{{"使用 Nmap 枚举 SMB 服务"}} nmap/service_detection -.-> lab-547099{{"使用 Nmap 枚举 SMB 服务"}} nmap/scripting_basics -.-> lab-547099{{"使用 Nmap 枚举 SMB 服务"}} nmap/script_management -.-> lab-547099{{"使用 Nmap 枚举 SMB 服务"}} end

使用 nmap --script smb-enum-shares 192.168.1.1 运行 SMB 枚举

在这一步中,我们将使用 Nmap 和 smb-enum-shares 脚本来枚举目标机器上的 SMB 共享资源。SMB(服务器消息块)是一种网络文件共享协议,枚举共享资源可以揭示有关目标系统的有价值信息,例如可用资源和潜在漏洞。

首先,让我们了解一下我们将使用的命令:

  • nmap:这是我们将使用的网络扫描工具。
  • --script smb-enum-shares:这告诉 Nmap 使用 smb-enum-shares NSE(Nmap 脚本引擎)脚本。此脚本专门用于枚举 SMB 共享资源。
  • 192.168.1.1:这是目标 IP 地址。重要提示:你需要将其替换为你要扫描的目标机器的实际 IP 地址。如果你没有特定目标,可以使用 127.0.0.1(localhost)进行测试,但请记住,这只会扫描你自己的机器。

现在,让我们执行该命令。打开你的 Xfce 终端并输入以下命令,然后按回车键:

nmap --script smb-enum-shares 192.168.1.1

重要提示:将 192.168.1.1 替换为你的目标实际 IP 地址。如果你在本地进行测试,可以使用 127.0.0.1

输出将显示 SMB 共享枚举的结果。它可能如下所示(确切输出将取决于目标系统):

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 filtered ports
PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\192.168.1.1\IPC$:
|     type: STYPE_IPC_HIDDEN
|     comment: Remote IPC
|     flags: 0x80000000
|   \\192.168.1.1\ADMIN$:
|     type: STYPE_DISKTREE
|     comment: Remote Admin
|     flags: 0x0
|_  \\192.168.1.1\C$:
|     type: STYPE_DISKTREE
|     comment: Default share
|     flags: 0x0

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

此输出显示了 Nmap 在目标系统上能够发现的 SMB 共享资源。你可以看到共享名称(例如 IPC$ADMIN$C$)、它们的类型、注释和标志。这些信息对于识别潜在的攻击途径或配置错误可能很有用。

使用 nmap --script smb-enum-shares -p 445 127.0.0.1 扫描端口 445

在这一步中,我们将专注于扫描特定端口 445,该端口通常与 SMB 相关联。通过指定端口,我们可以缩小扫描范围,并可能更快地获得结果。我们将使用与之前相同的 smb-enum-shares 脚本,但这次我们将告诉 Nmap 仅扫描端口 445。

让我们来分析一下这个命令:

  • nmap:网络扫描工具。
  • --script smb-enum-shares:指定用于 SMB 共享枚举的 NSE 脚本。
  • -p 445:此选项告诉 Nmap 仅扫描端口 445。如果没有此选项,Nmap 将扫描一系列常用端口。
  • 127.0.0.1:这是目标 IP 地址,在这种情况下是本地主机。这意味着我们正在扫描运行在我们自己机器上的 SMB 服务。

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

nmap --script smb-enum-shares -p 445 127.0.0.1

输出将显示专门针对端口 445 的 SMB 共享枚举结果。它可能如下所示:

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.00014s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\127.0.0.1\IPC$:
|     type: STYPE_IPC_HIDDEN
|     comment: Remote IPC
|     flags: 0x80000000
|   \\127.0.0.1\ADMIN$:
|     type: STYPE_DISKTREE
|     comment: Remote Admin
|     flags: 0x0
|_  \\127.0.0.1\C$:
|     type: STYPE_DISKTREE
|     comment: Default share
|     flags: 0x0

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

请注意,输出与上一步类似,但这次我们专门针对端口 445 进行了扫描。当你知道 SMB 在特定端口上运行并且想要避免不必要地扫描其他端口时,这可能会很有用。

使用 nmap -v --script smb-enum-shares 192.168.1.1 添加详细输出

在这一步中,我们将为 Nmap 扫描添加详细输出。详细输出会提供更丰富的信息,有助于你了解 Nmap 的操作过程以及排查可能出现的问题。-v 选项用于增加详细程度。

让我们来看一下这个命令:

  • nmap:网络扫描工具。
  • -v:此选项会增加详细程度。增加更多的 -v 选项(例如 -vv)会进一步提高详细程度。
  • --script smb-enum-shares:指定用于 SMB 共享枚举的 NSE 脚本。
  • 192.168.1.1:目标 IP 地址。请记住将其替换为你目标的实际 IP 地址。

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

nmap -v --script smb-enum-shares 192.168.1.1

重要提示:将 192.168.1.1 替换为你目标的实际 IP 地址。如果你在本地进行测试且未启用 SMB,你可能不会在输出中看到太大差异。

输出将比之前的扫描更加详细。你会看到有关扫描进度、正在运行的脚本以及出现的任何错误的更多信息。例如,你可能会看到如下输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
NSE: Loaded 1 script for scanning.
Initiating Ping Scan at 10:10
Scanning 192.168.1.1 [4 ports]
Completed Ping Scan at 10:10, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:10
Completed Parallel DNS resolution of 1 host. at 10:10, 0.00s elapsed
Initiating Connect Scan at 10:10
Scanning 192.168.1.1 [1000 ports]
Discovered open port 445/tcp on 192.168.1.1
Completed Connect Scan at 10:10, 0.12s elapsed (1000 total ports)
Initiating Service scan at 10:10
Scanning 1 service on 192.168.1.1
Completed Service scan at 10:10, 6.41s elapsed (1 service total)
NSE: Starting runlevel 1 (of 1) scan.
NSE: Running script smb-enum-shares on 192.168.1.1.
Nmap scan report for 192.168.1.1
Host is up (0.00038s latency).
Not shown: 999 filtered ports
PORT    STATE SERVICE
445/tcp open  microsoft-ds
Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\192.168.1.1\IPC$:
|     type: STYPE_IPC_HIDDEN
|     comment: Remote IPC
|     flags: 0x80000000
|   \\192.168.1.1\ADMIN$:
|     type: STYPE_DISKTREE
|     comment: Remote Admin
|     flags: 0x0
|_  \\192.168.1.1\C$:
|     type: STYPE_DISKTREE
|     comment: Default share
|     flags: 0x0

NSE: Script Post-scanning.
Nmap done: 1 IP address (1 host up) scanned in 7.01 seconds

详细的输出展示了 Nmap 扫描的不同阶段,包括 ping 扫描、DNS 解析、连接扫描、服务扫描以及 smb-enum-shares 脚本的执行。这种详细程度对于调试和理解扫描过程非常有价值。

使用 nmap --script smb-enum-shares -oN smb.txt 127.0.0.1 保存 SMB 结果

在这一步中,我们将学习如何将 Nmap 扫描的结果保存到文件中。这对于后续分析或与他人共享结果很有用。我们将使用 -oN 选项以“正常”格式保存输出,这种格式是人类可读的。

让我们来分析一下这个命令:

  • nmap:网络扫描工具。
  • --script smb-enum-shares:指定用于 SMB 共享枚举的 NSE 脚本。
  • -oN smb.txt:此选项告诉 Nmap 将输出以正常格式保存到名为 smb.txt 的文件中。该文件将保存在你当前的目录中,即 ~/project
  • 127.0.0.1:这是目标 IP 地址,在这种情况下是本地主机。

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

nmap --script smb-enum-shares -oN smb.txt 127.0.0.1

扫描完成后,你不会在终端中看到输出。相反,结果将保存在 ~/project 目录下名为 smb.txt 的文件中。

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

cat smb.txt

你应该会看到 Nmap 扫描结果打印到终端上。输出应该与你在前面步骤中看到的类似,但现在它也保存在一个文件中。

## Nmap 7.80 scan initiated Fri Oct 27 10:15:00 2023 as: nmap --script smb-enum-shares -oN smb.txt 127.0.0.1
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00014s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds
Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\127.0.0.1\IPC$:
|     type: STYPE_IPC_HIDDEN
|     comment: Remote IPC
|     flags: 0x80000000
|   \\127.0.0.1\ADMIN$:
|     type: STYPE_DISKTREE
|     comment: Remote Admin
|     flags: 0x0
|_  \\127.0.0.1\C$:
|     type: STYPE_DISKTREE
|     comment: Default share
|     flags: 0x0
## Nmap done at Fri Oct 27 10:15:01 2023 -- 1 IP address (1 host up) scanned in 1.23 seconds

你还可以使用 ls -l 命令来检查文件大小和修改日期:

ls -l smb.txt

这将显示有关 smb.txt 文件的信息,包括其大小、修改日期和权限。

在 Xfce 终端中查看 SMB 共享

在这一步中,我们将查看在前几步中识别出的 SMB 共享。我们将使用 cat 命令来查看 smb.txt 文件的内容,该文件包含 Nmap 扫描结果。然后,我们将讨论如何解读输出并识别潜在的安全漏洞。

首先,打开你的 Xfce 终端并使用 cat 命令显示 smb.txt 文件的内容:

cat smb.txt

输出将显示 Nmap 扫描结果,包括识别出的 SMB 共享。例如,你可能会看到如下输出:

## Nmap 7.80 scan initiated Fri Oct 27 10:20:00 2023 as: nmap --script smb-enum-shares -oN smb.txt 127.0.0.1
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00014s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds
Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\127.0.0.1\IPC$:
|     type: STYPE_IPC_HIDDEN
|     comment: Remote IPC
|     flags: 0x80000000
|   \\127.0.0.1\ADMIN$:
|     type: STYPE_DISKTREE
|     comment: Remote Admin
|     flags: 0x0
|_  \\127.0.0.1\C$:
|     type: STYPE_DISKTREE
|     comment: Default share
|     flags: 0x0
## Nmap done at Fri Oct 27 10:20:01 2023 -- 1 IP address (1 host up) scanned in 1.23 seconds

让我们分析一下输出:

  • \\127.0.0.1\IPC$:这是进程间通信共享,用于同一台机器上或跨网络的进程之间的通信。它通常是隐藏的(STYPE_IPC_HIDDEN),用于系统功能。
  • \\127.0.0.1\ADMIN$:这是管理共享,提供对 Windows 系统目录的访问权限。它通常由管理员用于远程管理。
  • \\127.0.0.1\C$:这是 C 盘的默认共享。它允许管理员远程访问整个 C 盘。

这些共享通常存在于 Windows 系统上。然而,审查它们的权限并确保它们得到妥善保护非常重要。例如,ADMIN$C$ 共享通常应该只对管理员可访问。如果这些共享对未经授权的用户可访问,可能会导致安全漏洞。

在下一步中,我们将把这些结果与横幅扫描进行比较,以收集有关目标系统的更多信息。

在 Xfce 终端中与横幅扫描结果进行比较

在这一步中,我们将使用 Nmap 执行一次横幅扫描,并将结果与前几步中的 SMB 共享枚举结果进行比较。横幅抓取使我们能够识别目标上运行的操作系统和服务,这可以为识别潜在漏洞提供有价值的信息。

首先,让我们使用 Nmap 在端口 445 上执行一次横幅扫描。打开你的 Xfce 终端并执行以下命令:

nmap -p 445 -sV 127.0.0.1

以下是该命令的分解:

  • nmap:网络扫描工具。
  • -p 445:指定端口 445,这是用于 SMB 的端口。
  • -sV:启用版本检测,它会尝试确定在目标端口上运行的服务和版本信息。
  • 127.0.0.1:这是目标 IP 地址,在这种情况下是本地主机。

该命令的输出将显示在端口 445 上运行的服务及其版本信息。例如,你可能会看到如下输出:

Starting Nmap 7.80 ( https://nmap.org ) at Fri Oct 27 10:25:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00014s latency).

PORT    STATE SERVICE      VERSION
445/tcp open  microsoft-ds Windows 10 Pro 19042 microsoft-ds

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 5.23 seconds

在这个例子中,横幅扫描显示目标运行的是 Windows 10 Pro 19042。此信息可用于识别特定于此操作系统版本的潜在漏洞。

现在,让我们将此信息与上一步中的 SMB 共享枚举结果进行比较。在上一步中,我们识别出了以下 SMB 共享:IPC$ADMIN$C$。我们还知道目标运行的是 Windows 10 Pro 19042。

通过结合这些信息,我们可以开始构建目标系统及其潜在漏洞的更完整图景。例如,我们可以研究 Windows 10 Pro 19042 中与 SMB 共享相关的已知漏洞,并确定目标系统是否易受攻击。

这种比较有助于我们确定工作的优先级,并专注于最可能的攻击途径。例如,如果我们在 Windows 10 Pro 19042 中发现一个允许未经授权访问 ADMIN$ 共享的已知漏洞,我们就可以集中精力利用这个漏洞。

总结

在这个实验中,我们探索了如何使用带有 smb-enum-shares 脚本的 Nmap 来枚举目标机器上的 SMB 共享。我们了解到 SMB 是一种网络文件共享协议,枚举共享可以揭示有关目标系统的有价值信息,包括可用资源和潜在漏洞。基本命令 nmap --script smb-enum-shares <目标 IP> 用于执行枚举。

此外,我们练习了指定目标端口(445)、使用 -v 标志增加详细程度以及使用 -oN 选项将输出保存到文件。最后,我们在 Xfce 终端中查看了 SMB 共享,并将结果与横幅扫描进行了比较,展示了收集有关 SMB 服务信息的不同方法。