参考:
Kerberos
前面是我的踩坑过程,后面是解决办法。
在Wireshark的SampleCaptures得到了一个Krb-816.zip的数据包,在指定文件中附带的密钥表文件之后,wireshark对Kerbeos流量进行了解密。
也就是说如果有密钥表文件,就能对Kerberos流量进行解密。
搜索资料后发现,Microsoft提供了一个名为Ktpass的命令行工具,可以生成keytab(密钥表的格式),kali中的krb5-user
提供了ktutil
可以编辑 keytab,进行添加、合并、删除等操作。
于是我的想法变为了使用该工具导出KDC中的krbtgt账户密钥和一个用户的密钥。
1 2 3 4
| ktpass -out krbtgt.keytab -princ kadmin/changepw.0day.org@OWA2010SP3.0day.org -mapUser krbtgt@0day .org -pass Admin12345 -ptype KRB5_NT_PRINCIPAL
|
到了这里,问题变得复杂了,krbtgt账户无法获取明文密码,普通域用户无法指定SPN。
在搜索之后,发现Wireshark的wiki中提到了一种方案,从 NTDS.dit 文件和system.hive 生成 keytab。
获取ntds.dit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #获取htds.dit的方式很多,这里使用的是卷影拷贝服务(Volume Shadow Copy Service),使用的工具为ntdsutil.exe,域控默认安装 #该工具可本地、可远程,用于备份和恢复(即使目标文件被系统锁定) PS C:\Users\Administrator> ntdsutil.exe # 可交互模式和非交互模式 C:\Windows\system32\ntdsutil.exe: snapshot snapshot: activate instance ntds Active instance set to "ntds". snapshot: create Creating snapshot... Snapshot set {577af247-22fd-4147-9349-2667abf0f0f6} generated successfully. snapshot: mount {577af247-22fd-4147-9349-2667abf0f0f6} Snapshot {75f5268e-ab2c-4166-a9a2-9d2cff572722} mounted as C:\$SNAP_202003221117_VOLUMEC$\ #中括号部分为GUID,注意生成的数字不相同 # 一行命令的版本 ntdsutil snapshot "activate instance ntds" create quit quit #创建快照 ntdsutil snapshot "mount {243aa9a2-29b8-40fb-9664-d2ff77ecb605}" quit quit #挂载快照
#开启另一cmd copy C:\$SNAP_202003221117_VOLUMEC$\Windows\NTDS\ntds.dit c:\temp\ntds.dit #注意挂载快照提示的路径 snapshot: unmount {75f5268e-ab2c-4166-a9a2-9d2cff572722} Snapshot {75f5268e-ab2c-4166-a9a2-9d2cff572722} unmounted. snapshot: delete {75f5268e-ab2c-4166-a9a2-9d2cff572722} Snapshot {75f5268e-ab2c-4166-a9a2-9d2cff572722} deleted. snapshot: list all No snapshots found. snapshot: quit #一行命令的版本 ntdsutil snapshot "unmount {243aa9a2-29b8-40fb-9664-d2ff77ecb605}" quit quit ntdsutil snapshot "delete {243aa9a2-29b8-40fb-9664-d2ff77ecb605}" quit quit
|
获取system.hive
1 2
| reg save hklm\system system.hive #system.hive 使用注册表导出
|
安装编译esedbexport
esedbexport是libesedb库的一部分,所以的编译安装libesedb库。
1 2 3 4 5 6 7 8 9
| wget https://github.com/libyal/libesedb/releases/download/20191220/libesedb-experimental-20191220.tar.gz tar -zxvf libesedb-experimental-20191220.tar.gz cd libesedb-20191220/ sudo apt-get install autoconf automake autopoint libtool pkg-config
./configure make make sudo ldconfig
|
如果一切顺利,在/usr/local/bin/
中有了esedbexport
,可以使用esedbexport
命令。
使用esedbexport
处理ntds.dit,导出Active Directory数据
使用NTDSXtract导出Kerberos密钥
1 2 3 4 5 6 7
| git clone https://github.com/csababarta/ntdsxtract.git cd ntdsxtract/ python dskeytab.py ../ntds.dit.export/datatable.3 ../ntds.dit.export/link_table.5 ../system.hive /home/kali/ntdsxtract/ ad.keytab
|
使用klist -ekt
验证其中的文件,可以看到域中所有账户都记录了密钥
其中机器账户和krbtgt
账户均在其中,接下来的事情就很简单了,在wireshark中加载密钥表文件,就能解密 0day.org 域中的全部流量。