kerberos的基本原理以及SPN掃描的內(nèi)容是什么

kerberos的基本原理以及SPN掃描的內(nèi)容是什么,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為黃埔企業(yè)提供專業(yè)的做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)黃埔網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

0x00 前言

Kerberos 是一種由 MIT(麻省理工大學(xué))提出的一種網(wǎng)絡(luò)身份驗(yàn)證協(xié)議。它旨在通過使用密鑰加密技術(shù)為客戶端/服務(wù)器應(yīng)用程序提供強(qiáng)身份驗(yàn)證。

在了解 Kerberos 的過程中,發(fā)現(xiàn)很多網(wǎng)站上的相關(guān)文章有一些是機(jī)器直接翻譯過來的,也有一些寫的比較優(yōu)秀的文章,但是實(shí)操性比較弱,可能第一次了解 Kerberos 的同學(xué)會(huì)不知道怎么上手。所以本文主要是通過更詳細(xì)的實(shí)驗(yàn)結(jié)合原理來說明與 Kerberos 相關(guān)的一些攻擊手法。

本文將分為三篇。第一篇也就是這一篇的內(nèi)容主要包括域環(huán)境和 Kerberos 協(xié)議的說明以及 Kerberoasting 的攻擊方式。第二篇主要包括 MS14068 漏洞和 Kerberos 票據(jù)的利用說明。第三篇的內(nèi)容主要說明關(guān)于 Kerberos 委派的攻擊方式及原理。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

0x01 域環(huán)境

由于 Kerberos 主要是用在域環(huán)境下的身份認(rèn)證協(xié)議,所以在說之前先說下域環(huán)境的一些概念。首先域的產(chǎn)生是為了解決企業(yè)內(nèi)部的資源管理問題,比如一個(gè)公司就可以在網(wǎng)絡(luò)中建立一個(gè)域環(huán)境,更方便內(nèi)部的資源管理。在一個(gè)域中有域控、域管理員、普通用戶、主機(jī)等等各種資源。

在下圖中 YUNYING.LAB 為其他兩個(gè)域的根域,NEWS.YUNYING.LAB 和 DEV.YUNYING.LAB 均為 YUNYING.LAB 的子域,這三個(gè)域組成了一個(gè)域樹。子域的概念可以理解為一個(gè)集團(tuán)在不同業(yè)務(wù)上分公司,他們有業(yè)務(wù)重合的點(diǎn)并且都屬于 YUNYING.LAB 這個(gè)根域,但又獨(dú)立運(yùn)作。同樣 TEST.COM 也是一個(gè)單獨(dú)的域樹,兩個(gè)域樹 YUNYING.LAB 和 TEST.COM 組合起來被稱為一個(gè)域林。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

本文就以根域?yàn)?YUNYING.LAB 的這個(gè)域來演示,YUNYING.LAB 的域控是 DC.YUNYING.LAB,子域 NEWS.YUNYING.LAB 和 DEV.YUNYING.LAB 的域控分別為 NEWSDC.NEWS.YUNYING.LAB 和 DEVDC.DEV.YUNYING.LAB。

上面說的都是 FQDN(FullyQualified Domain Name) 名稱,也就是全限定域名,是同時(shí)包含主機(jī)名和域名的名稱。

例:DC.YUNYING.LAB 中 DC 為主機(jī)名,域名為 YUNYING.LAB,那他的 FQDN 名稱就是 DC.YUNYING.LAB。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

本域中采用的操作系統(tǒng)為 Windows Server 2008 R2+Windows 7。

0x02 Kerberos 簡介

在 Kerberos 認(rèn)證中,最主要的問題是如何證明「你是你」的問題,如當(dāng)一個(gè) Client 去訪問 Server 服務(wù)器上的某服務(wù)時(shí),Server 如何判斷 Client 是否有權(quán)限來訪問自己主機(jī)上的服務(wù),同時(shí)保證在這個(gè)過程中的通訊內(nèi)容即使被攔截或篡改也不影響通訊的安全性,這正是 Kerberos 解決的問題。在域滲透過程中 Kerberos 協(xié)議的攻防也是很重要的存在。

1.Kerberos 協(xié)議框架

在 Kerberos 協(xié)議中主要是有三個(gè)角色的存在:

