目錄:
1.SMB概述
2.SMB原理
3.SMB配置
一、SMB概述
SMB(全稱是Server Message Block)是一個協議名,可用於在計算機間共享文件、打印機、串口等,電腦上的網上鄰居就是靠它實現的。
SMB 是一種客戶機/服務器、請求/響應協議。通過 SMB 協議,客戶端應用程序可以在各種網絡環境下讀、寫服務器上的文件,以及對服務器程序提出服務請求。此外通過 SMB 協議,應用程序可以訪問遠程服務器端的文件、以及打印機等資源。
SMB一開始的設計是在NetBIOS協議上運行的,而NetBIOS本身則運行在NetBEUI、IPX/SPX或TCP/IP協議上。
NetBIOS 使用下列端口:UDP/137(NetBIOS 名稱服務)、UDP/138(NetBIOS 數據報服務)、TCP/139(NetBIOS 會話服務);SMB 使用下列端口:TCP/139、TCP/445。 #NetBIOS用於局域網內主機名發現。
二、SMB服務工作原理
① 首先客戶端發送一個SMB negprot請求數據報,並列出它所支持的所有SMB協議版本。服務器收到請求信息后響應請求,並列出希望使用的協議版本。如果沒有可使用的協議版本則返回0XFFFFH,結束通信。
② 協議確定后,客戶端進程向服務器發起一個用戶或共享的認證,這個過程是通過發送SesssetupX請求數據報實現的。客戶端發送一對用戶名和密碼或一個簡單密碼到服務器,然后服務器通過發送一個SesssetupX應答數據報來允許或拒絕本次連接。
③ 當客戶端和服務器完成了磋商和認證之后,它會發送一個Tcon或TconX SMB數據報並列出它想訪問網絡資源的名稱,之后服務器會發送一個TconX應答數據報以表示此次連接是否被接受或拒絕。
④ 連接到相應資源后,SMB客戶端就能夠通過open SMB打開一個文件,通過read SMB讀取文件,通過write SMB寫入文件,通過close SMB關閉文件。
抓包分析如下:
實驗環境,win10(客戶端)開啟SMB協議,win7(SMB協議服務端)開啟SMB協議並建立一個共享文件的夾,用於測試SMB協議的通信過程
1.開啟SMB協議
2.服務端創建一個共享文件夾
3.客戶端開啟抓包,通過UNC路徑訪問共享文件夾,輸入用戶名和密碼
4.可以分析SMB工作原理
4.1首先客戶端發送一個SMB negotiate protocol request請求數據報,並列出它所支持的所有SMB協議版本
4.2服務器收到請求信息后響應請求,並列出希望使用的協議版本。如果沒有可使用的協議版本則返回0XFFFFH,結束通信。可以看到下圖服務端希望使用的版本是SMB2.1 注意:win7雖然默認開啟smbv1(只要開啟共享服務),但是由於windows的安全機制,版本協商就高不就低,除非客戶端版本只有SMBv1或者服務端只有SMBv1,這里就可以利用了:客戶端可以惡意把版本設置為只能是SMBv1,這樣服務端和客戶端協商通過只能用SMBv1了。
版本對應關系如下:
0x0202 SMB 2.002
0x0210 SMB 2.1
0x0300 SMB 3.0
0x0302 SMB 3.02
0x02FF SMB2
4.3協議確定后,客戶端進程向服務器發起一個用戶或共享的認證,這個過程是通過發送session setup request請求數據報實現的。客戶端發送一對用戶名和密碼或一個簡單密碼到服務器。
4.5然后服務器通過發送一個Session setup response應答數據報來允許或拒絕本次連接。
4.6當客戶端和服務器完成了磋商和認證之后,它會發送一個Tree connect rerquest SMB數據報並列出它想訪問網絡資源的名稱
4.7之后服務器會發送一個tree connect response應答數據報以表示此次連接是否被接受或拒絕
4.8連接到相應資源后,SMB客戶端就能夠干一些讀、寫(需要有權限)等操作了
三、SMB服務配置管理
1.啟動網絡共享,見上面的圖
2. Windows 7、Windows Server 2008 上檢測是否開啟SMB
SMB 服務器上的 SMB v1:powershell 方法 默認啟用,(未創建注冊表項),所以不會返回 SMB1 值
2.1檢測:Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}
2.2禁用SMB1 #這是再檢測就可以看到有SMB1,因為禁用是在修改注冊表
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force
2.3啟用SMB1 #就是修改注冊表的SMB對應的為1
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 –Force
2.4檢測SMBV2和v3,禁用和啟用和上面的方法一樣。
注冊表編輯器:
若要在 SMB 服務器上啟用或禁用 SMBv1,請配置以下注冊表項:
注冊表子項:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
注冊表項: SMB1
REG_DWORD: 0 = 已禁用
REG_DWORD: 1 = 已啟用
默認值: 1 = 已啟用(未創建注冊表項)
若要在 SMB 服務器上啟用或禁用 SMBv2,請配置以下注冊表項:
注冊表子項:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
注冊表項: SMB2
REG_DWORD: 0 = 已禁用
REG_DWORD: 1 = 已啟用
默認值: 1 = 已啟用(未創建注冊表項)
注意進行這些更改后,必須重啟計算機。
3.設置把WIN7的SMBV2禁用掉(這時只留下SMBV1了),測試客戶端和服務端是否協商用smbv1版本進行通信。
4.抓包分析文件共享過程,這里只分析客戶端發送協商之后,服務器響應給的版本,其他過程和上面的分析類似。