委派存在的漏洞及实验
非约束委派
当访问主体以kerberos认证的方式访问非约束委派服务器,非约束委派服务器的内存中就会存有这个主体的TGT。
如果想要主动触发漏洞,可以使用PrintBug 或者PetitPotam。这两个服务在本地是以system权限运行,发起网络请求时,代表的身份是所在机器的机器账户的身份。
实验环境如下:
机器:DC-01、client-01
client-01的本地管理员用户:mahuateng:mahuateng123
域控机器上运行着打印机服务
Allows Unconstrained Delegation: TRUE 确认client-01为非约束委派
确认打印机漏洞存在
使用Rubeus监听TGT
触发打印机漏洞,注意,此时必须要指向域名,因为在kerberos协议中,ip认证会触发协议降级
成功抓取到域控的机器账户的TGT
对TGT转换为ccache格式后利用nxc 执行DCSync,导出全域hash
约束委派
1.当开启了无协议转换限制,即启用了 Kerberos 扩展协议S4U2self。如果控制了约束委派机器,那么该机器就可以向KDC请求任意用户访问自身服务的ST。然后再利用S4Uproxy,拿着这张ST给KDC,就可以任意用户的身份去访问在约束范围内的服务。
2.如果目标机器上存在多个服务,可以替换要访问的目标服务。因为校验服务是否被允许,是通过判断SPN,而SPN不和PAC进行绑定,攻击者就可以去篡改SPN,但是仅限该机器上的其他服务,因为每台机器对于SPN的加密是不同的。
实验环境如下:
机器:DC-01、client-01
漏洞载体: svc-app (域用户, 非机器)
├─ SPN: http/client-02.yes.com
├─ UAC 0x1000000 (TrustedToAuthForDelegation, 协议任意) ← 漏洞1
└─ msDS-AllowedToDelegateTo: DNS/dc-01.yes.com ← 漏洞2
有远程登录权限的普通域用户leijun:leijun123
先Kerberoasting和hashcat给svc-app的密码搞出来

登录到client-01,执行S4U任意用户伪造和SPN服务替换
.\Rubeus.exe s4u /user:svc-app /rc4:A9FDFA038C4B75EBC76DC855DD74F0DA /impersonateuser:administrator /domain:yes.com /dc:dc-01.yes.com /msdsspn:dns/dc-01.yes.com /altservice:ldap /nowrap 
用拿到的ldap服务的ST,去创建域用户,并且加入到域管理员组,从而拿下域控权限
基于资源的约束委派
和其他委派不同的是,决定委派服务是否成立,不在于活动目录,而是目标自身的属性决定,如果对目标拥有篡改权限,把自己控制的主体(通常是机器账号或者是服务账号)给加入到控制委派的DACL里面,就可以借助S4U任意用户模拟,对目标机器完全控制。
实验环境
机器:DC-01、client-01
eijun (leijun123, 普通域用户, 零权限起点)
└─ 对 CLIENT-01$ 的 GenericAll ACL ← 整个靶场就这一条配置
CLIENT-01$ 身上:
msDS-AllowedToActOnBehalfOfOtherIdentity = 空 ← 攻击者第②步自己写入
TrustedForDelegation = FALSE (非约束已撤)
msDS-AllowedToDelegateTo = 空
域配置:
ms-DS-MachineAccountQuota = 10 (默认, 没动) ← 让 leijun 能建机器账户
先给受控账号建好
./Rubeus.exe s4u /user:PWN$ /rc4:CE157E0DDC10B389B77C6749710B7184 /impersonateuser:administrator /domain:yes.com /dc:dc-01.yes.com /msdsspn:cifs/client-01.yes.com /ptt /nowrap
拿下对于cifs/client-01.yes.com的域管理员ST
之后就可以利用cifs的rpc,以域管理员的权限进行命令执行了