聲明:
本文只是在技術上分析如何來通過sniffer來劫持winnt/2k的hash,對此文可能造成的危害不負任何責任。
引言:
近來SMB會話劫持的討論占據了個大技術論壇不少的位置,吸引了不少人的目光,同時綠盟月刊37期、Phrack雜志60期和安全焦點峰會也刊登出了相關的文章,使得SMB會話劫持成為一個熱點。由于是window設計上的缺陷,這是一種無法察覺又非常可怕的攻擊方法。本文試圖從SMB數據包分析的角度來說明如何截獲winnt/2k的hash,具體的實現就不公布了,請讀者牢記前面的聲明。
說明:
為了使文章有針對性,關于SMB協議以及SMB會話過程就不談了,用到的時候會一帶而過,感愛好的朋友請自行查詢附錄中的參考文檔。文中提到的數據包假如沒有非凡說明都是通過Sniffer PRo截獲到的,并且為了分析方便,去掉了物理幀頭、ip頭和TCP頭,只留下NETB和SMB部分。
正文:
假設兩臺機器,一臺為Client A,一臺為SMBServer B。
一、session的建立:
設法讓A去訪問B的特定資源,產生一個NETBIOS會話。A發送Session request,其中包括經過編碼的NETBIOS名字。B在139端口監聽連接,收到A的request后,B發送Session confirm,其中沒有任何內容。這樣就建立了一個有效的session。其中Session request數據包的NETB Type為0x81,Session confirm數據包的NETB Type為0x82,可以在程序中通過判定這兩個標志來確定是否產生一個有效的session,然后就可以想辦法截獲SMB包了。
二、Challenge的獲得:
當有效的session建立后,就開始進行連接的確認工作了,從這一步中可以得到B發送給A的由B隨機產生的Challenge。
過程如下:A向B發送一個身份認證的請求,B隨機產生一個8字節的Challenge發送給A,這個Challenge就包含在B發回給A的Server Response數據包中。用Sniffer pro截獲這個包后,去掉物理幀頭、IP頭和TCP頭,再去掉4個字節的NETB頭,剩下的就是SMB包的內容,再去掉33個字節長的SMB Reponse header,然后向后做36個字節的偏移,下面的就是長度為8個字節的Challenge。這樣就得到了我們需要的服務器隨機產生的Challenge。
(由于本文的目的在于散列截獲的實現,所以數據包內個字節內容的具體含義不做任何解釋,只說明位置,下文也遵循這個原則。想深入了解的朋友請參閱附錄的參考文檔)
三、LM&NT HASH的獲得:
A得到B發回的用于加密口令的Challenge后,向B發送建立空連接的請求,B返回Server Response包,此時IPC空連接成功建立。A然后發送LM&NT HASH給B,請求訪問特定的資源,等待B的答應。我們需要做的就是截獲A發送的這個SMB包。下面來看怎么拆解出HASH,還是去掉物理幀頭、IP頭和TCP頭,再去掉4個字節的NETB頭,剩下的就是SMB包的內容,再去掉33個字節長的SMB Reponse header,然后向后做28個字節的偏移,下面的24個字節的內容就是LM HASH,緊接著的24個字節就是NT HASH。現在我們就獲得了A主機的LM HASH和NT HASH。
四、HASH的破解
前面已經獲得了Challenge、LM HASH和NT HASH,現在我們做成lc文件格式,下面就是導入lc4來暴力破解了。lc的文件格式如下:
192.168.0.244 ADMINIST-7Z6A4E/Administrator:"":"":89E5E3F54A998398DC36E89DDD37334C801201CA39C9A5D3:8457623684F27A5EFA5FE7B647E87C36D78616F80594123C:E3A96FF4507B9EDF
后面的三列數字分別為LM HASH、NT HASH、Challenge。
五、總結
本文旨在于討論winnt/2k下SMB會話劫持的實現,相關問題請查閱參考文檔。因為入侵方法復雜,并且需要一定的基礎,所以,把握的人并不多。我已經盡量寫地簡單,只要按照以上的步驟去做就能實現,具體的代碼實現就不寫了,有愛好的朋友自己去研究吧。
參考文檔:
1. SMB/CIFS BY THE ROOT 作者:ledin 翻譯整理:TOo2y
2. SMB系列(5)--LM/NTLM驗證機制 作者:小四
3. 應用SMB/CIFS協議 作者:ilsy
新聞熱點
疑難解答