AS-REP Roasting & Kerberoast

AS-REP Roasting & Kerberoast

Kerberos

Kerberos 是一種基於加密 Ticket 的身份認證協議。Kerberos 主要由三個部分組成:Key Distribution Center (即KDC)、Client 和 Service

Kerberos認證協議的基礎概念:

票據(Ticket):是網絡對象互相訪問的憑證。 TGT(Ticket Granting Ticket):入場券,通過入場券能夠獲得票據,是一種臨時憑證的存在。

KDC: Key Distribution Center,密鑰分發中心,負責管理票據、認證票據、分發票據,但是KDC

不是一個獨立的服務,它由AS和TGS組成。

AS: Authentication Service,驗證服務,爲client生成TGT的服務

TGS: Ticket Granting Service,票據授予服務,爲client生成某個服務的ticket

TGT: Ticket Granting Ticket,入場券,通過入場券能夠獲得票據,是一種臨時憑證的存在。

Ticket:票據,是網絡中各對象之間互相訪問的憑證

AD: Account Database,存儲所有client的白名單,只有存在於白名單的client才能順利申請到

TGT。

DC: Domain Controller,域控

KRBTGT: 每個域控制器都有一個krbtgt賬戶,是KDC的服務賬戶,用來創建TGS加密的密鑰

域認證流程

  1. client向kerberos服務請求,希望獲取訪問server的權限。 kerberos得到了這個消息,首先得判斷client是否是可信賴的, 也就是白名單黑名單的說法。這就是AS服務完成的工作,通過 在AD中存儲黑名單和白名單來區分client。成功後,返回AS返 回TGT給client。
  2. client得到了TGT後,繼續向kerberos請求,希望獲取訪問 server的權限。kerberos又得到了這個消息,這時候通過client 消息中的TGT,判斷出了client擁有了這個權限,給了client訪 問server的權限ticket。
  3. client得到ticket後,終於可以成功訪問server。這個ticket只是 針對這個server,其他server需要向TGS申請。

  1. AS_REQ: Client向KDC發起AS_REQ,請求憑據是Client hash加密的時間戳

  2. AS_REP: KDC使用Client hash進行解密,如果結果正確就返回用krbtgt hash加密的TGT票據,TGT裏面包含PAC,PAC包含Client的sid,Client所在的組。

  3. TGS_REQ: Client憑藉TGT票據向KDC發起針對特定服務的TGS_REQ請求

  4. TGS_REP: KDC使用krbtgt hash進行解密,如果結果正確,就返回用服務hash 加密的TGS票據(這一步不管用戶有沒有訪問服務的權限,只要TGT正確,就返回TGS票據)

  5. AP_REQ: Client拿着TGS票據去請求服務

  6. AP_REP: 服務使用自己的hash解密TGS票據。如果解密正確,就拿着PAC去KDC那邊問Client有沒有訪問權限,域控解密PAC。獲取Client的sid,以及所在的組,再根據該服務的ACL,判斷Client是否有訪問服務的權限。

下面看到AS_REQ 、AS_REP圖解

客戶端需要發送自己的身份信息到KDC,身份信息中起碼包含用戶名,KDC根據用戶名在AD中尋找是否在白名單中,然後根據用戶名提取到對應的NTLM Hash。

KDC此時生成一個隨機字符串,叫Session Key,使用用戶名對應的NTLM Hash加密Session Key,作爲AS數據,使用KDC中某個用戶的NTLM Hash加密Session Key和客戶端的信息,生成TGT。KDC返回的TGT客戶端是無法解密的,因爲它沒有KDC Hash,也就是krbtgt用戶的hash。

第二步客戶端需要提供TGT與第一步中使用自己NTLM Hash解密出來的Session Key加密的客戶端信息跟時間戳。

如果假設這個數據被中間人竊取到,也無法在段時間內破解,因爲KDC會校驗時間戳。

KDC接到TGT與其他內容後,會首先解密TGT,只有KDC可以解密TGT,從TGT中提取到Session Key,再使用Session Key解密其他內容,解密出來的內容同TGT中的信息進行校驗來確認客戶端是否受信。

驗證通過後,就會生成一個新的Session Key,我們稱之爲Server Session Key,這個Server Session Key主要用於和服務器進行通信。同時還會生成一個Ticket,也就是最後的票據了。

AS-REP Roasting

對於域用戶,如果設置了選項”Do not require Kerberos preauthentication”(不要求Kerberos預身份驗證),此時向域控制器的88端口發送AS_REQ請求,此時域控會不作任何驗證便將 TGT 票據和加密的 Session-key 等信息返回。 對收到的AS_REP內容(enc-part底下的ciper,因爲這部分是使用用戶hash加密session-key,我們通過進行離線爆破就可以獲得用戶hash)重新組合,能夠拼接成”Kerberos 5 AS-REP etype 23”(18200)的格式,接下來可以使用hashcat對其破解,最終獲得該用戶的明文口令

Rubeus.exe asreproast  > 1.txt

在$krb5asrep後面添加$23拼接

 hashcat64.exe -m 18200 hash.txt pass.txt --force

工具會先從ldap拉取不需要kerberos預身份驗證勾選該選項的用戶,然後發送AS-REP

非域內機器可以使用以下命令抓取

Import-Module .\PowerView.ps1
Get-DomainUser victimuser | Convert-FromUACValue
Import-Module .\ASREPRoast.ps1
Get-ASREPHash -UserName Oadmin -Domain klion.local -Server 192.168.0.66 | Out-File -Encoding ASCII hash.txt

https://github.com/HarmJ0y/ASREPRoast

Kerberoast

Kerberoast攻擊,就是攻擊者爲了獲取目標服務的訪問權限,而設法破解Kerberos服務票據並重寫它們的過程。這是紅隊當中非常常見的一種攻擊手法,因爲它不需要與服務目標服務進行任何交互,並且可以使用合法的活動目錄訪問來請求和導出可以離線破解的服務票據,以獲取到最終的明文密碼。之所以出現這種情況,是因爲服務票據使用服務帳戶的散列(NTLM)進行加密,所以任何域用戶都可以從服務轉儲散列,而無需將shell引入運行該服務的系統中

Rubeus裏面的kerberoast支持對所有用戶或者特定用戶執行kerberoasting操作,其原理在於先用LDAP查詢於內的spn,再通過發送TGS包,然後直接打印出能使用 hashcat 或 john 爆破的Hash。 以下的命令會打印出註冊於用戶下的所有SPN的服務票據的hashcat格式。

Rubeus.exe kerberoast

Impacket

GetUserSPNs.exe -request klion.local/oadmin
GetUserSPNs.exe -request klion.local/oadmin -outputfile hashes.kerberoast

 hashcat64.exe -m 18100 hash.txt pass.txt --force
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章