MS14-068


漏洞說明

該漏洞可能允許攻擊者將未經授權的域用戶賬戶的權限,提權到域管理員的權限。

漏洞原理

https://www.cnblogs.com/huamingao/p/7267423.html

​Kerberos在古希臘神話中是指:一只有三個頭的狗。這條狗守護在地獄之門外,防止活人闖入。Kerberos協議以此命名,因為協議的重要組成部分也是三個:client, server, KDC(密鑰分發中心). 要了解Kerberos協議的工作過程,先了解不含KDC的簡單相互身份驗證過程。

  1. 簡單的相互身份驗證

A向B發送信息時,會附加一個Authenticator(認證碼,該數據結構=身份信息+時間戳)來進行彼此的身份驗證。開始驗證之前,A和B已經有一個有且只有二人知曉的密鑰。下面是工作流程:

  • A用密鑰加密了【信息+Authenticator(身份信息+時間戳)】,將其發給B

  • B用密鑰解密了A發來的Authenticator,並將其中包含的時間戳記錄下來。B將這個時間戳與自己的當前時間進行比較,如果這個時間差大於某個值(windows下默認是5分鍾),B認為信息不是A發來的,拒絕后續驗證。如果這個時間差小於設定值,B要檢查在過去5分鍾內,是否存在含有更早時間戳的Authenticator,如果沒有,B認為信息確實是A發來了。至此,完成了B對A的驗證。

  • B用密鑰加密Athenticator里的時間戳,然后將其發回給A,以證明自己確實是B.

  • A收到后,解密出時間戳,經過自己的對比,確認了對方確實是B. 至此,完成了A對B的驗證
    img

  1. 引入session key和密鑰分發中心KDC

實現簡單相互身份驗證有一個前提,即,A和B必須有一個有且只有二人知曉的密鑰。在2中,我們要設計一個密鑰分發機制來完善1的流程。這里引入key distribution center, KDC密鑰分發中心。當A嘗試向B發信息時,KDC會分別向A、B發放一個加密過的session key,這相當於1中那個有且只有AB雙方知曉的密鑰(注意,在傳輸過程中,session key要再包裹一層密鑰進行加密,下面將具體說到)。

  1. 引入secret key(密鑰的加密)

session key在傳輸過程中需要加密。因此我們又引入了一個加密密鑰,叫做secret key(或者叫long term key,在用戶賬號驗證中,這個key是衍生自賬號密碼). 這個key是KDC和A(或B)之間有且只有雙方知曉的一個密鑰。KDC與A之間進行傳輸時,是由僅有A與KDC雙方知曉的key加密。KDC與B之間進行傳輸時,是由僅有B與KDC雙方知曉的key加密。

  1. 引入session ticket(密鑰的識別)

實際應用中,一個KDC對應着許許多多的客戶端和服務端,每個客戶端與服務端之間都有一個共享的session key(密鑰)。為了區別這些session key,我們引入session ticket的概念,它是一種內嵌了session key和客戶端身份信息(原文authorization data for the client)的數據結構。相當於session key與客戶端的1對1表。

下面是具體工作過程:

  • 客戶端向KDC提交客戶端身份信息(這個傳輸過程使用客戶端secretkey進行加密),要求與服務端進行相互身份驗證。

  • KDC生成一個僅有客戶端與服務端知曉的session key。

  • KDC將session key附加上客戶端身份信息形成了session ticket,並用服務端secret key加密session ticke后傳給服務端。服務端收到了KDC回復,使用服務端secret key解密,獲得了有且只有客戶端和服務端二者知曉的密鑰session key。

  • KDC將【session key+服務端secret key加密后的session ticket】用客戶端secret key加密后,傳給客戶端。客戶端收到了KDC的回復,用客戶端secret key解密出【session key+服務端secret key加密后的session ticket】。解密出的兩部分內容分開地放在一個安全的緩存中(一塊隔離的內存空間,而不是硬盤上)。當客戶端再次向服務端發送信息時,客戶端就可以直接向服務端發送【要發送的信息+服務端secret key加密后的session ticket+用session key加密的Authenticator(身份信息+時間戳)】

  • 服務端收到了來自客戶端的以上憑據,先用服務端secret key將session ticket解密,取得內嵌在session ticket里的session key,用其將Authenticator解密,得到了客戶端發送消息的時間戳。之后按照1中簡單相互身份驗證過程中的步驟b, c, d繼續進行。

