前言
在通常情况下,即使拥有管理员权限,也无法读取域控制器中的ndts.dit
文件, 但是我们又非常想获得这个文件的内容,这个时候就需要使用windows本地卷影拷贝服务VSS。在活动目录中,所有的数据都保存在ntds.dit文件中,ntds.dit是一个二进制文件,包含用户名、散列值、组、GPP、OU等与活动目录相关的信息,它和SAM文件一样,被windows系统锁死。卷影拷贝服务VSS,本质上属于快照技术的一种,主要用于备份和恢复,即使文件当前处于锁死状态。
一、 使用卷影拷贝服务提取ntds.dit
当我们拿下域控服务器时候,如果想要拿到所有用户的hash,那么就涉及到ntds.dit 在通常情况下,即使拥有管理员权限,也无法读取域控制器中的C:\\Windows\NTDS\ntds.dit文件(活动目录始终访问这个文件,所以文件被禁止读取)。使用Windows本地卷影拷贝服务,就可以获得文件的副本 在活动目录中,所有的数据都保存在ntds.dit文件中。ntdis.dit是一个二进制文件,存储位置为与控制的%SystemRoot%\ntds\ntds.di。ntds.dit中包含(但不限于)用户名、散列值、组、GPP、OU等与活动目录相关的信息,它和SAM文件一样,是被windows操作系统锁定的。
1.1 通过ntdsutil.exe 提权 ntds.dit
ntdsutil.exe是一个为活动目录提供管理机制的命令行工具。使用ntdsutil.exe,可以维护和管理活动目录数据库、控制单个主机操作、创建应用程序目录分区、删除由未使用活动目录安装向导(DCPromo.exe)成功降级的控制器留下的元数据等。该工具默认安装在域控制器上,可以在域控制器上直接操作,也可以通过域内机器在与控制上远程操作。ntdsutil.exe支持的操作系统有win2003,2008,2012 在与控制的命令行环境中输入以下命令,创建一个快照。该快照包含Windows中所有的文件,且在复制文件时候不会受到windows锁定机制的限制.
1.创建快照
ntdsutil.exe snapshot "activate instance ntds" create q q
2.加载创建的快照
ntdsutil snapshot “mount {665f12d7-37f5-45e3-8aba-1d1944173ec9}” quit quit
3.复制出快照中的ntds.dit文件
copy C:\$SNAP_202007261544_VOLUMEC$\windows\ntds\ntds.dit c:\windows\temp\ntds.dit
4.最后卸载并删除快照
ntdsutil snapshot “unmount {33a3344e-4c5e-4fc0-821e-fdc7a7aac36d}” “delete {33a3344e-4c5e-4fc0-821e-fdc7a7aac36d}” quit quit
1.2 利用vssadmin 提权 ntds.dit
vssadmin是win2008以及win7提供的vss管理工具,可以用于创建和删除卷影拷贝,拷贝,列出卷影拷贝的信息、显示已安装的所有卷影拷贝写入程序(writers)和提供程序(providers),以及改变卷影拷贝的存储空间的大小等.
1.创建一个C盘的卷影拷贝
2.复制卷影拷贝中的Ntds.dit文件到C:\盘下
1.3 利用vssown.vbs脚本提取ntds.dit
vssown.vbs脚本的功能和vssadmin类型,可以用于创建和删除卷影拷贝,以及启动和停止卷影拷贝服务 //启动卷影拷贝服务 cscript vssown.vbs /start //创建一个C盘的卷影拷贝 cscript vssown.vbs /create c //列出当前卷影拷贝 cscript vssown.vbs /list //删除卷影拷贝 cscript vssown.vbs /delete
下载地址:
https://github.com/borigue/ptscripts/tree/master/windows
1.启动卷影拷贝服务
2.列出当前目录下的卷影拷贝,并复制出其中的ntds.dit文件
1.4 使用ntdsutil 的 IFM 创建卷影拷贝
在使用ntdsutil创建IFM时候,需要进行生成快照、加载、将ntds.dit和计算机的SAM文件复制到目标文件夹中操作 只需要一条命令即可
1.通过IFM复制到c:\test\文件夹下
2.然后复制
1.5 使用diskshadow导出ntds,dit
微软官方文档中说明“diskshadow.exe 这款工具可以使用卷影拷贝服务(vss)所提供的多个功能。因为diskshadow的代码是微软签名的,而且win2008、2012、2016都默认包含diskshadow,所以它也能够用来操作卷影拷贝服务并导出ntds.dit。diskshadow的功能与vshadow类型,且同样位于c:\windows\system32\目录下。 diskshadow有交互和非交互两种模式。在使用交互模式时候,需要登陆远程桌面的图形化管理界面。不管是交互模式还是非交互模式,都可以使用exec调取一个脚本文件来执行相关命令 在渗透测试中,可以使用diskshadow.exe来执行命令 首先需要将执行的命令写入txt文件中 比如 exec c:\windows\system32\calc.exe
1.首先写入1.txt
2.使用diskshadow.exe加载该txt文件。
3.然后执行。
1.6 监控卷影拷贝服务的使用情况
监控卷应拷贝服务以及任何涉及活动目录数据库文件(ntds.dit)的可疑操作行为 监控System Event ID 7036(卷影拷贝服务进入运行状态的标志)的可疑实例,以及创建vssvc.exe进程的事件 监控创建diskshadow.exe以及相关子进程的事件 监控客户端设备中的diskshadow.exe实例创建事件。 通过日志监控新出现的逻辑驱动器映射事件
二、 导出ntds.dit 中的散列值
linux平台下 使用impack工具包导出散列值 使用impacket工具包中的secretsdump可以解析ntds.dit文件,导出散列值 前提需要:域控服务器的ntds.dit文件,SYSTEM文件(C:\Windows\System32\config) 所以可以直接使用上面说到的ntdsutil的IFM创建卷影拷贝,既能够得到ntds.dit也能得到SYSTEM文件 python secretsdump.py -system /neiwang/ntds.dit/SYSTEM -ntds /neiwang/ntds.dit/ntds.dit LOCAL
2.1 使用esedbexport恢复ntds.dit
./configure make sudo make install sudo ldconfig
然j后使用esedbexport进行恢复操作
esedbexport -m tables ntds.dit
导出散列值
2.2 使用impacket 工具包导出散列值
使用impacket工具包导出散列值(Linux)
使用NTDS Dumpex 导出散列值(Windows)
但是在开始之前,我们需要做一些准备工作,一个是ntds.dit
活动目录文件,另一个是system.save
文件, 可以通过HiveJack这个小工具轻松获得,github上可以下载。
git clone https://github.com/CoreSecurity/impacket.git cd impacket/ python setup.py install
1.安装impacket
2.导出散列值
2.3 在windows 下解析并导出域账号和域散列值
使用NTDSDumpex.exe可以进行导出散列值的操作。
将ntds.dit、NTDSDumpex.exe、system.hive 放在同一目录下,输入如下命令即可导出域账号和散列值。
NTDSDumpEx.exe下载地址:https://github.com/zcgonvh/NTDSDumpEx
获取key:reg save HKLM\SYSTEM c:\windows\temp\Sys.hiv
使用NTDSDumpEx获取所有域用户的Hash
NTDSDumpEx.exe -d ntds.dit -s system.hive -o hash.txt
三、 利用dcsync获取域散列值
利用dcsync获取域散列值 使用mimikatz转储域散列值 mimikatz有一个dcsync功能,可以利用卷影拷贝服务直接读取ntds.dit文件并检索域散列值。需要注意的是,必须使用域管理员权限运行mimikatz才可以读取ntds.dit 实现原理: 利用DRS(Directory Replication Service)协议通过IDL_DRSGetNCChanges从域控制器复制用户凭据 微软官方解释: 指定目录复制服务(DRS)远程协议,一种用于复制和管理Active Directory中数据的RPC协议。 利用条件: 获得以下任一用户的权限: Administrators组内的用户 Domain Admins组内的用户 Enterprise Admins组内的用户 域控制器的计算机帐户 https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-drsr/f977faaa-673e-4f66-b9bf-48c640241d47在域内的任意一台计算机中,以域管理员权限打开命令行环境,运行mimikatz,使用mimikatz导出域内的所有用户名以及散列值 lsadump::dcsync /domain:god.org /all /csv
3.1 使用mimikatz转储域散列值
dcsync 获取域内用户哈希值
mimikatz 转储哈希值
mimikatz 有一个 dcsync 功能,可以利用卷影拷贝服务直接读取 ntds.dit 文件并检索域散列值。
前提必须使用管理员权限运行 mimikatz 才可以读取 ntds.dit。
在域内任意一台主机,以域管理员权限执行命令:
3.2 使用dcsync 获取域账号和域散列值
privilege::debug log lsadump::lsa /inject
如果 mimikatz 没有预先执行 privilege::debug 命令,将导致权限不足、读取失败。如果用户数量太多,mimikatz 无法完全显示出来,可以先执行 log(会在mimikatz目录下生成一个文本文件,用于记录mimikatz的所有执行结果)。
总结:
内网域控制器是大型内网中最重要的一环,拿下域控的话,基本整个内网就拿下了。域控也是最主要的一环,文章主要写了使用一些工具和脚本获取关键信息。
来源:freebuf.com 2021-07-26 16:17:27 by: pony686
请登录后发表评论
注册