内网渗透基石篇之域控制器

2021-08-24 14:52:46 浏览数 (1)

前言

在通常情况下,即使拥有管理员权限,也无法读取域控制器中的ndts.dit文件,但是我们又非常想获得这个文件的内容,这个时候就需要使用windows本地卷影拷贝服务VSS。在活动目录中,所有的数据都保存在ntds.dit文件中,ntds.dit是一个二进制文件,包含用户名、散列值、组、GPP、OU等与活动目录相关的信息,它和SAM文件一样,被windows系统锁死。卷影拷贝服务VSS,本质上属于快照技术的一种,主要用于备份和恢复,即使文件当前处于锁死状态。

一、 使用卷影拷贝服务提取ntds.dit

当我们拿下域控服务器时候,如果想要拿到所有用户的hash,那么就涉及到ntds.dit 在通常情况下,即使拥有管理员权限,也无法读取域控制器中的C:\WindowsNTDSntds.dit文件(活动目录始终访问这个文件,所以文件被禁止读取)。使用Windows本地卷影拷贝服务,就可以获得文件的副本 在活动目录中,所有的数据都保存在ntds.dit文件中。ntdis.dit是一个二进制文件,存储位置为与控制的%SystemRoot%ntdsntds.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.创建快照

代码语言:javascript复制
ntdsutil.exe snapshot "activate instance ntds" create q q

2.加载创建的快照

代码语言:javascript复制
ntdsutil snapshot “mount {665f12d7-37f5-45e3-8aba-1d1944173ec9}” quit quit

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

代码语言:javascript复制
copy C:$SNAP_202007261544_VOLUMEC$windowsntdsntds.dit c:windowstempntds.dit

4.最后卸载并删除快照

代码语言:javascript复制
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

下载地址:

代码语言:javascript复制
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:windowssystem32目录下。diskshadow有交互和非交互两种模式。在使用交互模式时候,需要登陆远程桌面的图形化管理界面。不管是交互模式还是非交互模式,都可以使用exec调取一个脚本文件来执行相关命令 在渗透测试中,可以使用diskshadow.exe来执行命令 首先需要将执行的命令写入txt文件中 比如 exec c:windowssystem32calc.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:WindowsSystem32config) 所以可以直接使用上面说到的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

代码语言:javascript复制
./configure
make
sudo  make install 
sudo ldconfig

然j后使用esedbexport进行恢复操作

代码语言:javascript复制
esedbexport -m tables ntds.dit

导出散列值

2.2 使用impacket 工具包导出散列值

使用impacket工具包导出散列值(Linux)

使用NTDS Dumpex 导出散列值(Windows)

但是在开始之前,我们需要做一些准备工作,一个是ntds.dit活动目录文件,另一个是system.save文件, 可以通过HiveJack这个小工具轻松获得,github上可以下载。

代码语言:javascript复制
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 HKLMSYSTEM c:windowstempSys.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 获取域账号和域散列值

代码语言:javascript复制
privilege::debug
log
lsadump::lsa /inject

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

总结:

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

0 人点赞