有多种方法可以在同一网络上的两台主机(计算机)之间传输文件。在此示例中研究了其中一个协议,即 SMB(服务器消息块)。此通信协议提供对网络上端点之间的文件、打印机和串行端口的共享访问。

使用 SMB 协议,应用程序(或应用程序的用户)可以访问远程服务器上的文件以及其他资源(如打印机)。因此,客户端应用程序可以读取、创建和更新远程服务器上的文件。它还可以与设置为接收 SMB 客户端请求的任何服务器程序进行通信。

网络上启用了 SMB 的存储称为共享 。这些可以由具有服务器地址和正确凭据的任何客户端访问。与许多其他文件访问协议一样,SMB 需要一些安全层才能在网络拓扑中正常运行。如果 SMB 允许客户端在共享上创建、编辑、检索和删除文件,则显然需要身份验证机制。在用户级别,SMB 客户端需要提供用户名/密码组合才能查看 SMB 共享的内容或与之交互。

与往常一样,我们一旦拿到目标IP地址,就会扫描目标。扫描目标开放的端口服务信息

nmap -sV 10.129.193.138

SMB协议读取文件 python smb协议详解_服务器

-sV:探测打开的端口以确定服务/版本信息

我们观察到 SMB 的端口 445 TCP 已启动并正在运行,这意味着我们有一个可以探索的活动共享。将此共享视为可通过互联网访问的文件夹。

为了在远程系统上成功枚举共享内容,我们可以使用名为 smbclient 的脚本 。安装smbclient

apt-get install smbclient

SMB协议读取文件 python smb协议详解_服务器_02

我们的下一步是开始枚举在这两种情况下在目标上找到的共享的内容。

Smbclient 将尝试连接到远程主机并检查是否需要任何身份验证。如果有,它将要求您输入本地用户名的密码。我们应该注意到这一点。如果我们在尝试连接到远程主机时没有为 smbclient 指定特定的用户名,它将仅使用本地计算机的用户名。这是您当前登录到虚拟机时使用的那个。这是因为SMB身份验证始终需要用户名。

假设我们是一个合法的远程用户,试图登录他们的资源,我们会知道我们的用户名和密码,并正常登录以访问我们的共享。但是当我们没有这样的凭据,我们将尝试执行以下任何一项:

来宾身份验证 

匿名身份验证

其中任何一个都将导致我们在不知道正确的用户名/密码组合并看到存储在共享上的文件的情况下登录。让我们继续尝试一下。我们将密码字段留空,只需enter进入,点击以告诉脚本继续前进。

smbclient -L 10.129.193.138

SMB协议读取文件 python smb协议详解_服务器_03

[-L|–列表 =主机] :为连接请求选择目标主机。

运行上面的命令,我们看到显示了四个单独的共享。让我们逐一介绍它们,看看它们的含义。

ADMIN$ - 管理共享是由 Windows NT 系列操作系统创建的隐藏网络共享,允许系统管理员远程访问网络连接系统上的每个磁盘卷。这些共享可能不会永久删除,但可能会被禁用。
C$ - C:\ 的管理共享磁盘卷。这是托管操作系统的位置。
IPC$ - 进程间通信共享。用于通过命名管道进行进程间通信,并且不是文件系统的一部分。
WorkShares - 自定义共享。

我们将尝试连接到IPC$,这对我们来说没有价值,因为它是不像任何常规目录那样可浏览,并且不包含我们可以在学习体验的这个阶段使用的任何文件。我们将使用与以前相同的策略,尝试在没有正确凭据的情况下登录,以查找任何这些共享上配置不正确的权限。我们只给出一个空密码

smbclient \\\\10.129.193.138\\ADMIN$

SMB协议读取文件 python smb协议详解_bc_04

NT_STATUS_ACCESS_DENIED是输出,让我们知道我们没有正确的凭据

smbclient \\\\10.129.193.138\\C$

SMB协议读取文件 python smb协议详解_网络_05

最后的机会。我们继续尝试登录到自定义。这似乎是人为的,因此容易配置错误。

smbclient \\\\10.129.193.138\\WorkShares

SMB协议读取文件 python smb协议详解_SMB协议读取文件 python_06

成功!SMB 共享配置不当,允许我们在没有适当权限的情况下登录

help

与服务交互。我们可以使用该命令来查看我们可以在此 shell 中执行哪些操作。

SMB协议读取文件 python smb协议详解_服务器_07

ls : 列出共享 cd:更改共享中的当前目录

get : 下载共享出口内的目录内容 exit: 退出 smb 外壳

从输出中,我们可以注意到Linux中习惯的大多数命令都存在。我们将使用以下命令来导出共享文件:

ls
cd Amy.J
ls
get worknotes.txt

SMB协议读取文件 python smb协议详解_网络_08

cd ..
ls
cd James.P
ls
get flag.txt

SMB协议读取文件 python smb协议详解_bc_09

ls
cat worknotes.txt
cat flag.txt

SMB协议读取文件 python smb协议详解_bc_10