Kerberos協議及其利用

前言

之前就一直想着抽空學學內網滲透相關的東西,無奈被各種事情耽擱。。。剛好這兩天閒下來,就把之前留的坑填一下。

本文涉及相關實驗:Kerberos網絡認證協議搭建與分析 (本實驗主要介紹了windows server2003系統的域和DNS服務器的搭建,通過本實驗的學習學會kerberos網絡認證協議搭建方式。)

Kerberos協議原理

啥是Kerberos?

一種雙向的網絡身份認證協議,通過使用加密技術爲客戶端/服務端應用程序提供強大的認證服務

基本概念

  • Principal 安全個體,具有唯一命名的客戶端或服務器。命名規則:主名稱+實例+領域,如:herlocky/[email protected]

  • TGT 票據授予票據(Ticket Granting Ticket),包含客戶端ID、客戶端網絡地址、票據有效期以及client/TGS會話密鑰

  • Ticket 票據,一條包含客戶端標識信息、會話密鑰和時間戳的記錄,客戶端用它來向目標服務器認證自己

  • Session key 會話密鑰,指兩個安全個體之間使用的臨時加密祕鑰,其時效性取決於單點登錄的會話時間長短

  • KDC Key分發中心(key distribution center),是一個提供票據(tickets)和臨時會話密鑰(session keys)的網絡服務。KDC服務作爲客戶端和服務器端信賴的第三方,爲其提供初始票據(initial ticket)服務和票據授予票據(ticket-granting ticket)服務,前半部分有時被稱爲AS,後半部分有時則被稱爲TGS

  • AS 認證服務器(Authentication Server),KDC的一部分。通常會維護一個包含安全個體及其祕鑰的數據庫,用於身份認證

  • TGS 許可證服務器(Ticket Granting Server),KDC的一部分,根據客戶端傳來的TGT發放訪問對應服務的票據

  • SS 特定服務的提供端(Service Server)

如何運作?

放一張圖片可能比較好理解一些:

1.(在開啓Kerboers協議的基礎上)當客戶端想訪問服務器上的資源時,需要先向KDC發送認證請求,在發送認證請求的時候會根據自己的密碼生成密鑰,用密鑰將發送的時間戳進行加密。(加密作用在於防止別人獲取到信息後進行重放攻擊)

2.1 KDC在接受到請求後,會先查看AS中是否有該賬戶的信息,使用相對應解密算法將時間戳解密,完成了A的身份認證。這裏解釋一下爲啥會用到時間戳:因爲在傳輸過程中,可能會被黑客進行截獲,黑客在截獲後如果想騙取認證的話需要進行數據包的再次發送,也就是重放攻擊。重放攻擊需要耗費一定時間,如果用時間戳作爲衡量標準的話,當KDC解出時間戳和當前時間差別過大時,就不會再繼續認證。

2.2 上文說到Kerboers是雙向的認證,2.1是客戶端向KDC證實身份,現在需要KDC向客戶端證明身份。首先,KDC會生成一把專門用於KDC與A之間通信的密鑰,並且用密鑰加密自身,得到的這個玩意兒就是TGT。之後將時間戳、KDC生成的密鑰、隨機字符串使用客戶端生成的密鑰進行加密。

2.3.客戶端在收到消息後,會使用自己最初生成的密鑰來解密密文,得到KDC的密鑰,並且證實其身份。

3.1 接下來客戶端需要向KDC去認證服務器的身份,於是會將之前的TGT和KDC的密鑰加密的信息與時間戳以及新的消息發送給KDC,KDC收到消息後會將TGT解密拿到密鑰和加密的信息,達到驗證客戶端的目的。

4 KDC生成新的密鑰 ,新密鑰供客戶端與服務器通信時使用,並且該密鑰和客戶端的信息會被服務器的密鑰進行加密形成票據,原KDC生成的密鑰對新密鑰進行加密後,將票據和生成的新密文發送給客戶端

5.1 客戶端拿着KDC生成的新密鑰加密信息和時間戳,再外加一個票據(TGS)去請求服務器

5.2 服務器用自己的私鑰解開票據,拿到客戶端和服務器之間的密鑰以及信息,接着用該密鑰解密客戶端發來的密文,如果驗證爲真,就會將時間戳用客戶端和服務器之間的密鑰進行加密發給客戶端。

6 客戶端接收到服務器發送的信息後,解密查看時間戳完成對B的身份校驗,完成認證過程。

---------------------------------------------------------------------------------------------------分隔符---------------------------------------------------------------------------------------------------------

用大白話來說可能會容易理解Kerboers協議,比如在學校的機房裏(假設爲域控環境),如果用戶想在任意一臺主機上進行操作,只需要有一個賬戶名密碼即可。該賬戶名密碼存於域控制器中,有別於我們平時使用的工作組,用戶名密碼不通過本機驗證,身份驗證是採用Kerberos協議在域控制器上進行的,登陸到此計算機(如telnet)則是通過SAM來進行NTLM驗證。