1. 訪問服務(wù)的 Client;

2. 提供服務(wù)的 Server;

3.KDC(Key Distribution Center)密鑰分發(fā)中心。

其中 KDC 服務(wù)默認(rèn)會(huì)安裝在一個(gè)域的域控中,而 Client 和 Server 為域內(nèi)的用戶或者是服務(wù),如 HTTP 服務(wù),SQL 服務(wù)。在 Kerberos 中 Client 是否有權(quán)限訪問 Server 端的服務(wù)由 KDC 發(fā)放的票據(jù)來決定。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

如果把 Kerberos 中的票據(jù)類比為一張火車票,那么 Client 端就是乘客,Server 端就是火車,而 KDC 就是就是車站的認(rèn)證系統(tǒng)。如果 Client 端的票據(jù)是合法的(由你本人身份證購買并由你本人持有)同時(shí)有訪問 Server 端服務(wù)的權(quán)限(車票對(duì)應(yīng)車次正確)那么你才能上車。當(dāng)然和火車票不一樣的是 Kerberos 中有存在兩張票,而火車票從頭到尾只有一張。

由上圖中可以看到 KDC 又分為兩個(gè)部分:

Authentication Server:AS 的作用就是驗(yàn)證 Client 端的身份(確定你是身份證上的本人),驗(yàn)證通過就會(huì)給一張 TGT(Ticket Granting Ticket)票給 Client。

Ticket Granting Server:TGS 的作用是通過 AS 發(fā)送給 Client 的票(TGT)換取訪問 Server 端的票(上車的票 ST)。ST(ServiceTicket)也有資料稱為 TGS Ticket,為了和 TGS 區(qū)分,在這里就用 ST 來說明。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

KDC 服務(wù)框架中包含一個(gè) KRBTGT 賬戶,它是在創(chuàng)建域時(shí)系統(tǒng)自動(dòng)創(chuàng)建的一個(gè)賬號(hào),你可以暫時(shí)理解為他就是一個(gè)無法登陸的賬號(hào),在發(fā)放票據(jù)時(shí)會(huì)使用到它的密碼 HASH 值。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

2.Kerberos 認(rèn)證流程

當(dāng) Client 想要訪問 Server 上的某個(gè)服務(wù)時(shí),需要先向 AS 證明自己的身份,然后通過 AS 發(fā)放的 TGT 向 Server 發(fā)起認(rèn)證請(qǐng)求,這個(gè)過程分為三塊:

The Authentication Service Exchange:Client 與 AS 的交互;

The Ticket-Granting Service (TGS) Exchange:Client 與 TGS 的交互;

The Client/Server Authentication Exchange:Client 與 Server 的交互。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

(1)TheAuthentication Service Exchange

KRB_AS_REQ

Client->AS:發(fā)送 Authenticator1(Client 密碼加密 TimeStamp)

第一步 Client 先向 KDC 的 AS 發(fā)送 Authenticator1,內(nèi)容為通過 Client 密碼 Hash 加密的時(shí)間戳、ClientID、網(wǎng)絡(luò)地址、加密類型等內(nèi)容。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么KRB_AS_REP

AS-> Client:發(fā)送 Client 密碼加密的 sessionkey-as 和票據(jù) TGT(KRBTGT HASH 加密的 sessionkey-as 和 TimeStamp)

在 KDC 中存儲(chǔ)了域中所有用戶的密碼 HASH,當(dāng) AS 接收到 Client 的請(qǐng)求之后會(huì)根據(jù) KDC 中存儲(chǔ)的密碼來解密,解密成功并且驗(yàn)證信息。驗(yàn)證成功后返回給 Client 由 Client 密碼 HASH 加密的 sessionkey-as 和 TGT(由 KRBTGT HASH 加密的 sessionkey-as 和 TimeStamp 等信息)。

(2)TheTicket-Granting Service (TGS) Exchange

KRB_TGS_REQ

Client ->TGS 發(fā)送 Authenticator2 (sessionkey-as 加密 TimeStamp) 和票據(jù) TGT(KRBTGT HASH 加密的 sessionkey-as 和 TimeStamp)

