Hash傳遞攻擊Windows2012遠程桌面
前言:小伙伴們還記得metasploit的模塊可以使用hash登錄windows么,可惜僅僅對XP,2003有效。本文會介紹一種使用hash登錄widnows2012R2服務器遠程桌面的方法。是的,你沒有看錯,使用Hash登錄遠程桌面!windows2012R2中文版測試通過!
windows2012R2采用了新版的遠程桌面協議(RDP).本文主要討論一下新版協議中的”受限管理員”(Restricted Admin)這個特性.相信滲透測試人員和系統管理員都會對這個特性有足夠的興趣,通過這個特性,我們可以實現哈希傳遞攻擊(Pass-the_Hash attacks).下面會先簡要介紹一下哈希傳遞攻擊,然后在windows2012R2上演示如何實現這樣一種攻擊.測試工具是我們在FreeRDP的基礎上修改的.
哈希傳遞攻擊簡介
簡單點說,哈希傳遞就是用戶登錄的時候使用密碼的哈希值代替密碼來完成認證.很多windows的協議都是需要用戶提供他們的密碼哈希值,并不一定非得需要用戶提供密碼.這一點在滲透測試過程中非常重要,因為發現用戶的密碼哈希比發現用戶的密碼容易多了.
對于8.1版的RDP大部分情況下都需要用戶提供他們的密碼.但是有一個例外,那就是受限管理員模式,這種情況下用戶可以使用他們的密碼哈系來登錄.
微軟發布過防御哈希傳遞攻擊的指南.
受限管理員模式
在windows2012R2運行”mstsc /?”命令,會給出如下對受限管理員模式的說明:
所以,開啟了受限管理員模式之后,一些恢復已登錄用戶明文密碼的工具比如minikatz就會失效了.基于這個理由,系統管理員肯定會被建議在2012的系統上開啟這個特性.它的缺點是這個RDP會話中向外的連接可能無法通過認證,比如映射共享文件夾.所以連接一個獨立的服務器的時候,這個特性很有用,連接一個跳板服務器的時候開啟這個特性就沒必要了.
RDP協議v8.1
2013年7月22日,微軟發布了RDP協議v8.1的特性說明.可以通過點擊”關于”來查看你的客戶端是否支持v8.1
我會簡單介紹一下新版協議中的有意思的地方,這樣你就不用花時間去讀微軟464頁的技術文檔了.
37頁的下方我們可以看到RDP客戶端可以發送一個RESTRICTED_ADMIN_MODE_REQUIRED 標志.我們的測試工具就是發送了這個標志.
同樣在這一頁上的說明是這樣的:”If the server supports this mode then it is
acceptable for the client to send empty credentials in the
TSPasswordCreds structure defined in MS-CSSP section 2.2.1.2.1.”(如果服務器支持這個模式,那么它會接受客戶端用TSPasswordCreds這個結構發送空的認證信息).所以我們的測試工具需要發送一個空域名,空用戶名,空密碼的TSPassword結構到服務器端.
概念證明:場景
想象我們正在一個內網環境中進行滲透測試.我們的目標是登錄一臺Windows2012R2的遠程桌面.這臺服務器是一個獨立的系統,而且開了防火墻,只允許RDP協議登錄.
這個網絡里還有一些其他的主機,其中一臺已經被我們攻破.使用fgdump(或者其他獲取hash的工具)獲取了管理員的密碼hash如下:
test:1001:NO PASSWORD*********************:36374BD2767773A2DD4F6B010EC5EE0D:::
我們假設這個密碼是一個非常變態的強密碼,無法破解它.這在以前是沒有辦法確實這個test賬戶是否能登錄我們的目標服務器的.不過在windows2012R2上,我們可以使用哈希傳遞攻擊,使用這個密碼hash來登錄服務器.
概念證明:實現
測試工具是我們在最新版的FreeRDP的基礎上修改的.最新版的FreeRDP支持了很多新的特性,比如:SSL和CredSSP(NLA),只需要稍微做一些修改就可以支持”受限管理員”模式了.
建立RDP連接,通常的命令如下:
$ xfreerdp -u test -p Portcullis1 192.168.226.129
在修改版的FreeRDP中,-p選項被改成了密碼hash,使用如下:
$ xfreerdp -u test -p 36374BD2767773A2DD4F6B010EC5EE0D 192.168.226.129
下圖是使用hash登錄的截圖,圖片下方是登錄使用的命令.
是的,就是這么簡單.不過這個可能要等2012R2普及之后才能顯示出它巨大的威力.
限制條件
受限管理員模式顧名思義,只對管理員組有效.所以如果你獲取到的用戶屬于遠程桌面用戶組,那么是無法通過hash登錄的.會提示如下的錯誤:
工具使用
原版的工具使用使用說明如下:
解壓工具包:
tar zxvf FreeRDP-pth.tar.gz (原參數寫成了cfz,應該是筆誤) cd FreeRDP
使用編譯好的二進制文件:
$ client/X11/xfreerdp -u test -p 36374BD2767773A2DD4F6B010EC5EE0D 192.168.226.129
重新編譯命令:
$ sh cmake.sh $ make
如果遇到編譯問題,可以參考FreeRDP的文檔.在Ubuntu12.04上測試通過.
測試心得
經過一番艱苦的斗爭,在不同的機器上反復測試,不斷失敗,最后完美的方法就是下載最新版FreeRDP,然后自己打補丁編譯.
git clone git://github.com/FreeRDP/FreeRDP.git cd FreeRDP wget http://labs.portcullis.co.uk/wp-content/uploads/2013/10/FreeRDP-pth.diff_.txt patch -p1 < FreeRDP-pth.diff_.txt cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_SSE2=ON . make