[Wireshark] 觀察 SMB 掛載目錄失敗的封包
最近在看一本書「實戰 Wireshark:網路分析其實很簡單」,
覺得寫的不錯,算是淺顯易懂,對於封包的分析也有點興趣了~
正好今天想從 Mac 去連公司的一個 SMB 伺服器時遇到了錯誤,就想說來研究看看:
其實從上面的錯誤訊息裡面就已經是寫說沒有權限存取了,
不過我們可以從網路封包的內容也看出這一點,來試試看吧~
1. 設定 Filter
先設定只看跟遠端伺服器 IP 相關的封包,免得混亂,
本例中的 SMB server 是 10.204.16.2,因此就設定 ip.addr == 10.204.16.2 的 filter:
2. 觀察 SMB 登入的流程
前面三個封包是 TCP 的 three-way handshake,
接著分別有個 SMB 和 SMB2 的 Negotiate Protocol Request,
後來的 Session Setup Request 看起來是要建 session 了,
但伺服器傳回了 STATUS_MORE_PROCESSING_REQUIRED,看來是要通過 NTLM 的驗證機制才行:
接著就開始 NTLM authentication… 下面可以看到我們登入使用的 Domain 和 User name:
從 Response 來看,結果是 accept-completed,應該是代表登入成功了:
3. 觀察存取 SMB 目錄的流程
首先會先發出一個 Tree Connect Request,指定要存取的目錄,
像在本例中是 10.204.16.2BUILD,從 Response 來看應該也是成功了:
接下來會發一個 Create Request File 來存取目錄 (像本例中的 xxxOutputIMAGE),
可以看到 Response 回了一個 STATUS_ACCESS_DENIED 存取被拒,
接著就發出 Tree Disconnect 中斷連線了:
由上面的網路封包可以知道,我們用來登入 SMB server 的帳號密碼是正確的,
因此可以通過 NTLM 的驗證~
但是在存取目錄時,出現了 ACCESS_DENIED 錯誤,表示權限不足~
看一下存取目錄成功的例子,作個比較吧~
下面的例子是存取 Sandbox 這個目錄時,同樣發出一個 Create Request File,
但此時 Response 回應的是 STATUS_SUCCESS,
同時也說明了檔案存在並且開啟成功 (The file existed and was opened),
下面的 File Id 也給了這個檔案的對應 handle,表示檔案存取是成功的:
有興趣了解更多 SMB 細節的話,可以參考一下:
MSDN: Connecting to a Share by Using a Multi-Protocol Negotiate
像這樣分析一下封包,感覺挺有趣的,對於網路下發生的細節也有多一點的了解囉~^^