0x01 漏洞起源
說到ms14-068,不得不說silver ticket,也就是銀票。銀票是一張tgs,也就是一張服務票據。服務票據是客戶端直接發送給服務器,並請求服務資源的。如果服務器沒有向域控dc驗證pac的話,那么客戶端可以偽造域管的權限來訪問服務器。所以ms14-068的來源和銀票是息息相關的。
在mimikatz作者的ppt里面是這樣描述的:
所以說這真的是一個大漏洞,允許域內任何一個普通用戶,將自己提升至域管權限。微軟給出的補丁是kb3011780。在server 2000以上的域控中,只要沒有打這個補丁,那么情況將是非常糟糕的。
https://technet.microsoft.com/library/security/ms14-068.aspx
0x02 漏洞利用
2.1 windows環境下測試
在windows環境下,mimikatz的作者已經寫出了一個exploit。
https://github.com/gentilkiwi/kekeo
其中的ms14-068.exe正是此漏洞的利用工具。要測試這個漏洞,前提還是要明白kerberos的整個認證協議過程,不然是不會明白原理的,測試過程中出了什么問題也不知道怎么解決。我們作為滲透測試人員,如果說對windows環境中這么重要的一個認證協議都不了解,我想內網滲透也是浮雲吧。
利用這個漏洞,我們需要一個普通域用戶的賬戶名和密碼或者是哈希,哈希傳遞我已經在別的文章中總結了,其實哈希和密碼是有相同的效果。以及域名稱,該用戶的sids。這些都不是重點,重點是如何獲得一個域用戶的賬戶,我們在域內的某台機器上面抓取hash或者的明文密碼,或者是其他方法等等。
2.1.2 windows下利用過程
測試環境:
- 域:xxx.com
- Dc:dc.xxx.com
- Win7:win7-01.xxx.com
首先我們在dc上面檢測是否有這個漏洞:
很遺憾,沒有打這個補丁。
下面我們在win7上面測試該漏洞。Win7是一台普通的域內機器,普通域用戶jack登陸。
測試訪問域控的c盤共享:
訪問被拒絕。
為了使我們生成的票據起作用,首先我們需要將內存中已有的kerberos票據清除,清除方法是使用mimikatz:
#kerberos::purge
使用ms14-068來產生一張高權限的berberos服務票據,並注入到內存中:
ms14068.exe /domain:xxx.com /user:jack /password:jackpwd/ /ptt
再測試訪問:
測試psexec無密碼登陸
很棒,達到了我們想要的效果。
如果想生成一張kerberos票據,做票據傳遞攻擊(ptt),可以這樣:
ms14068.exe /domain:xxxcom /sid:S-1-5-21-2666969376-4225180350-4077551764 /user:jack /rid:1104 /password:jackpwd/ /aes256 /kdc:dc.xxx.com /ticket:jack_admin.kirbi
再配合mimikatz的ptt功能,將票據導入到內存中。
2.2 kali環境下測試
如果是遠程內網環境,首先要做內網代理,這個就不用多說。然后將自己的dns指向域控制器。
Linux下面測試的工具也有很多,當然msf這個漏洞利用框架肯定是少不了這個模塊。關於msf的利用過程我這里就不再多講,給出國外的一篇利用過程:
2.2.1 goldenPac.py
Kali下面利用此漏洞的工具我是強烈推薦impacket工具包里面的goldenPac.py,這個工具是結合ms14-068加psexec的產物,利用起來十分順手。
Kali下面默認還沒有安裝kerberos的認證功能,所以我們首先要安裝一個kerberos客戶端:
apt-get install krb5-user
最簡單的辦法:
goldenPac.py xxx.com/jack:jackpwd@dc.xxx.com
就可以得到一個cmd shell:
當然此工具不止是得到一個shell,我們甚至可以直接讓該域控運行我們上傳的程序,執行一個empire stager或者一個msf payload都不在話下。
2.2.1 ms14-068.py
https://github.com/bidord/pykek
效果和mimikatz作者寫的exploit差不多,這個腳本是產生一張kerberos的票據緩存,這個緩存主要是針對linux上面的kerberos認證的,但是mimikatz也有傳遞票據緩存的功能(ptc),實際上和mimikatz產生的kirbi格式的票據只是格式不同而已。
當然沒有kerberos客戶端也不行,如果沒有安裝記得先安裝:
apt-get install krb5-user
這個利用過程需要sid和用戶名密碼(哈希也可以)。
利用方法:
ms14-068.py -u jack@xxx.com -s jacksid -d dc.xxx.com
這樣生成了一張kerberos認證的票據緩存,要讓這個票據在我們認證的時候生效,我們要將這張緩存復制到/tmp/krb5cc_0
注意在kali下默認的root用戶,使用的kerberos認證票據緩存默認是/tmp/krb5cc_0
,所以我們只要將我們生成的票據緩存復制到/tmp/krb5cc_0
即可:
Klist
可以列舉出當前的kerberos認證票據,jack這張票據已經成功導入。
下面我們使用psexec.py來測試一下使用這張緩存的票據來得到一個域控的shell:
可以說也是很簡單。
0x03 小結
Ms14-068這個漏洞可謂是威力無窮,在域滲透中,我們第一步就是應該檢測域控是否有這個漏洞,一旦域控沒有打上這個補丁,將會使我們的內網滲透工作變得十分簡單。
參考連接:
- https://www.trustedsec.com/december-2014/ms14-068-full-compromise-step-step/
- https://labs.mwrinfosecurity.com/blog/2014/12/16/digging-into-ms14-068-exploitation-and-defence/
- https://github.com/bidord/pykek
- https://github.com/gentilkiwi/kekeo
- http://www.slideshare.net/gentilkiwi/bluehat-2014realitybites
- http://www.metasploit.cn/thread-1238-1-1.html