Client 接收到了加密后的 Sessionkey-as 和 TGT 之后,用自身密碼解密得到 Sessionkey-as,TGT 是由 KDC 密碼加密,Client 無法解密。這時(shí) Client 再用 Sessionkey-as 加密 TimeStamp 和 TGT 一起發(fā)送給 KDC 中的 TGS(TicketGranting Server)票據(jù)授權(quán)服務(wù)器換取能夠訪問 Server 的票據(jù)。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么KRB_TGS_REP

TGS-> Client 發(fā)送 密文 1(sessionkey-as 加密 sessionkey-tgs) 和 票據(jù) ST(Server 密碼 HASH 加密 sessionkey-tgs)

TGS 收到 Client 發(fā)送過來的 TGT 和 Sessionkey-as 加密的 TimeStamp 之后,首先會(huì)檢查自身是否存在 Client 所請(qǐng)求的服務(wù)。如果服務(wù)存在,則用 KRBTGT 密碼解密 TGT。一般情況下 TGS 會(huì)檢查 TGT 中的時(shí)間戳查看 TGT 是否過期,且原始地址是否和 TGT 中保存的地址相同。驗(yàn)證成功之后將用 sessionkey-as 加密的 sessionkey-tgs 和 Server 密碼 HASH 加密的 Sessionkey-tgs 發(fā)送給 Client。

(3)TheClient/Server Authentication Exchange

KRB_AP_REQ

Client ->Server 發(fā)送 Authenticator3(sessionkey-tgs 加密 TimeStamp) 和票據(jù) ST(Server 密碼 HASH 加密 sessionkey-tgs)

Client 收到 sessionkey-as 加密的 sessionkey-tgs 和 Server 密碼 HASH 加密的 sessionkey-tgs 之后用 sessionkey-as 解密得到 sessionkey-tgs,然后把 sessionkey-tgs 加密的 TimeStamp 和 ST 一起發(fā)送給 Server。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么KRB_AP_REP

Server-> Client

server 通過自己的密碼解密 ST,得到 sessionkey-tgs, 再用 sessionkey-tgs 解密 Authenticator3 得到 TimeStamp,驗(yàn)證正確返回驗(yàn)證成功。

這就是 Kerberos 認(rèn)證的流程,如果還想知道更詳細(xì)的信息可以參考下面鏈接。

https://tools.ietf.org/html/rfc4120.html

3.PAC

在 Kerberos 最初設(shè)計(jì)的幾個(gè)流程里說明了如何證明 Client 是 Client 而不是由其他人來冒充的,但并沒有聲明 Client 有沒有訪問 Server 服務(wù)的權(quán)限,因?yàn)樵谟蛑胁煌瑱?quán)限的用戶能夠訪問的資源是有區(qū)別的。

所以微軟為了解決這個(gè)問題在實(shí)現(xiàn) Kerberos 時(shí)加入了 PAC 的概念,PAC 的全稱是 Privilege Attribute Certificate(特權(quán)屬性證書)??梢岳斫鉃榛疖囉幸坏茸灿卸茸?,而 PAC 就是為了區(qū)別不同權(quán)限的一種方式。

(1)PAC 的實(shí)現(xiàn)

當(dāng)用戶與 KDC 之間完成了認(rèn)證過程之后,Client 需要訪問 Server 所提供的某項(xiàng)服務(wù)時(shí),Server 為了判斷用戶是否具有合法的權(quán)限需要將 Client 的 User SID 等信息傳遞給 KDC,KDC 通過 SID 判斷用戶的用戶組信息,用戶權(quán)限等,進(jìn)而將結(jié)果返回給 Server,Server 再將此信息與用戶所索取的資源的 ACL 進(jìn)行比較,最后決定是否給用戶提供相應(yīng)的服務(wù)。

PAC 會(huì)在 KRB_AS_REP 中 AS 放在 TGT 里加密發(fā)送給 Client,然后由 Client 轉(zhuǎn)發(fā)給 TGS 來驗(yàn)證 Client 所請(qǐng)求的服務(wù)。

在 PAC 中包含有兩個(gè)數(shù)字簽名 PAC_SERVER_CHECKSUM 和 PAC_PRIVSVR_CHECKSUM,這兩個(gè)數(shù)字簽名分別由 Server 端密碼 HASH 和 KDC 的密碼 HASH 加密。