PS:

  1. session ticket可以被重復使用。客戶端從KDC獲得session ticket后,會將其放在安全緩存中(一塊隔離的內存空間,而不是硬盤上)。每當客戶端想要訪問指定服務端,客戶端就出示相應的session ticket。

  2. session ticket有失效期,通常是8小時,可以在相應的Kerberos策略中設置。

  3. 服務端不需要存儲session ticket。KDC只負責發送信息,不驗證信息是否發放到正確的對象。因為即使發錯了對象,對方沒有secret key(有且只有KDC和正確對象知曉的密鑰),是解不開信息的。循序漸進了解Kerberos認證工作原理

服務票據是客戶端直接發送給服務器,並請求服務資源的。如果服務器沒有向域控dc驗證pac的話,那么客戶端可以偽造域管的權限來訪問服務器。

漏洞利用的前提

  1. 域控沒有打MS14-068的補丁

  2. 攻擊者拿下了一台域內的普通計算機,並獲得普通域用戶以及密碼/hash值,以及用戶的suid

實驗環境

  • 域控制器(DC) windows 2008 R2 st13.com 192.168.10.146

  • 域內機器 windows 7 192.168.10.129

  • Ms14-068.exe

  • PSexec

環境准備

准備虛擬機

  • Windows server 2008 R2 數據中心版
  • Windows 7

在Windows server 2008 R2上創建AD域控制器

  • 將這台計算機的名字修改為server1,IP地址修改為符合自己需要的,如圖所示。

  • 在運行框輸入dcpromo,回車

  • 點擊下一步,下一步,出現下面的界面

  • 按下圖勾選后進行下一步

  • 按照下圖操作后點擊下一步

  • 選擇功能林級別

  • 安裝域服務器會自動安裝DNS,直接下一步就行

  • 出現警告,點擊是即可

  • 直接默認即可,選擇下一步,輸入活動目錄的備份還原密碼,再次點擊下一步,最后等待重啟即可

  • 重啟后,出現域標識

  • 進入適配器選項后,查看網卡配置信息,發現DNS又變成了默認的`127.0.0.1`,我們需要把他改成自己的IP地址,不然下面的計算機加域的時候會找不到域控制器

  • 然后點擊 開始 -> 管理工具 -> DNS

  • 打開服務器管理器,添加添加角色

  • 連續點擊兩個下一步

  • 連續點擊兩個下一步,點擊安裝

添加Windows 7 (DCServer)到域中

  • 依次點擊 開始 -> 控制面板 -> 系統 -> 用戶名后面的更改設置

  • 然后在彈出的認證輸入框內輸入ADServer 的用戶名和密碼,等待片刻

  • 在ADServer服務器上查看剛剛加入到域的計算機,默認加入到域里面的計算機都會在Computers里面

  • 至此, 域控制器准備就緒

漏洞復現

  • 直接使用域用戶訪問域控的C盤

  • 查看本機用戶信息,記錄用戶名與SID號whoami /all

  • 進入MS14-068目錄,使用以下命令:MS14-068.exe -u @ -p -s -d

  • 打開mimikatz,注入票據
mimikatz # kerberos::purge          //清空當前憑證
mimikatz # kerberos::list           //查看當前機器憑證
mimikatz # kerberos::ptc 票據文件    //將上一步生成的票據注入到內存中

  • 再次列出域控C盤下的目錄

  • 使用PSTools目錄下的PsExec.exe獲取shell

  • 添加域管理員


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM