一、SMB概述
SMB(ServerMessage Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。SMB使用了NetBIOS的应用程序接口 (ApplicationProgram Interface,简称API),一般端口使用为139,445。另外,它是一个开放性的协议,允许了协议扩展——使得它变得更大而且复杂;大约有65个最上层的作业,而每个作业都超过120个函数,甚至Windows NT也没有全部支持到,最近微软又把 SMB 改名为 CIFS(CommonInternet File System),并且加入了许多新的特色。
SMB协议是一个很重要的协议,目前绝大多数的PC上都在运行这一协议,windows系统都充当着SMB协议的客户端和服务器,所以SMB是一个遵循客户机服务器模式的协议。SMB服务器负责通过网络提供可用的共享资源给SMB客户机,服务器和客户机之间通过TCP/IP协议、或者IPX协议、或者是NetBEUI进行连接。
SMB是应用层(和表示层)协议,使用C/S架构,其工作的端口与其使用的协议有关。
当远程连接计算机访问共享资源时有两种方式:
★共享计算机地址\共IP享资源路径
★共享计算机名\共享资源路径
其中,使用计算机名访问时,SMB服务工作在NetBIOS协议之上,用的是TCP的139端口;使用IP地址访问时,用的是TCP的445端口。
二、SMB工作原理
- 首先客户端发送一个SMB negprot请求数据报,并列出它所支持的所有SMB协议版本。服务器收到请求信息后响应请求,并列出希望使用的协议版本。如果没有可使用的协议版本则返回0XFFFFH,结束通信。
- 协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送SesssetupX请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器,然后服务器通过发送一个SesssetupX应答数据报来允许或拒绝本次连接。
- 当客户端和服务器完成了磋商和认证之后,它会发送一个Tcon或TconX SMB数据报并列出它想访问网络资源的名称,之后服务器会发送一个TconX应答数据报以表示此次连接是否被接受或拒绝。
- 连接到相应资源后,SMB客户端就能够通过open SMB打开一个文件,通过read SMB读取文件,通过write SMB写入文件,通过close SMB关闭文件。
三、抓包分析SMB服务的具体过程
环境搭建
服务端:Windows7虚拟机一台(账户名:SoisMoooo;密码:111)
客户端:Windows10计算机一台(安装Wireshark)
windows7的IP:192.168.135.130
Windows10的IP:192.168.135.1
A.开启SMB协议
1、服务端(windows7)开启SMB协议,并建立一个共享文件夹:
2、客户端(windows10)开启SMB协议:
3、输入:\\192.168.135.130\共享文件夹
填写Windows7账户名和密码
B.抓包分析工作
1、TCP三次握手建立连接
2、SMB协商过程:
首先客户端发送一个SMB negotiate protocol request请求数据报,并列出它所支持的所有SMB协议版本
0x0202 SMB 2.002
0x0210 SMB 2.10
0x0300 SMB 3.0
0x0302 SMB 3.02
0x0311 SMB 3.11
3、通过上图Response包可以看到,希望服务端使用的版本是SMB 2.10
协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送session setup request请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器。
4、然后服务器通过发送一个Session setup response应答数据报来允许或拒绝本次连接。
5、当客户端和服务器完成了磋商和认证之后,它会发送一个Tree connect rerquest SMB数据报并列出它想访问网络资源的名称。
之后服务器会发送一个tree connect response应答数据报以表示此次连接是否被接受或拒绝
6、最后就可以进行读写操作
来源:freebuf.com 2020-11-04 09:43:21 by: 龙渊实验室LongYuanLab
请登录后发表评论
注册