您好,登錄后才能下訂單哦!
Kerberos中MS14068和金銀票據(jù)的原理和利用方式是什么,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
下面具體說一下Kerberos曾經(jīng)爆出的一個經(jīng)典的漏洞MS14068和金銀票據(jù)的原理和利用方式。MS14068是一個比較經(jīng)典的漏洞,小編對金銀票據(jù)以及增強型的金票據(jù)做一個說明。
MS14068是一個能夠使普通用戶提權(quán)到域控權(quán)限的權(quán)限提升漏洞。攻擊者可以通過構(gòu)造特定的請求包來達到提升權(quán)限的目的。首先我們來說一下利用方式。
實驗環(huán)境:
域:YUNYING.LAB
域控:WindowsServer 2008 R2 x64(DC)
域內(nèi)主機:Windows7 x64(s1):域帳戶ts1
所需工具:
Pykek
mimikatz
攻擊流程:
實驗之前需要在域控主機查看是否安裝了KB3011780補丁,可通過systeminfo來查看。
一、首先在域內(nèi)主機s1上通過dir來訪問域控的共享文件夾,示拒絕訪問。
二、通過Pykek工具利用漏洞,我這里使用的是將python腳本編譯之后的exe文件。
參數(shù)說明:
-u 域賬號+@+域名稱,這里是ts1+@+yunying.lab
-p 為當(dāng)前用戶的密碼,即ts1的密碼
-s為ts1的SID值,可以通過whoami/all來獲取用戶的SID值
-d為當(dāng)前域的域控
腳本執(zhí)行成功會在當(dāng)前目錄下生成一個ccache文件。
三、使用mimikatz導(dǎo)入生成的ccache文件,導(dǎo)入之前cmd下使用命令klist purge或者在mimikatz中使用kerberos::purge刪除當(dāng)前緩存的kerberos票據(jù)。
再次dir訪問域控共享已經(jīng)可以成功訪問。
MS14068工具在使用過程中抓包可以看到s1和域控192.168.254.130(實質(zhì)上是與安裝在域控上的KDC)有KRB_AS_REQ、KRB_AS_REP、KRB_TGS_REQ、KRB_TGS_REP四次交互。
下面根據(jù)流程和工具源碼來看漏洞是如何利用的:
KRB_AS_REQ
首先程序通過build_as_req函數(shù)構(gòu)建AS_REQ,在這里可以看到,參數(shù)pac_request設(shè)置為false。
也就是說設(shè)置了這個參數(shù)之后會向KDC申請一張不包含PAC的TGT票據(jù),這是微軟默認(rèn)的設(shè)計,在下列鏈接中有詳細(xì)說明。
https://docs.microsoft.com/en-us/previous-versions/aa302203(v=msdn.10)#security-considerations
通過PCAP包可以更直觀的看到在AS-REQ請求中的include-pac:False字段。這是造成這個漏洞的第一個因素。
KRB_AS_REP
在AS發(fā)起請求之后,KDC(AS)將返回一張不包含有PAC的TGT票據(jù)給Client。在這里是tgt_a。
抓包可以看到這個以268fdb開頭的TGT票據(jù)。
KRB_TGS_REQ
攻擊腳本使用了兩個關(guān)鍵函數(shù)來實現(xiàn)這個過程,首先通過build構(gòu)造PAC,然后通過build_tgs_req函數(shù)構(gòu)造TGS-REQ的內(nèi)容。
build_pac
當(dāng)Client接收到AS返回的不帶有PAC的TGT之后通過腳本中的build_pac函數(shù)開始構(gòu)造PAC。
這里我們重點關(guān)注一下PAC中的chksum1和chksum2,也就是“PAC的引入”中提到的PAC的兩個數(shù)字簽名PAC_SERVER_CHECKSUM和PAC_PRIVSVR_CHECKSUM。
注意一下其中第一個參數(shù)server_key[0]和kdc_key[0]的值其實是程序指定的RSA_MD5,而Key的值為None,但原則上來說這個加密方式是應(yīng)該由KDC來確定的。也就是說加密PAC_SERVER_CHECKSUM和PAC_PRIVSVR_CHECKSUM這兩個數(shù)字簽名的Key應(yīng)該分別是Server密碼HASH和KDC密碼HASH,在這里卻直接使Key為None,然后直接使用RSA_MD5方式加密。
這是漏洞形成的第二個因素,查看checksum函數(shù)即可驗證這一點。
同時在這個過程中我們也需要關(guān)注一下user_sid這個參數(shù),build_pac函數(shù)會將其分割,然后重新構(gòu)造高權(quán)限的sid的值。在這里user_sid的值為S-1-5-21-4249968736-1423802980-663233003-1104,分割之后domain_sid為S-1-5-21-4249968736-1423802980-663233003,user_id為1104。
其中512、520、518、519分別為不同的組的sid號。513為DOMAIN USERS組。通過這種方式構(gòu)造了包含高權(quán)限組SID的PAC。
build_tgs_req
在build_tgs_req函數(shù)的參數(shù)中,authorization_data對應(yīng)的為build_pac生成的pac。
這里將PAC傳入build_tgs_req之后使用subkey將其加密。
而通過下圖可以看到subkey其實是函數(shù)generate_subkey生成的一串16位的隨機數(shù)。
那現(xiàn)在為止出現(xiàn)的問題有:
A、在域中默認(rèn)允許設(shè)置Include-pac的值為False(不能算漏洞,應(yīng)該是微軟對于某些特定場景的特殊考慮設(shè)計出的機制);
B、PAC中的數(shù)字簽名可以由Client端指定,并且Key的值可以為空;
C、PAC的加密方式也可以由Client指定,并且Key的值為generate_subkey函數(shù)生成的16位隨機數(shù);
D、構(gòu)造的PAC中包含高權(quán)限組的SID內(nèi)容。
也就是說通過這幾點Client完全偽造了一個PAC發(fā)送給KDC,并且KDC通過Client端在請求中指定的加密算法來解密偽造的PAC以及校驗數(shù)字簽名,并驗證通過。
通過抓包可以看到在這個過程中將接收的TGT(268fdb開頭)和加密方式為ARCFOUR-HMAC-MD5的PAC內(nèi)容。
KRB_TGS_REP
KDC在根據(jù)對偽造的PAC驗證成功之后,返回給Client端一有新的TGT,并且這個TGT會將Pykek生成的PAC包含在其中,這里正常情況下返回的其實是一張用于發(fā)送給Server端做認(rèn)證的ST票據(jù)。
當(dāng)Pykek工具接收到新的TGT之后就將其保存生成ccache文件。也就是說這時Client已經(jīng)獲得了一張包含有高權(quán)限PAC內(nèi)容的正常的TGT票據(jù)(564eab開頭)。
使用Mimikatz利用TGT訪問DC共享文件夾
這時我們通過mimikatz來導(dǎo)入票證,并且用dir \\dc.yunying.lab\c$來訪問域控的共享文件夾。
抓包可以看到這時Client端發(fā)起了兩次TGS-REQ請求,重點關(guān)注一下第一次,此時用的票據(jù)就是使用mimikatz導(dǎo)入的TGT,也就是上面KRB_TGS_REP過程中返回的那個tgt_b(564eab開頭)。
請求之后返回了一張針對dc.yunying.lab(域控)的CIFS票據(jù)也就是正常流程中的ST(Service Ticket)票據(jù)(234062開頭):
這時在抓的包中發(fā)現(xiàn)并沒有AP_REQ這個流程,是因為在Kerberos中AP_REQ這個過程放在了服務(wù)的第一次請求中,這里是放在SMB的Session Setup Request中(其他協(xié)議同理,比如HTTP協(xié)議是放在GET請求中)。
然后在SMB的Session Setup Response中做出響應(yīng),也就是AP-REP這個流程。
到此為止Client能夠越權(quán)訪問域控的共享文件夾。
此漏洞是一個14年的漏洞,多數(shù)產(chǎn)生在windowsserver 2008和windows server 2003的域環(huán)境中,所以安全補丁早已可以下載安裝,用戶可以通過在域控上安裝KB3011780補丁來規(guī)避風(fēng)險。
同時可以根據(jù)上文中提到的標(biāo)記include-pac為False的特征來初步的篩選。
也可以通過windows日志來發(fā)現(xiàn),如ID為4624登錄到目標(biāo)服務(wù)器、ID為5140表示網(wǎng)絡(luò)共享對象被訪問等等。
在這個漏洞中主要的問題是存在于KDC會根據(jù)客戶端指定PAC中數(shù)字簽名的加密算法,以及PAC的加密算法,來校驗PAC的合法性。這使得攻擊者可通過偽造PAC,修改PAC中的SID,導(dǎo)致KDC判斷攻擊者為高權(quán)限用戶,從而導(dǎo)致權(quán)限提升漏洞的產(chǎn)生。
Golden Ticket(下面稱為金票)是通過偽造的TGT(TicketGranting Ticket),因為只要有了高權(quán)限的TGT,那么就可以發(fā)送給TGS換取任意服務(wù)的ST。可以說有了金票就有了域內(nèi)的最高權(quán)限。
制作金票的條件:
1、域名稱
2、域的SID值
3、域的KRBTGT賬戶密碼HASH
4、偽造用戶名,可以是任意的
實驗環(huán)境
域:YUNYING.LAB
域控:WindowsServer 2008 R2 x64(DC)
域內(nèi)主機:Windows7 x64(s1):用戶ts1
所需工具
Mimikatz
實驗流程
金票的生成需要用到krbtgt的密碼HASH值,可以通過mimikatz中的
lsadump::dcsync /domain:yunying.lab /user:krbtgt
命令獲取krbtgt的值。如果已經(jīng)通過其他方式獲取到了KRBTGT HASH也可以直接進行下一步。
得到KRBTGT HASH之后使用mimikatz中的kerberos::golden功能生成金票golden.kiribi,即為偽造成功的TGT。
參數(shù)說明:
/admin:偽造的用戶名
/domain:域名稱
/sid:SID值,注意是去掉最后一個-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票據(jù)名稱
金票的使用
通過mimikatz中的kerberos::ptt功能(Pass The Ticket)將golden.kiribi導(dǎo)入內(nèi)存中。
已經(jīng)可以通過dir成功訪問域控的共享文件夾。
這樣的方式導(dǎo)入的票據(jù)20分鐘之內(nèi)生效,如果過期再次導(dǎo)入就可以,并且可以偽造任意用戶。
Silver Tickets(下面稱銀票)就是偽造的ST(Service Ticket),因為在TGT已經(jīng)在PAC里限定了給Client授權(quán)的服務(wù)(通過SID的值),所以銀票只能訪問指定服務(wù)。
制作銀票的條件:
1.域名稱
2.域的SID值
3.域的服務(wù)賬戶的密碼HASH(不是krbtgt,是域控)
4.偽造的用戶名,可以是任意用戶名,這里是silver
實驗環(huán)境
域:YUNYING.LAB
域控:WindowsServer 2008 R2 x64(DC)
域內(nèi)主機:Windows7 x64(s1):用戶ts1
所需工具
Mimikatz
實驗流程
首先我們需要知道服務(wù)賬戶的密碼HASH,這里同樣拿域控來舉例,通過mimikatz查看當(dāng)前域賬號administrator的HASH值。注意,這里使用的不是Administrator賬號的HASH,而是DC$的HASH。
這時得到了DC的HASH值,通過mimikatz生成銀票。
參數(shù)說明:
/domain:當(dāng)前域名稱
/sid:SID值,和金票一樣取前面一部分
/target:目標(biāo)主機,這里是dc.yunying.lab
/service:服務(wù)名稱,這里需要訪問共享文件,所以是cifs
/rc4:目標(biāo)主機的HASH值
/user:偽造的用戶名
/ptt:表示的是Pass TheTicket攻擊,是把生成的票據(jù)導(dǎo)入內(nèi)存,也可以使用/ticket導(dǎo)出之后再使用kerberos::ptt來導(dǎo)入
這時通過klist查看當(dāng)前會話的kerberos票據(jù)可以看到生成的票據(jù)。
使用dir \\dc.yunying.lab\c$訪問DC的共享文件夾。
銀票生成時沒有KRBTGT的密碼,所以不能偽造TGT票據(jù),只能偽造由Server端密碼加密的ST票據(jù),只能訪問指定的服務(wù)。
在Golden Ticket部分說明可利用krbtgt的密碼HASH值生成金票,從而能夠獲取域控權(quán)限同時能夠訪問域內(nèi)其他主機的任何服務(wù)。但是普通的金票不能夠跨域使用,也就是說金票的權(quán)限被限制在當(dāng)前域內(nèi)。
為什么普通金票會被限制只能在當(dāng)前域內(nèi)使用?
在上一篇文章中說到了域樹和域林的概念,同時說到Y(jié)UNYING.LAB為其他兩個域(NEWS.YUNYING.LAB和DEV.YUNYING.LAB)的根域,根域和其他域的最大的區(qū)別就是根域?qū)φ麄€域林都有控制權(quán)。而域正是根據(jù)Enterprise Admins組(下文會說明)來實現(xiàn)這樣的權(quán)限劃分。
實驗環(huán)境
根域:YUNYING.LAB 域控:DC.YUNYING.LAB
子域:NEWS.YUNYING.LAB 域控:NEWSDC.NEWS.YUNYING.LAB
子域:DEV.YUNYING.LAB 域控:DEVDC.DEV.YUNYING.LAB
操作系統(tǒng)均為WindowsServer 2008 R2 x64
使用工具:
Mimikatz
實驗流程:
首先使用mimikatz在NEWSDC(NEWS.YUNYING.LAB的域控)上生成普通的金票,真實環(huán)境會是在域內(nèi)的主機中,這里方便演示所以在域控中,原理和結(jié)果是一樣的。
kerberos::golden /admin:administrator /domain:news.yunying.lab /sid:SID /krbtgt:XXXXX /ptt
這里使用的是NEWS.YUNYING.LAB域的SID號,訪問根域的DC共享文件夾被拒絕。
下面說明下具體原因。
Enterprise Admins組
EnterpriseAdmins組是域中用戶的一個組,只存在于一個林中的根域中,這個組的成員,這里也就是YUNYING.LAB中的Administrator用戶(不是本地的Administrator,是域中的Administrator)對域有完全管理控制權(quán)。
通過whoami命令在yunying.lab的域控上可以看到Enterprise Admins組的RID為519(最后三位)
Domain Admins組
可以看到在子域中是不存在EnterpriseAdmins組的,在一個子域中權(quán)限最高的組就是Domain Admins組。截圖是news.yunying.lab這個子域中的Administrator用戶,這個Administrator有當(dāng)前域的最高權(quán)限。
通過whoami命令也可以看到在news.yunying.lab這個子域中沒有EnterpriseAdmins組的SID號。
在子域中使用mimikatz創(chuàng)建的黃金票據(jù)不能跨域使用的原因也就在這里,通過whoami可以看到Y(jié)UNYING.LAB中Enterprise Admins組的SID號是:
S-1-5-21-4249968736-1423802980-663233003-519
而NEWS.YUNYING.LAB域中的SID號是:
S-1-5-21-3641416521-285861825-2863956705-XXX
mimikatz通過/sid選項接收SID號然后在尾部拼接RID號(512,519等),拼接之后生成的EnterpriseAdmins組的完整SID是:
S-1-5-21-3641416521-285861825-2863956705-519
而這個SID在整個域林中都是不存在的,所以在子域中通過mimikatz生成的金票無法跨域或者是訪問其他域的資源。在一個域林中,域控權(quán)限不是終點,根域的域控權(quán)限才是域滲透的終點。
普通的黃金票據(jù)被限制在當(dāng)前域內(nèi),在2015年Black Hat USA中國外的研究者提出了突破域限制的增強版的黃金票據(jù)。通過域內(nèi)主機在遷移時LDAP庫中的SIDHistory屬性中保存的上一個域的SID值制作可以跨域的金票。這里沒有遷移,直接拿根域的SID號做演示。
如果知道根域的SID那么就可以通過子域的KRBTGT的HASH值,使用mimikatz創(chuàng)建具有 EnterpriseAdmins組權(quán)限(域林中的最高權(quán)限)的票據(jù)。環(huán)境與上文普通金票的生成相同。
首先我們通過klist purge刪除當(dāng)前會話的Kerberos票據(jù),也可以在mimikatz里通過kerberos::purge來刪除。
然后通過mimikatz重新生成包含根域SID的新的金票
kerberos::golden /admin:administrator /domain:news.yunying.lab /sid:XXX /sids:XXX /krbtgt:XXX /startoffset:0 /endin:600 /renewmax:10080 /ptt
Startoffset和endin分別代表偏移量和長度,renewmax表示生成的票據(jù)的最長時間
注意這里是不知道根域YUNYING.LAB的krbtgt的密碼HASH的,使用的是子域NEWS.YUNYING.LAB中的KRBTGT的密碼HASH。
然后再通過dir訪問DC. YUNYING.LAB的共享文件夾,發(fā)現(xiàn)已經(jīng)可以成功訪問。
此時的這個票據(jù)票是擁有整個域林的控制權(quán)的。我們知道制作增強金票的條件是通過SIDHistory那防御方法就是在域內(nèi)主機遷移時進行SIDHistory過濾,它會擦除SIDHistory屬性中的內(nèi)容。MS14068的利用方式和金銀票據(jù),主要用來提升和維持域內(nèi)權(quán)限,通常情況下需要結(jié)合其他的域內(nèi)攻擊方式進行使用,比如獲取了域控制器的NTLM HASH等內(nèi)容時。
關(guān)于Kerberos中MS14068和金銀票據(jù)的原理和利用方式是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。