非约束委派和约束委派
非约束性委派
非约束性委派概述
在Windows server 2000首次发布Active Directory时,Microsoft就提供了一种简单的机制来支持用户通过Kerberos向Web Server进行身份验证并需要代表该用户更新后端数据库服务器上的记录方案,这就是最早的非约束性委派
对于非约束性委派,服务账号可以获取被委派用户的TGT,并将TGT缓存到LSASS进程中,从而服务账号可以使用该TGT,模拟该用户访问任何服务
非约束委派的设置需要SeEnableDelegation特权
,该特权通常仅授予域管理员
配置了非约束性委派属性的机器账号
的UserAccountControl属性
有个Flag位:WORKSTATION_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION
,其对应的数是0x81000=528384
配置了非约束性委派属性的服务账号
的userAccountControl属性
有个Flag位:NORMAL_ACCOUNT | TRUSTED_FOR_DELEGATION
,其对应的数是0x80200=524800
查找非约束委派的主机或服务账号
利用powersploit中的powerview
1 |
|
利用ADFind
非约束性委派利用过程
user访问serverA,于是向DC发起认证,DC会检查server的机器账号的属性,如果是非约東委派的话,会把用户的TGT放在ST票据中并一起发送给ServerA
,这样ServerA在验证ST票据的同时也获得了用户的TGT,并把TGT存储在自己的lsass进程中以备下次重用,从而ServerA就可以使用这个TGT,来模拟这个user访问任何服务
从攻击角度来说:如果攻击者拿到了一台配置了非约束委派的机器权限,可以诱导管理员来访问该机器,然后可以得到管理员的TGT,从而模拟管理员访问任意服务,相当于拿下了整个域环境
利用过程
域:test2.com 域控:PC2 受非约束委派机器:PC1
用域管访问PC1机器
1 |
|
然后在PC1上以管理员权限运行mimikatz
1 |
|
此时可以在mimikatz同级目录下拿到管理员Administrator的票据,用mimikatz将票据注入内存中
1 |
|
成功访问域控
1 |
|
非约束委派+Spooler打印机漏洞利用过程
非约束委派+spooler打印机服务可以强制指定的主机进行连接
利用原理
利用Windows打印系统远程协议(MS-RPRN)中的一种旧的但是默认启用的方法,在该方法中,域用户可以使用MS-RPRNRpcRemoteFindFirstPrinterchangeNotification方法强制任何运行了Spooler服务的计算机以通过Kerberos或NTLM对攻击者选择的目标进行身份验证
Print Spooler服务默认是自动运行的
利用过程
域:test2.com 域控:PC2 非约束委派机器:PC1
使用Rubeus监听来自域控的登陆日志
1 |
|
在PC1上运行SpoolSample.exe,向域控的Spooler服务发送请求,强制域控PC2向PC1发起认证
1 |
|
成功捕捉到域控的票据,利用Rubeus进行PTT票据传递
1 |
|
票据导入成功后,利用DCSync导出域内所有用户的Hash
1 |
|
然后可以根据获得的信息进一步进行Hash传递或进行黄金票据等
约束性委派
利用过程
域名:test2.com 域控:PC2.test2.com 域内机器:PC1.test2.com 域内委派用户:justtest
首先在域控上将justtest注册为SPN服务账号
1 |
|
查看是否注册成功
1 |
|
然后将justtest用户设置为 约束委派 的属性,为访问域控的cifs
通过命令行打开adsiedit.msc
查看justtest
用户属性
可以看到当被设置为约束委派的时候,它的userAccountControl
会包含TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION
字段并且比非约束委派
账户多了msDS-AllowedToDelegateTo
字段,里面包含了允许委派的服务
当知道justtest这个服务用户的明文密码或者Hash时,可以用kekeo请求它的TGT
1 |
|
1 |
|
如果不知道明文和Hash,如果有了服务用户登录的主机权限,也可以利用mimikatz从内存中把服务用户的TGT dump下来,从内存中导出所有票据
1 |
|
然后通过justtest的TGT伪造s4u请求以administrator身份请求访问域控cifs的ST
1 |
|
可以获得两个票据
用mimikatz将票据导入内存中
1 |
|
访问域控
1 |
|