同時(shí) TGS 解密之后驗(yàn)證簽名是否正確,然后再重新構(gòu)造新的 PAC 放在 ST 里返回給客戶端,客戶端將 ST 發(fā)送給服務(wù)端進(jìn)行驗(yàn)證。

(2)Server 與 KDC

PAC 可以理解為一串校驗(yàn)信息,為了防止被偽造和串改,原則上是存放在 TGT 里,并且 TGT 由 KDC hash 加密。同時(shí)尾部會(huì)有兩個(gè)數(shù)字簽名,分別由 KDC 密碼和 server 密碼加密,防止數(shù)字簽名內(nèi)容被篡改。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

同時(shí) PAC 指定了固定的 User SID 和 Groups ID,還有其他一些時(shí)間等信息,Server 的程序收到 ST 之后解密得到 PAC 會(huì)將 PAC 的數(shù)字簽名發(fā)送給 KDC,KDC 再進(jìn)行校驗(yàn)然后將結(jié)果已 RPC 返回碼的形式返回給 Server。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

0x03 Kerberos 與 SPN

1 SPN 簡介

服務(wù)主體名稱(SPN:ServicePrincipal Names)是服務(wù)實(shí)例(可以理解為一個(gè)服務(wù),比如 HTTP、MSSQL)的唯一標(biāo)識(shí)符。Kerberos 身份驗(yàn)證使用 SPN 將服務(wù)實(shí)例與服務(wù)登錄帳戶相關(guān)聯(lián)。如果在整個(gè)林或域中的計(jì)算機(jī)上安裝多個(gè)服務(wù)實(shí)例,則每個(gè)實(shí)例都必須具有自己的 SPN。如果客戶端可能使用多個(gè)名稱進(jìn)行身份驗(yàn)證,則給定服務(wù)實(shí)例可以具有多個(gè) SPN。SPN 始終包含運(yùn)行服務(wù)實(shí)例的主機(jī)的名稱,因此服務(wù)實(shí)例可以為其主機(jī)的每個(gè)名稱或別名注冊(cè) SPN。

如果用一句話來說明的話就是如果想使用 Kerberos 協(xié)議來認(rèn)證服務(wù),那么必須正確配置 SPN。

2 SPN 格式與配置:

在 SPN 的語法中存在四種元素,兩個(gè)必須元素和兩個(gè)額外元素,其中<service class>和<host>為必須元素:

<serviceclass>/<host>:<port>/<service name>

<service class>:標(biāo)識(shí)服務(wù)類的字符串

<host>:服務(wù)所在主機(jī)名稱

<port>:服務(wù)端口

<service name>:服務(wù)名稱

例:

如果我想把域中一臺(tái)主機(jī) S2 中的 MSSQL 服務(wù)注冊(cè)到 SPN 中則可以使用命令:

Setspn-A MSSQLSvc/s2.yunying.lab:1433 tsvc

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

注冊(cè)成功之后可以通過下面兩個(gè)命令來查看已經(jīng)注冊(cè)的 SPN。

setspn –q */* setspn -T yunying.lab –q */*

SPN 在其注冊(cè)的林中必須是唯一的。如果它不唯一,則身份驗(yàn)證將失敗。

在注冊(cè) SPN 時(shí),可以使用 NetBIOS 名稱,如 s2。也可以使用 FQDN(FullyQualified Domain Name 全限定域名),如 s2.yunying.lab。有可能存在某一種名稱注冊(cè)的 SPN 不能成功訪問的情況,如果沒有配置正確可以換一種名稱試一試。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

一般情況下基于主機(jī)的服務(wù)會(huì)省略后面兩個(gè)組件,格式為<service class>/<host>:

 MSSQLSvc/s2.yunying.lab

如果服務(wù)使用非默認(rèn)端口或者此主機(jī)存在多個(gè)服務(wù)實(shí)例的情況下,需要包括端口號(hào)或服務(wù)名:

 MSSQLSvc/ s2.yunying.lab:1433

3 SPN 掃描

