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

0x01 题目要求

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

图片描述

0x02 分析过程

既然是内存取证,首先就想到一个强大的取证工具——volatilitygit

该工具在kali当中已集成,位于应用程序->数字取证->volatilitygithub

下面就针对该镜像,记录一下使用该工具进行内存取证的过程。windows

1. volatility

volatility命令手册: https://github.com/volatility...

我这里只列举一些经常使用的命令bash

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. 查看可疑文件

查看文档google

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

  1. 使用volatility dump内存:(2768是mspaint的pid)

    volatility -f mem.data --profile=Win7SP1x64 memdump -p 2768 --dump-dir=./

    图片描述

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

    图片描述

  3. 出现这样一个界面,作以下操做:

    • 图像类型:RGB Alpha
    • 调整三个属性:高度调整到合适值就不用变了,个人最大是733。肯定一个宽度,一般是常见的显示器分辨率,而后不断调整位移,使之出现可见的图像,也就是镜像中的系统界面。

      (接下来就是我不断测试的过程,测试了2小时。。。)

      分辨率是1920时:能够看见3个程序,以前的GDI纯白色框线界面就是扫雷的结算界面,写字板里写的也不是flag,看来就只有画图里有flag了。

      图片描述

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

      图片描述

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

      图片描述

      分辨率是1457时:getFlag!

      图片描述

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

0x03 小结一下

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

  • 谷哥大法好,樯外确实有不少好的题解
  • 熟悉使用各种取证分析工具,是快速解出此题的关键
  • 能够参透出题人心理,猜想可能的flag位置
相关文章
相关标签/搜索