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::debug
或SYSTEM
帐户),这与使用一个官方 API 的“Pass-The-Ticket”不同; - 这个新版本的“Pass-The-Hash”用哈希替换
RC4 keys
了 Kerberosntlm
(和/或替换了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 | mimikatz # sekurlsa::minidump lsass.dmp |
SAM&SYSTEM
可以通过注册表文件 SAM 和 SYSTEM 获取 NTLM 哈希。
1 | mimikatz # lsadump::sam /SAM:SAM /SYSTEM:system |
mimikatz 变种
- Meterpreter 有 mimikatz 插件
- Volatility 有 mimikatz 插件
- PowerShell 有 mimikatz 的 DLL 反射