在了解了 Kerberos 和 SPN 之后我們可以通過 SPN 來獲取我們想要的信息,比如想知道域內(nèi)哪些主機(jī)安裝了什么服務(wù),我們就不需要再進(jìn)行批量的網(wǎng)絡(luò)端口掃描。在一個(gè)大型域中通常會(huì)有不止一個(gè)的服務(wù)注冊(cè) SPN,所以可以通過「SPN 掃描」的方式來查看域內(nèi)的服務(wù)。相對(duì)于通常的網(wǎng)絡(luò)端口掃描的優(yōu)點(diǎn)是不用直接和服務(wù)主機(jī)建立連接,且隱蔽性更高。

   (1) 掃描工具

掃描工具有多種,下面挑選幾種較為常見的工具來說明一下:

powershell 腳本使用之前使用 Import-module 命令先加載。

Discover-PSMSSQLServers:

Discover-PSMSSQLServers 是 Powershell-AD-Recon 工具集中的一個(gè)工具,用來查詢已經(jīng)注冊(cè)了的 MSSQL 類型的 SPN。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

GetUserSPNs:

GetUserSPNs 是 Kerberoast 工具集中的一個(gè) powershell 腳本,用來查詢域內(nèi)注冊(cè)的 SPN。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

PowerView:

PowerView 是由 Will Schroeder(https://twitter.com/harmj0y)開發(fā)的 Powershell 腳本,在 Powersploit 和 Empire 工具里都有集成,PowerView 相對(duì)于上面幾種是根據(jù)不同用戶的 objectsid 來返回,返回的信息更加詳細(xì)。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

還有一些其他的腳本,使用方法基本類似,可以自己選擇合適的工具使用,本文使用的工具會(huì)在文章底部標(biāo)注下載鏈接。

   (2) 原理說明

在 SPN 掃描時(shí)我們可以直接通過腳本,或者命令去獲悉內(nèi)網(wǎng)已經(jīng)注冊(cè)的 SPN 內(nèi)容。那如果想了解這個(gè)過程是如何實(shí)現(xiàn)的,就需要提到 LDAP 協(xié)議。

LDAP 協(xié)議全稱是 LightweightDirectory Access Protocol,一般翻譯成輕量目錄訪問協(xié)議。是一種用來查詢與更新 Active Directory 的目錄服務(wù)通信協(xié)議。AD 域服務(wù)利用 LDAP 命名路徑(LDAP naming path)來表示對(duì)象在 AD 內(nèi)的位置,以便用它來訪問 AD 內(nèi)的對(duì)象。

LDAP 數(shù)據(jù)的組織方式:

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

更直觀的說可以把 LDAP 協(xié)議理解為一個(gè)關(guān)系型數(shù)據(jù)庫,其中存儲(chǔ)了域內(nèi)主機(jī)的各種配置信息。

在域控中默認(rèn)安裝了 ADSI 編輯器,全稱 ActiveDirectory Service Interfaces Editor (ADSI Edit),是一種 LDAP 的編輯器,可以通過在域控中運(yùn)行 adsiedit.msc 來打開(服務(wù)器上都有,但是只有域控中的有整個(gè)域內(nèi)的配置信息)。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

通過 adsiedit.msc 我們可以修改和編輯 LADP,在 SPN 查詢時(shí)實(shí)際上就是查詢 LADP 中存儲(chǔ)的內(nèi)容。

比如在我們是實(shí)驗(yàn)環(huán)境域 YUNYING.LAB 中,存在名為 svcserver 的一個(gè) OU(OrganizationUnit,可以理解為一個(gè)部門,如開發(fā)部、財(cái)務(wù)部等等),其中包含了 tsvc 這個(gè)用戶,從用戶屬性中可以看到 tsvc 注冊(cè)過的 SPN 內(nèi)容。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

當(dāng)我們?cè)谝慌_(tái)主機(jī)執(zhí)行

