【CTF】利用volatility与Gimp实现Windows内存取证

29次阅读

共计 2221 个字符,预计需要花费 6 分钟才能阅读完成。

0x01 题目要求
题目提供了一个大小为 256MB 的内存镜像,显然我们需要从当中找到一些有趣的东西。

0x02 分析过程
既然是内存取证,首先就想到一个强大的取证工具——volatility
该工具在 kali 当中已集成,位于应用程序 -> 数字取证 ->volatility。
下面就针对该镜像,记录一下使用该工具进行内存取证的过程。
1. volatility
volatility 命令手册:https://github.com/volatility… 我这里只列举一些常用的命令

1. 镜像基本信息
volatility -f mem.data imageinfo

关键看 Suggested Profile(s) 项,这里是工具判断该镜像的架构,同时也会提供相应架构的命令用于分析该镜像,本题中可能性最大的架构是 Win7SP1x64,然后在调用命令时加上 –profile=Win7SP1x64 就可以了,继续往下看。
2. 列举可使用的命令
volatility -f mem.data –profile=Win7SP1x64 –help

常用的命令如下:

命令
功能

cmdline/cmdscan
列出历史 cmd 命令

filescan
扫描文件,可配合 grep 使用

netscan
扫描建立的连接和套接字,类似于 netstat

pslist/psscan
列出进程列表

svcscan
扫描 windows 服务列表

screenshot
显示 GDI 样式的截屏

memdump
从内存 dump 进程的内存

dumpfiles
从内存 dump 文件

3. 搜索进程
首先我们要看一下出题人在镜像里干了什么。
volatility -f mem.data –profile=Win7SP1x64 pslist

可以看到这里有 3 个应用程序进程,分别是:wordpad 写字板 MineSweeper 扫雷 mspaint 画图,而且再看看启动时间,mspaint 相隔之后的进程有长达 10 分钟时间,emmm,出题人应该是就在这段时间写的 flag。接下来我们就看一下有没有什么可疑的文件留存。
4. 查看可疑文件
查看文档
volatility -f mem.data –profile=Win7SP1x64 filescan | grep “doc\|docx\|rtf”
没有。。。

查看图片
volatility -f mem.data –profile=Win7SP1x64 filescan | grep “jpg\|jpeg\|png\|tif\|gif\|bmp”
也没有。。。

查看桌面
volatility -f mem.data –profile=Win7SP1x64 filescan | grep “Desktop”

难道出题人还用扫雷来做个图???(开个玩笑)
看来 flag 并没有保存为文件,看看有没有其他突破口。
5. 查看截图
volatility -f mem.data –profile=Win7SP1x64 screenshot –dump-dir=./
导出的图片如下

说实话我根本看不出来这是个什么界面。。。
6. 其他调查
查看命令行输入
volatility -f mem.data –profile=Win7SP1x64 cmdline
查看系统用户名
volatility -f mem.data –profile=Win7SP1x64 printkey -K “SAM\Domains\Account\Users\Names”
查看网络连接
volatility -f mem.data –profile=Win7SP1x64 netscan
在做了很多无用功之后,只能去求助 Google 了,结果搜出来 2 篇文章,比较有参考价值:
google-ctf-2016-forensic1:https://www.rootusers.com/goo… 从内存导出 raw 图片:https://w00tsec.blogspot.com/…

上述文章介绍了一种方法,通过利用 volatility 将进程内存 dump 下来,然后利用 Gimp 打开内存数据,查看镜像中的系统界面,于是我们开始实施。
2.Gimp

使用 volatility dump 内存:(2768 是 mspaint 的 pid)
volatility -f mem.data –profile=Win7SP1x64 memdump -p 2768 –dump-dir=./

将 2768.dmp 重命名为 2768.data,使用 Gimp 打开,打开方式选择 ” 原始图像数据 ”

出现这样一个界面,做如下操作:

图像类型:RGB Alpha

调整三个属性:高度调整到合适值就不用变了,我的最大是 733。确定一个宽度,通常是常见的显示器分辨率,然后不断调整位移,使之出现可见的图像,也就是镜像中的系统界面。
(接下来就是我不断测试的过程,测试了 2 小时。。。)
分辨率是 1920 时:可以看见 3 个程序,之前的 GDI 纯白色框线界面就是扫雷的结算界面,写字板里写的也不是 flag,看来就只有画图里有 flag 了。

分辨率是 1024 时:扫雷界面。证明在不同分辨率下,会显示不同的界面。

分辨率是 1568 时:部分画图界面,可能离成功不远了。

分辨率是 1457 时:getFlag!

事后发现,微调位移为图像的左右方向平移,大幅调节位移则是图像的上下方向平移。而宽度不变时,始终显示的都是同一幅图像。

0x03 小结一下
为了凑够 3 点,就写一下小结吧

谷哥大法好,樯外确实有很多好的题解
熟悉使用各类取证分析工具,是快速解出此题的关键
可以参透出题人心理,猜测可能的 flag 位置

正文完
 0