声明
0x01 漏洞背景
0x02 环境搭建
主机IP
Hacker |
192.168.80.128 |
AD_USER |
192.168.80.133 |
192.168.30.20 |
|
AD |
192.168.30.10 |
域环境
角色 |
USERNAME |
Password |
域控 |
Administrator |
??? |
域用户 |
User |
qnmb@123! |
0x03 POC展示
由于hacker拿下AD_USER的shell比较简单,使用ms17_010即可,所有进行省略
可见存在域的同时定位域控IP:
192.168.30.10
获取明文密码:
Python3 sam_the_admin.py HACKER/user:qnmb@123! -dc-ip 192.168.30.10 -shell
这个脚本仅仅利用了域控的IP和当前域用户,就成功获取了域控的Shell。
接下来详细分析一下CVE-2021-42287的问题。
Github:
https://github.com/WazeHell/sam-the-admin
0x04 分析
一、Kerberos认证简述:
二、PAC简述
在讲述S4U2self提权之前,必须了解微软对原先Kerberos的改进,即PAC的概念
由于我们在上文提过在之前的Kerberos中存在缺少对访问服务的权限管控问题,因此在原来的Kerberos基础中加入了PAC。
1.用户请求TGS依旧是仅仅需要提供的TGT可以被kbrtgt hash即可,然后在使用TGS访问服务时才会对用户权限进行校验。
三、CVE-2021-42278(伪造AD机器用户)
如果要解释CVE-2021-42287的原理,那么一定离不开CVE-2021-42278
这里的SAMTHEADMIN机器用户不存在$,而这就是CVE-2021-42278
四、 CVE-2021-42287
五、 S4U2self协议:
图片来自微软官方
1.User通过非Kerberos登陆Service 1在请求Service 1中的某项功能时需要访问Service 2可以理解为USER通过WEB服务访问了Service 1现在需要调用Service 2的SQL中的资源。
2.这时Service 1会使用自己的TGT向KDC请求一种授权访问自己服务的TS。KDC解密来自Service 1的TGT后返回一个新的TS1(这个TS证书可转发,因为后面需要使用S4U2proxy协议),由于这个TS中的PAC是生成的并非原来TGT中发PAC,所以KDC在匹配到服务账户后,会生成与服务账户同权的PAC放入TS1,这也是CVE-2022-42287在拿着与域控同名无$的TGT返回的TS1为什么包含域控的PAC。
3. Service 1 拿着TS1通过S4U2proxy将TS1发送给KDC,即作为User的身份向KDC请求指向Service 2的TS
4. KDC解密TS1后把指向Service 2的TS 2返回给Service 1。
5. Service 1 再拿着TS2去请求Service 2的服务
总的来说,S4U2self的作用是使服务器获取用户身份,然后代理用户向KDC请求。因此S4U2self协议发送的TGSREQ中的Cname,Sname都是指向自己的。
0x05总结
参考文章 |
CVE-2021-42287/CVE-2021-42278Windows域提权漏洞分析 - 安全客,安全资讯平台 (anquanke.com) |
Kerberos 委派攻击原理之 S4U2 利用详解_HBohan的博客-CSDN博客_kerberos s4u |
|
域内提权漏洞 CVE-2021-42287与CVE-2021-42278原理分析 - FreeBuf网络安全行业门户 |
|
POC |
https://github.com/WazeHell/sam-the-admin |
▇ 扫码关注我们 ▇
长白山攻防实验室
学习最新技术知识
原文始发于微信公众号(长白山攻防实验室):CVE-2021-42278域内权限提升
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论