setspn -T yunying.lab -q */*

命令查詢域內(nèi) SPN 時(shí),通過抓包可以看到正是通過 LDAP 協(xié)議向域控中安裝的 LDAP 服務(wù)查詢了 SPN 的內(nèi)容。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

所以其實(shí)那些 Powershell 腳本其實(shí)主要就是通過查詢 LDAP 的內(nèi)容并對(duì)返回結(jié)果做一個(gè)過濾,然后展示出來。

0x04 Kerberoasting

在前面介紹 Kerberos 的認(rèn)證流程時(shí)說到,在 KRB_TGS_REP 中,TGS 會(huì)返回給 Client 一張票據(jù) ST,而 ST 是由 Client 請(qǐng)求的 Server 端密碼進(jìn)行加密的。當(dāng) Kerberos 協(xié)議設(shè)置票據(jù)為 RC4 方式加密時(shí),我們就可以通過爆破在 Client 端獲取的票據(jù) ST,從而獲得 Server 端的密碼。

下圖為設(shè)置 Kerberos 的加密方式,在域中可以在域控的「組策略管理」中進(jìn)行設(shè)置:

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

設(shè)置完成之后運(yùn)行里輸入「gpupdate」刷新組策略,策略生效。

1 早期的 Kerberoasting

Kerberoasting 這種攻擊方式最初應(yīng)該是由 TimMedin(https://twitter.com/TimMedin)提出,下面我們通過實(shí)驗(yàn)來進(jìn)行演示。

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

域:YUNYING.LAB

域控:WindowsServer 2008 R2 x64(DC)

域內(nèi)主機(jī):Windows7 x64(s1):用戶 ts1

域內(nèi)主機(jī):Windows Server2008 R2 x64(s2):用戶 tsvc

所需工具:

Kerberoast 工具包

Mimikatz

攻擊流程:

一、在域內(nèi)主機(jī) s1 中通過 Kerberoast 中的 GetUserSPNs.ps1 進(jìn)行 SPN 掃描。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么也可以使用 GetUserSPNs.vbs 工具。 
kerberos的基本原理以及SPN掃描的內(nèi)容是什么

二、根據(jù)掃描出的結(jié)果使用微軟提供的類 KerberosRequestorSecurityToken 發(fā)起 kerberos 請(qǐng)求,申請(qǐng) ST 票據(jù)。

(這個(gè)類的詳情可以參考https://docs.microsoft.com/en-us/dotnet/api/system.identitymodel.tokens.kerberosrequestorsecuritytoken?redirectedfrom=MSDN&view=netframework-4.7.2)

PS C:\> Add-Type -AssemblyNameSystem.IdentityModelPS C:\> New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/s2:1433"

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

可以看到這個(gè)過程通過 AS-REQ、AS-REP、TGS-REQ、TGS-REP 這四個(gè)認(rèn)證流程,獲取到 RC4 方式加密的票據(jù)。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

三、Kerberos 協(xié)議中請(qǐng)求的票據(jù)會(huì)保存在內(nèi)存中,可以通過 klist 命令查看當(dāng)前會(huì)話存儲(chǔ)的 kerberos 票據(jù)。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

使用 mimikatz 導(dǎo)出。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么kerberos的基本原理以及SPN掃描的內(nèi)容是什么

使用 kerberoast 工具集中的 tgsrepcrack.py 工具進(jìn)行離線爆破,成功得到 tsvc 賬號(hào)的密碼 admin1234!

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

2 Kerberoasting 的「新姿勢」

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

域:YUNYING.LAB

域控:WindowsServer 2008 R2 x64(DC)

域內(nèi)主機(jī):Windows7 x64(s1):用戶 ts1

域內(nèi)主機(jī):WindowsServer 2008 R2 x64(s2):用戶 tsvc

所需工具:

Invoke-Kerberoast.ps1

HashCat

攻擊流程:

在之前的 Kerberoasting 中需要通過 mimikatz 從內(nèi)存中導(dǎo)出票據(jù),Invoke-Kerberoast 通過提取票據(jù)傳輸時(shí)的原始字節(jié),轉(zhuǎn)換成 John the Ripper 或者 HashCat 能夠直接爆破的字符串。

環(huán)境不變,在 s1 主機(jī)上使用 Invoke-Kerberoast 腳本 (這里使用的是 Empire 中的 Invoke-Kerberoast.ps1)。

Invoke-kerberoast -outputformat hashcat |fl

這里–outputformat 參數(shù)可以指定輸出的格式,可選 John the Ripper 和 Hashcat 兩種格式,這里以 Hashcat 做演示。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

這個(gè)腳本申請(qǐng)?jiān)L問的是 MSSQLSvc/s2.yunying.lab:1433 這個(gè) SPN。查看數(shù)據(jù)包可以看到 Invoke-Kerberoast 輸出的 Hash 值就是 TGS-REP 中返回的票據(jù)內(nèi)容,然后拼接成了 Hashcat 可以直接爆破的格式(以$krb5tgs$23*開頭的)。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

把內(nèi)容保存至文檔,也可以直接重定向到 TXT 文件:

PS C:> Invoke-Kerberoast-Outputformat Hashcat | fl > test1.txt

二、使用 HASHCAT 工具進(jìn)行破解:

PSC:> hashcat64.exe –m 13100 test1.txt password.list --force

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

可以看到這里已經(jīng)離線破解成功,輸出了 s2 的密碼 admin1234!。在這里–m 表示選擇不同的加密類型,其中 13100 對(duì)應(yīng)的是 Kerberos 5 TGS-REP 類型的密文。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

Hashcat 能爆破的類型非常多,還有 NTLM HASH 等,更多的 Hashcat 的類型可以參考:https://hashcat.net/wiki/doku.php?id=example_hashes

3 Invoke-kerberoast 的實(shí)現(xiàn)

最初進(jìn)行這個(gè)實(shí)驗(yàn)的時(shí)候是直接在 GitHub 上搜索的 Invoke-kerberoast,當(dāng)時(shí)下載的是https://github.com/malachitheninja/Invoke-Kerberoast這個(gè)地址的,但是下載完之后發(fā)現(xiàn)這個(gè)地址的工具并不能正常使用,查看代碼發(fā)現(xiàn)在字符串拼接時(shí)格式的問題,輸出的內(nèi)容并不符合 Hashcat 的格式。然后直接使用了 Empire 中的 Invoke-kerberoast.ps1 腳本(下載地址: https://github.com/EmpireProject/Empire)。下面就拿這個(gè)腳本來說明。

在 Invoke-kerberoast 中通過兩個(gè)關(guān)鍵函數(shù)看腳本執(zhí)行的主要流程,一個(gè)是 function Invoke-Kerberoast {} 一個(gè)是 functionGet-DomainSPNTicket {}。

首先在 Invoke-Kerberoast 函數(shù)中通過腳本中的函數(shù) Get-DomainUser 查詢組內(nèi)所有用戶 LDAP 庫中存儲(chǔ)的內(nèi)容,并去除 krbtgt 之后通過管道符傳給 Get-DomainSPNTicket。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

Get-DomainUser 輸出的值(-erroraction"Silentlycontinue"消除 powershell 中的紅字告警,也可以直接去掉):

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

函數(shù) Get-DomainSPNTicket 在接收到 Get-DomainUser 的輸出結(jié)果后提取 SPN(ServicePrincipalName)字段的值,然后取其中的第一個(gè)賦值給變量 UserSPN。我們?cè)诖a中添加 echo 語句,然后再執(zhí)行可以看到本次的結(jié)果選取了 SPN 列表中的第一條 MSSQLSvc/s2:SQLEXPRESS。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

通過 KerberosRequestorSecurityToken 類的 GetRequest() 函數(shù)發(fā)起 kerberos 請(qǐng)求。隨后通過匹配返回值,提取票據(jù)內(nèi)容。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

將提取的票據(jù)的值組合成 Hashcat 要求的格式之后賦值給變量 HashFormat,也就是最終我們可以用 Hashcat 或者 John theRipper 來爆破的值。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

同樣,上圖框中的變量$Etype 的值是 23,實(shí)際上就是 RC4 加密算法的代號(hào)。

kerberos的基本原理以及SPN掃描的內(nèi)容是什么

總結(jié)下來 Kerberoasting 的本質(zhì)是通過破解在 Kerberos 認(rèn)證流程中的 KRB_TGS_REP 這個(gè)過程中 TGS 返回給 Client 的票據(jù)內(nèi)容來進(jìn)行密碼的獲取,并且這種方式是離線爆破,過程較為隱蔽。

關(guān)于kerberos的基本原理以及SPN掃描的內(nèi)容是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

文章名稱:kerberos的基本原理以及SPN掃描的內(nèi)容是什么
文章來源:http://muchs.cn/article44/pjjsee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、軟件開發(fā)、域名注冊(cè)、移動(dòng)網(wǎng)站建設(shè)品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營