非主流***之會話劫持winnt/2k HASH

聲明:
本文只是在技術上分析如何來通過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會話劫持的實現,相關問題請查閱參考文檔。因爲***方法複雜,並且需要一定的基礎,所以,掌握的人並不多。我已經儘量寫地簡單,只要按照以上的步驟去做就能實現,具體的代碼實現就不寫了,有興趣的朋友自己去研究吧。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章