域控制器安全
前言
通常情况下,即使拥有管理员权限,也无法读取域控制器中的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 |
|
可以看到创建了一个GUID为0c5ecd15-d722-41fa-9e0a-424c4d19ac64的快照
加载刚刚的快照
1 |
|
使用如下命令将文件复制出来
1 |
|
输入如下命令将之前加载的快照卸载并删除
1 |
|
查看当前系统中的所有快照
1 |
|
之前创的没有删除所以有这么多
- 利用vssadmin提取ntds,dit
vssadmin是windows server 2008 及windows 7提供的vss管理工具,可用于创建和删除卷影拷贝,列出卷影拷贝的信息(只能管理系统provider创建的卷影拷贝),显示已安装的所有卷影拷贝写入程序(writers)和提供程序(providers),以及改变卷影拷贝的储存空间。
创建一个c盘卷影
1 |
|
在创建的卷影拷贝中将ntds.dit复制出来。
1 |
|
删除卷影
1 |
|
- 利用vssown.vbs脚本提取ntds.dit
1 |
|
然后可以通过copy命令将其复制出来
1 |
|
- 使用ntdsutil的IFM创建卷影拷贝
在域控制器中以管理员模式打开命令行环境,输入如下命令
1 |
|
将其拖到本地后删除
1 |
|
- 使用diskshadow导出ntds.dit
在渗透测试中可以使用diskshadow.exe来执行命令。例如将需要执行的命令”exec c:\windows\system32\calc.exe”
写入C盘目录下的command.txt文件1
diskshadow /s c:\command.txt
使用diskshadow.exe也可以用来导出ntds.dit。将如下命令写入一个文本文件
1 |
|
成功导出
导出ntds.dit中散列值
- 使用esedbexport恢复ntds.dit
1.导出ntds.dit
安装好该软件
https://github.com/libyal/libesedb/releases/tag/20210424
将文件拖入kali中
1 |
|
2.导出散列值
ntdsxtract
- 使用impacket工具包导出散列值
impacket-secretsdump
- 在windows在解析ntds.dit
1 |
|
利用dcsync获取域散列值
- 使用mimikatz转储域散列值
以域管理员权限打开命令行环境,运行mimikatz。输入如下命令,使用mimikatz导出域内的所有用户及散列值
1 |
|
使用mimikatz的dcsync功能也可以导出指定用户的散列值
1 |
|
也可以直接在域控制器中运行Mimikatz,通过转储lsass.exe进程对散列值进行Dump操作
1 |
|
- 使用dcsync获取账号和域散列值
Invoke-DCSync.ps1可以利用dcsync直接读取ntds.dit,以获取域账号和域散列值
1 |
|
项目地址: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 |
|
就会导出域中的全部hash值
- ms14-068漏洞
1 |
|
接下来进行格式转换,msf不支持bin文件导出,所以要用mimikatz文件进行格式转换.在mimikatz输入命令,导出kirbi格式文件
1 |
|
比如现在有一个低权限shell
输入 load kiwi 命令,然后输入”kerberos_ticket_use /root/0-00000000-de1ay@krbtgt-DE1AY.COM.kirbi“命令,将票据导入,接着输入 background命令,切换到meterpreter后台,使用高票据进行测试
1 |
|
就会得到高权限