本文介绍一下SMB协议的交互过程。由于SMB涉及非常多的字段,绝大多数人员没有必要对每个字段进行深入的了解(那可能更多的是协议开发人员需要做的工作)。对于SMB协议的学习,主要的目的是能够根据数据包的交互过程,还原出这次SMB交互干了什么,产生了哪些操作。因此本文聚焦于讲解SMB最主要的字段和功能。本文为了和后续的SMB2进行区分,特意使用了SMB1。事实上在wireshark中使用SMB来表示SMB1,这点需要注意下。
本文将以一次文件写入为例,即从本地向远端写入文本文件为例进行说明。
拷贝操作
在windows之中,执行copy命令,即会将本地文件拷贝到远端服务器,如下图1所示:
图1
图1中会将本地D盘的temp.txt文件写入到远程的SMB服务器中,其写入过程会用到SMB协议,以及其中的多个命令。
交互过程
本文使用的pcap数据来自于wireshark sample,这里,对应smbtorture.cap.gz数据包中的tcp.stream eq 1
流。
关于向远程SMB服务器写入文件过程中,产生的SMB流量整体的交互过程如下图2所示: