![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiY4ETZhJzNx0TZjJXdvN3PnBnaucHM0QTMfJGOwEWOxkjN0QzN0MmNyU2NwUTMhJ2M5I2YklDM1kzYtIjdvwVbvNmLn1WaopnLyMWaw9CXvwlOzBHd0hWPsJXdmYDM3YjZkJGNzQDNl1SOhRGOtETMiVWLlJTMz0SNlJGO3QDZ10DZpV3ZmITPlBXe0ZyPldWYtl2LcdXZpZ3Lc12bj5SZjVjL5h3byBnLxATLn1Wavw1LcpDc0RHaiojIsJye.jpg)
一、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工作原理
01首先用戶端發送一個SMB negprot請求資料報,并列出它所支援的所有SMB協定版本。伺服器收到請求資訊後響應請求,并列出希望使用的協定版本。如果沒有可使用的協定版本則傳回0XFFFFH,結束通信。
02協定确定後,用戶端程序向伺服器發起一個使用者或共享的認證,這個過程是通過發送SesssetupX請求資料報實作的。用戶端發送一對使用者名和密碼或一個簡單密碼到伺服器,然後伺服器通過發送一個SesssetupX應答資料報來允許或拒絕本次連接配接。
03當用戶端和伺服器完成了磋商和認證之後,它會發送一個Tcon或TconX SMB資料報并列出它想通路網絡資源的名稱,之後伺服器會發送一個TconX應答資料報以表示此次連接配接是否被接受或拒絕。
04連接配接到相應資源後,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賬戶名和密碼
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、最後就可以進行讀寫操作。
原文連結