记一次内存取证出题

[toc]

以前虽然做过几次内存取证题,但是并不知道内存取证题是怎么出的,所以就自己尝试了一下生成内存文件来进行分析,也正好试试在生成内存文件的系统里各种操作和volatility各个命令对应情况。以下会记录本次出题所有遇到的问题。

前言

内存取证我使用的是windows7系统,以前我虚拟机里搭的都是linux环境,所以需要去下载windows镜像。

下载windows镜像要注意的就是,是否是SP1版的,因为不是SP1版的是没法安装vmtools的,会严重影响体验。

生成raw内存文件我利用的是dumpit,可以一键生成内存文件。内存文件大小基本等同于你设置的虚拟机内存上限,所以出题的时候可以设置的小一点,比如我设置的就是1GB。

出题过程

首先,是cmd,当我在cmd中输入一些数据,并且不退出,此时生成内存文件,会在pstree命令中得到cmd.exe,并且我是开着好几个记事本的,所以也会生成很多个notepad.exe,还有DumpIt.exe,是由于我是利用这个工具生成的内存文件,生成过程中当然是开着的,所以也会识别到。其他的大多都是些系统文件,所以在做题过程中作用不大。

然后利用cmdscan命令可以看到我刚刚在cmd中输入的数据,cmdscan使用方法:

volatility -f [内存文件] --profile=[配置文件] cmdscan

其次,我在桌面上放了个放了个encode.txt文件,所以在使用以下命令时可以查找到这个文件:

volatility -f [内存文件] --profile=[配置文件] filescan | grep Desktop

此时就可以利用dumpfiles命令提取出来了

然后我还放了个hint.txt文件在电脑的某一个深处,所以在filescan grep hint的时候,就可以提取出这个文件了。当然,如果直接grep txt,encode.txt和hint.txt都能直接拿到,这点算是降低难度了。

最后是mimikatz,mimikatz可以获得windows明文登陆密码,但是不是volatility安装时自带的插件,需要后续自己安装。

以下mimikatz命令,就能看出此用户的密码是7yue7yue666

出题时遇到的问题

首先是硬盘问题,由于我的kali虚拟机一开始vmtools安装的有点残缺,虽然一直可以用,但没有 vmware-toolbox-cmd。内存文件本身就比较大,而且出题需要自己一直测试。我测试了好几十次,然后没有释放硬盘,导致了自己物理机硬盘超负载,曾一度飙红,最低甚至达到54KB。

一开始还傻傻的利用lsof | grep deleted等等用以释放内存的命令来操作,妄图增加点硬盘容量。

后来查到是利用vmware-toolbox-cmd来进行vmdk压缩。于是重装了vmtools,之后就可以使用了。

/usr/bin/vmware-toolbox-cmd disk shrink / 

但是由于自己F盘只剩250MB,VMware提示物理机硬盘容量过小,压缩失败。然后C,D,E盘都只剩下了20G左右,新买的硬盘还没到。于是开始苦逼的硬盘修改容量操作。利用DiskGenius将C,D,E盘都只留下5GB,其他的全部分给F盘。

最终终于释放掉了30G的vmdk文件,心里顿时舒畅。然后开始苦逼的还硬盘容量操作,把F盘的容量还给C,D,E。由于分盘操作每次都需要重启电脑,期间重启电脑操作进行了至少10次。还好,至少结果是好的,而且也学到了如何释放虚拟机硬盘容量,以后就不会再出现这种问题了。

其次,就是在生成内存文件的时候。利用dumpit有时候会识别不到文件,导致文件缺失。有时候虽然识别到了文件,但是dumpfiles的时候却一直分离不出来。观察文件大小可知都是些2MB左右的文件。问了下JC师傅,得知如果文件过大,可能就会有识别不出来的情况,1MB已经算是比较大的文件了。

当我把文件全部控制在10KB左右的时候,这类问题出现的就少了。但还是会出现有时候dumpfiles识别的到,有时候识别不到的情况。这也使得我重新生成了好几次内存文件,一次次测试,再一次让我的kali硬盘缓存飙升。

还有一点就是我如果在win7中放了zip文件,我的filescan一直识别不到zip,目前还不知道为什么。以后如果明白了再补充。

本题WriteUp

下载地址:https://pan.baidu.com/s/1lmFgsIhnofvDyPEZAF4Y2w

提取码:f17m

首先,下载文件可以得到一个hint.txt和一个raw文件

hint.txt里的数据是:

这里才没有hint呢,想要hint?自己去找吧

这里看似没用,其实也提示了可以在内存取证时利用filescan | grep hint 命令得到真正的hint.txt。

将raw文件命名成123.raw,方便写命令。

先查看profile配置文件,得到profile=Win7SP1x64:

volatility -f 123.raw imageinfo

根据题目介绍可知,桌面上有点东西,查看桌面:

volatility -f 123.raw --profile=Win7SP1x64 filescan | grep Desktop

发现encode.txt,利用dumpfiles分离出文件:

volatility -f 123.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000003e0a12f0  --dump-dir=.

得到 file.None.0xfffffa800497eca0.dat 文件:

打开可以得到:

链接: https://pan.baidu.com/s/1F1SqIDIKHhu1ykDosUvwKg
提取码: pvc6

下载文件得到一个加密了的zip文件。这时候想到之前的hint.txt文件,继续利用filescan和dumpfiles分离出hint.txt:

volatility -f 123.raw --profile=Win7SP1x64 filescan | grep hint
volatility -f 123.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000003d6faa80  --dump-dir=.

hint.txt里的文件内容:

压缩包密码是电脑登陆密码

windows的登陆密码可以利用mimikatz来进行获取,如果不知道mimikatz的话,其实在cmd里也有提示。

如果利用cmdscan来查看内容的话,可以得到提示:

volatility -f 123.raw --profile=Win7SP1x64 cmdscan

无论是已知mimikatz可以获取登陆密码,还是通过cmdscan获得hint,最后都可以知道是使用mimikatz,使用mimikatz命令:

volatility -f 123.raw --profile=Win7SP1x64 mimikatz

得到此用户名的登陆密码:7yue7yue666

打开压缩包后,获得一张人畜无害的图片

利用binwalk或者foremost,可以分离出两张一样的图片:

一般遇到两张一模一样的图片,会有两种解题方法,一种是异或,一种是盲水印。此题是python3的盲水印

github上有盲水印脚本,需要的可自行下载:

https://github.com/chishaxie/BlindWaterMark

python bwmforpy3.py decode 1.png 2.png flag.png

放大即可看清flag:flag{my_gf_1s_m1sc}

发表评论