記錄一次不心酸的AD域控搭建

環境

VMware虛擬機:Windows 2012 R2,Windows 7

過程

搭建起來沒想象中的複雜,主要是把服務器上的AD域和DNS服務器安裝好,處理好服務器和主機之間互通的問題

直接按照這個博客搭建即可域環境搭建,過程不再贅述。搭建域控環境目的還是爲了復現Kerberos協議中的兩種利用方式。

白銀票據

原理

先拽一波英文,Silver Ticket(白銀票據)主要是利用TGS,即六步認證過程中的第五步,客戶端拿着票據向服務器中的某個服務發起請求,這時候的票據格式是這樣的:

Ticket=Server Hash(Server Session Key+Client info+End Time)

利用服務器端生成的密鑰對Server Session Key、客戶端的消息以及時間戳進行加密。因爲服務器沒有收到Server Session Key,並不知道我們要訪問的究竟是何種服務,所以當我們知道Server Hash的時候,就可以去訪問服務器中指定的服務。簡單地說,就是生成了一個可以隨時訪問服務的後門。

利用條件

1.已知服務器的NTLM hash

2.僅對部分開放服務有效,如cifs(文件共享服務),mssql,winrm(windows遠程管理),dns等等

實踐過程

用的是紅日安全的環境

192.168.52.138 域控服務器

192.168.52.143 客戶端

mimikatz 工具

之前自己搭建的AD域環境有點問題,沒復現成功,心塞。。。然後用紅日的環境復現好了。拿到的客戶端是管理員權限,域控的主機是普通用戶權限。沒詳細研究怎麼去打組合拳,先看看能不能利用一下白銀票據。嘗試用命令查詢客戶端共享目錄的訪問權限,發現無法訪問:

dir \\stu1.god.org\c$

因爲要僞造訪問客戶端的訪問權限,所以我們可以在客戶端中去拿到這個NTLM Hash:

mimikatz log "privilege::debug" "sekurlsa::logonpasswords">log.txt

在log.txt中查看到 NTLM Hash:

然後我們還需要域的SID值,域的SID就是域成員的SID值去掉最後的 -數字 的部分,該域的SID值就是S-1-5-21-2952760202-1353902439-2381784089 可以在log.txt中查看,也可以用命令:

whoami /user

最後一步,就是在域控主機中僞造票據,爲了方便就直接進行僞造,寫入域控主機內存。mimikatz 其實還可以把票據dump到本地,方便以後再使用。爲了防止其他票據干擾,可以使用 kerberos::purge 把主機中其他票據刪除。僞造命令:

kerberos::golden /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089 /target:stu1.god.org /rc4:55c330808522af0724598d8f48af2809 /service:cifs /user:stu1 /ptt

然後再次訪問,成功:

最後,mimikatz之前沒咋用過,簡單看了一下是可以將內存中的密碼都讀出來,很強大。。有些密碼沒經過Hash處理,直接明文顯示了。

黃金票據

原理

和白銀票據不同,黃金票據利用點在於僞造TGT。僞造TGT的關鍵就在於獲取KDC的哈希值,也就是KRBTGT賬戶的哈希值,僞造出TGT的話,後面就可以有效的獲得目標主機任何的Kerberos服務。

利用條件

1.需要與KDC通信

2.需要krbtgt的hash

實踐過程

依舊是紅日安全的環境

Win2008R2(DC) IP:192.168.52.138

Win2003 IP:192.168.52.141

Win7 IP:192.168.52.143(內)

mimikatz 工具

大大大前提:我們已經可以訪問域控主機,接下來我們在域控上使用mimikatz進行票據提取。先導出KRBTGT賬戶的hash:

lsadump::dcsync /domain owa /user:krbtgt

把信息提取出來:

安全賬戶管理器用戶名:krbtgt krbtgt SID爲:S-1-5-21-2952760202-1353902439-2381784089-502 krbtgt 的hash:58e91a5ac358d86513ab224312314061

查看一下域控主機當前用戶:

接着回到win7主機上,我們要在win7主機中使用mimikatz,通過黃金票據獲得域控主機權限。先啓動mimikatz,藉助kerberos::purge命令清除win7主機上的票據

接着利用前面獲取到的信息僞造黃金票據:

kerberos::golden /domain:owa.god.org /sid:S-1-5-21-2952760202-1353902439-2381784089-502 /rc4:58e91a5ac358d86513ab224312314061 /user:krbtgt /ptt

再嘗試一下能否訪問遠程文件共享

啊這,出現這個錯誤的時候在網上查了很多資料,也關閉了防火牆和windows defender還是出現上述問題。後面調用systeminfo命令看了一下,原來打補丁了啊,那沒事了,如果沒有補丁的話就可以繼續對目標機器進行滲透,甚至可以用PSEXEC.exe進行反彈shell。關於紅日安全靶場,在網上進行下載即可。

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