SMB - Server Message Block

Server Message Block

SMB Basic information

Server Message Block( SMB) 是一种客户端-服务器协议,用于管理对文件和整个目录以及其他网络资源(例如打印机、路由器或为网络发布的接口)的访问。不同系统进程之间的信息交换也可以基于SMB协议来处理。SMB首先向更广泛的公众开放,例如作为 OS/2 网络操作系统 LAN Manager 和 LAN Server 的一部分。从那时起,该协议的主要应用领域一直是Windows操作系统系列,其网络服务以向下兼容的方式支持SMB——这意味着具有较新版本的设备可以轻松地与具有旧版Microsoft操作系统的设备进行通信系统已安装。通过免费软件项目 Samba,还有一个解决方案可以在 Linux 和 Unix 发行版中使用 SMB,从而通过 SMB 进行跨平台通信。

SMB 协议使客户端能够与同一网络中的其他参与者进行通信,以访问网络上与之共享的文件或服务。另一个系统还必须实现网络协议并使用 SMB 服务器应用程序接收和处理客户端请求。然而在此之前,双方必须建立连接,这就是为什么他们首先交换相应的消息。

在 IP 网络中,SMB 使用 TCP 协议来实现此目的,该协议在最终建立连接之前提供客户端和服务器之间的三向握手。TCP 协议的规范还管理着后续的数据传输。我们可以在这里看一些例子。

SMB 服务器可将其本地文件系统的任意部分作为共享提供。因此,客户端可见的层次结构部分独立于服务器上的结构。访问权限由Access Control Lists(ACL)定义。可以根据单个用户或用户组的executereadfull access 等属性对访问权限进行细粒度控制。ACL 是基于共享定义的,因此与服务器上本地分配的权限并不一致。

Samba Basic information

如前所述,SMB 服务器有一个替代变体,称为 Samba,是为基于 Unix 的操作系统开发的。Samba 实现Common Internet File System( CIFS) 网络协议。CIFS是SMB的一种“方言”。换句话说,CIFS 是 SMB 协议的一种非常具体的实现,而 SMB 协议又是由 Microsoft 创建的。这允许 Samba 与较新的 Windows 系统进行通信。因此,通常将其称为SMB / CIFS

不过,CIFS 是 SMB 协议的扩展。因此,当我们通过 Samba 向旧版 NetBIOS 服务传递 SMB 命令时,它通常会通过 TCP 端口 137、138 139 连接到 Samba 服务器,但 CIFS 只使用 TCP 端口 445。SMB 有多个版本,包括仍在特定基础设施中使用的过时版本。

SMB Version

Supported

Features(特征)

CIFS

Windows NT 4.0

通过 NetBIOS 接口进行通信

SMB 1.0

Windows 2000

通过 TCP 直接连接

SMB 2.0

Windows Vista、Windows Server 2008

性能升级、改进的消息签名、缓存功能

SMB 2.1

Windows 7、Windows Server 2008 R2

锁定机制

SMB 3.0

Windows 8、Windows Server 2012

多通道连接、端到端加密、远程存储访问

SMB 3.0.2

Windows 8.1、Windows Server 2012 R2

SMB 3.1.1

Windows 10、Windows Server 2016

完整性检查、AES-128 加密

在Version 3 中,Samba 服务器获得了成为 Active Directory 域的正式成员的能力。在第 4 版中,Samba 甚至提供了 Active Directory 域控制器。为此,它包含几个所谓的守护进程(Unix 后台程序)。属于 Samba 的 SMB 服务器守护进程(smbd)提供了前两个功能,而 NetBIOS 消息块守护进程(nmbd)实现了后两个功能。SMB 服务控制着这两个后台程序。

我们知道,Samba 既适用于 Linux 系统,也适用于 Windows 系统。在网络中,每台主机都参与同一个workgroup。工作组是一个组名,用于标识 SMB 网络上的任意计算机集合及其资源。任何时候,网络上都可能有多个工作组。IBM 为联网计算机开发了一个application programming interface (API),称为Network basic Input/Output System (NetBIOS)

NetBIOS 应用程序接口为应用程序提供了与其他计算机连接和共享数据的蓝图。在 NetBIOS 环境中,当一台机器上线时,它需要一个名称,这需要通过所谓的name registration程序来完成。要么每台主机在网络上保留自己的主机名,要么为此使用 NetBIOS 名称服务器NBNS)。Windows Internet 名称服务WINS)也增强了这一功能。

默认配置

Setting

Description 描述

[sharename]

网络共享的名称。

workgroup = WORKGROUP/DOMAIN

客户查询时会出现的工作组。

path = /path/here/

将授予用户访问权限的目录。

server string = STRING

启动连接时将显示的字符串。

unix password sync = yes

是否将 UNIX 密码与 SMB 密码同步?

usershare allow guests = yes

允许未经身份验证的用户访问定义的共享吗?

map to guest = bad user

当用户登录请求与有效的 UNIX 用户不匹配时该怎么办?

browseable = yes

该股票是否应该显示在可用股票列表中?

guest ok = yes

允许在不使用密码的情况下连接到服务吗?

read only = yes

只允许用户读取文件?

create mask = 0700

新创建的文件需要设置什么权限?

危险环境

Setting

Description 描述

browseable = yes

允许在当前股票中列出可用股票吗?

read only = no

禁止创建和修改文件?

writable = yes

允许用户创建和修改文件?

guest ok = yes

允许在不使用密码的情况下连接到服务吗?

enable privileges = yes

是否尊重分配给特定 SID 的特权?

create mask = 0777

必须为新创建的文件分配哪些权限?

directory mask = 0777

必须为新创建的目录分配哪些权限?

logon script = script.sh

用户登录时需要执行什么脚本?

magic script = script.sh

脚本关闭时应该执行哪个脚本?

magic output = script.out

魔术脚本的输出需要存储在哪里?

Restart Samba

SMBclient - 连接到Share

Samba 服务器上现在有五个不同的共享。因此,正如我们已经看到的,print$和 anIPC$已经默认包含在基本设置中。由于我们处理共享[notes]

RPCclient

Query 询问

Description 描述

srvinfo

服务器信息。

enumdomains

枚举网络中部署的所有域。

querydominfo

提供已部署域的域、服务器和用户信息。

netshareenumall

枚举所有可用的共享。

netsharegetinfo <share>

提供有关特定共享的信息。

enumdomusers

枚举所有域用户。

queryuser <RID>

提供有关特定用户的信息。

Rpcclient - 用户枚举

暴力破解用户 RID

Impacket - Samrdump.py

smbmap

crackmapexec

Enum4Linux-ng - 安装

Enum4Linux-ng - 枚举

最后更新于

这有帮助吗?