【CTFshow 电子取证】 JiaJia-CP-1-2-3(图文详解)

本文介绍了如何使用Volatility2.6这款开源内存取证工具,对内存镜像进行分析,以获取佳佳电脑的用户名、计算器运行时间和解压文件的相关信息,展示了在电子取证中的实际应用过程。
摘要由CSDN通过智能技术生成

解题所用工具

内存取证分析工具Volatility2.6

Volatility 是一款Python开发的开源的内存取证分析工具,用于对内存镜像中的恶意代码,操作系统,应用程序,可疑活动等进行分析取证。支持Windows,Linux,MaC,Android等多类型操作系统系统的内存取证。本次使用Python2环境下的Volatility2.6进行解题。下面附上工具下载链接:

官网下载地址:Release Downloads | Volatility Foundation

github开源项目地址:GitHub - volatilityfoundation/volatility: An advanced memory forensics framework

Volatility安装教程及简单使用见:

Volatility2.6内存取证工具安装及入门_volatility安装教程-CSDN博客

内存取证-volatility工具的使用 (史上更全教程,更全命令)-CSDN博客

关于内存与注册表

内存中的注册表项

当Windows操作系统启动时,它会将注册表的部分数据加载到内存中,以便系统和应用程序可以快速地访问这些信息。这些数据在内存中可以更快地被读取和修改,以便系统能够动态地调整其行为和配置。

系统性能和速度

将注册表数据加载到内存中有助于提高系统对配置信息的访问速度,因为内存的读取速度比硬盘快得多。这有助于加快系统的启动速度和应用程序的响应速度。

修改注册表内容

当用户或应用程序修改注册表时,这些更改通常会首先发生在内存中,随后才会被写回到硬盘中的注册表文件。这种设计可以提高操作系统的响应速度,并减少对硬盘的频繁访问,从而减少了硬盘的磨损。

数据同步

操作系统在合适的时机会将内存中的更改同步到硬盘上的注册表文件中,以确保数据的持久性和一致性。这也是为什么在关闭或重新启动时操作系统可能需要一些时间,因为它在将数据写回硬盘之前会等待一段时间。

总的来说,内存中保存注册表的一部分数据,这样做可以提高系统性能和响应速度。通过将某些注册表数据加载到内存中,操作系统和应用程序能够更加高效地使用和修改这些信息。
 

JiaJia-CP-1

审题

题目提供的镜像文件:JiaJia_CP.7z,解压出来是一个内存镜像文件:JiaJia_Co.raw

需要从内存镜像中获取两个信息:

1.佳佳的电脑用户名叫什么(即C:\Users\{name})
2.最后一次运行计算器的时间?(格式为yyyy-mm-dd_hh:mm:ss,注意冒号为英文冒号)

flag提交格式:ctfshow{md5(A1_A2)}

大致思路

从JiaJia_Co.raw中识别系统版本

从注册表中获取计算机内有哪些用户

打印注册表中UserAssist相关信息,获取计算器程序最后一次运行的时间

实现步骤

第一步  使用imageinfo插件,获取系统版本

vol.py -f JiaJia_Co.raw imageinfo

从imageinfo结果中可知,该内存镜像的系统版本为 Win7SP1x64

第二步  使用hivelist插件,打印注册表配置单元列表

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 hivelist

其实到这里,就可以看到计算机中的用户 JiaJia

而注册表  HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names  这个目录下保存着当前计算机中的所有用户,可以使用 printkey 插件,并用-K参数指定这个目录并打印

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 printkey -K "SAM\DOMAINS\Account\Users\Names"

发现除了Administrator用户和Guest用户之外,还有一个JiaJia用户,即为所求的佳佳的电脑用户名

第三步  使用userassist插件打印注册表中UserAssist相关信息

跟踪在资源管理器中打开的可执行文件和完整路径,其中UserAssist保存了windows执行的程序的运行次数和上次执行日期和时间。

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 userassist

在输出结果中找到计算器进程,即  calc.exe  其中Last updated那一行即是计算器这个程序最后一次运行的时间

除此之外,也可以使用timeliner插件,最大程度提取信息,创建内存中的各种痕迹信息的时间线,将所有操作系统事件以时间线的方式展开,并用管道符和grep命令过滤出calc.exe

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 timeliner | grep "calc.exe"

这里需要注意一点:查找到的最后一次运行时间后面是UTC+0000,这是位于0时区的时间,而我们北京时间是东八区,即UTC+08:00,故需要在12:15:47基础上加8个小时,得到  20:15:47 (时区上的解释大概是这么回事)

第四步  根据题目要求格式化flag为: ctfshow{md5(JiaJia_2021-12-10_20:15:47)} -> ctfshow{079249e3fc743bc2d0789f224e451ffd}

JiaJia-CP-2

审题

需要从内存镜像中获取两个信息:

1.佳佳在公司使用了一款聊天软件,请问此软件的版本号为?

2.佳佳在网页上登录了自己的邮箱,请问佳佳的邮箱是?

flag提交格式:ctfshow{md5(A1_A2)}

大致思路

先判断出佳佳在公司使用的是什么聊天软件,再导出该软件相关的文件或者程序,或许可以获得该软件的版本号

佳佳在网页上登录了自己的邮箱,既然是在网页上登录,可以试试iehistory插件,查看浏览器的历史记录,或许可以获取到佳佳的邮箱(实际上获取不到)

实现步骤

第一步  使用userassist插件,查看用户运行过哪些程序,并从中筛选出聊天软件

在输出结果中发现了一个桌面下的Telegram.exe程序,而Telegram是跨平台的即时通讯软件,则该软件很有可能就是佳佳在使用公司的聊天软件。

除此之外,使用 filescan 插件,提取文件对象(file objects)池信息,也可找到Telegram.exe程序。

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 filescan

但该插件相当于扫描所有的文件列表,输出内容太多,不利于分析,但可以在分析出佳佳使用的软件后,用filescan插件配个管道符和grep命令过滤出该软件,并获取该软件的虚拟地址,以便导出该程序,由此进入第二步。

第二步  使用 filescan 插件,扫描文件列表,并过滤出 Telegram 关键词

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 filescan | grep "Telegram"

在输出结果中发现两个Telegram可执行程序文件,和一个log.txt,应该是日志文件,而日志文件里极有可能保存着软件安装时的版本。从中获取了这些文件虚拟地址,即可导出这些文件,由此进入第三步。

第三步  使用 dumpfiles 提取内存中映射或缓存的文件,-Q参数指定偏移量(虚拟地址),-D 指定导出的目录地址。先导出日志文件并查看。

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000013dd413f0 -D ./

导出并查看日志文件的内容,在第一行发现了该软件安装时的版本,为3003000,不过在后面提交flag时,发现版本不对,于是再导出前面扫出的两个Telegram.exe文件中的任意一个文件,尝试提取信息。

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000013fde26a0 -D ./

导出来的文件是 .img 文件,将其文件扩展名改为 .exe ,并将该文件发送到物理机,右键属性,查看详细信息,获取文件版本,为 3.3.0.0 与前面从日志文件中获取的3003000似乎对应上了,只是格式不一样。

  

第四步  获取佳佳在网页上登录的邮箱,使用 iehistory 插件尝试获取信息

使用 iehistory 插件重建IE缓存及访问历史记录,查看浏览器历史记录,因为输出太多,为了方便分析,使用grep命令正则匹配一下 *@*com 的记录

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 iehistory | grep ".*@.*com"

因为题目并未说明佳佳使用的是什么邮箱,而输出结果中似乎有好几种邮箱的影子,比如 jiajia@sohu.com、jiajia@sogou 等邮箱,尝试输入flag也都错误。突然想到,正常情况下邮箱@符号前应该不会如jiajia这样字符那么少。于是需要换一种方法试一试,比如使用 screenshot 插件,获取保存基于GDI窗口的伪截屏,或许可以获取我们想要的信息。

screenshot插件用于获取被分析系统的屏幕截图。这个插件可以帮助取证分析人员捕捉被分析系统的图像,并且能够识别和提取被截取图像中的关键信息。

使用screenshot插件可以有以下几个应用场景:

  1. 用户活动监控:通过捕获屏幕截图,分析人员可以了解用户在系统上的活动,例如他们打开的文件、所处的应用程序或浏览的网页。这些信息对于了解系统的使用模式和用户行为非常有帮助。
  2. 发现恶意软件行为:通过截取系统中运行恶意软件时的屏幕截图,分析人员可以深入了解恶意软件的行为和功能。这有助于确定该恶意软件可能所做的事情,例如可能修改的界面、创建的弹出窗口或其他可疑活动。
  3. 检查系统状态:屏幕截图可以提供系统在特定时间点的状态快照。例如,当系统遭遇意外关机时,屏幕截图可以显示断开的会话、打开的文件或其他有关系统状态的关键信息。

使用screenshot插件获取屏幕截图,-D参数指定输出的保存路径

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 screenshot -D ./

输出结果中有12张png图片,依次打开查看,在其中一张中发现了佳佳的邮箱为:a2492853776@163.com 

第五步  根据题目要求,格式化flag为:ctfshow{md5(3.3.0.0_a2492853776@163.com)} -> ctfshow{f1420b5294237f453b7cc0951014e45a}

JiaJia-CP-3

审题

需要从内存镜像中获取两个信息:

1.佳佳最后一次运行固定在任务栏的google chrome的时间(格式为yyyy-mm-dd_hh:mm:ss,注意冒号为英文冒号)

2.佳佳解压了从chrome下载了一个压缩文件,此文件的相关内容信息已经写入了到环境中,请问文件的内容是?

flag提交格式:ctfshow{md5(A1_A2)}

大致思路

其实这一题的第一问,和 JiaJia-CP-1 的第二问基本上是一个问题,方法也跟之前差不多,只不过这里第一问强调的是佳佳最后一次运行固定在任务栏的google chrome的时间(这里有个小坑,不知道是我理解的问题,还是答案的问题,下面说明),仍然使用userassist插件获取程序最后一次运行的时间

第二问佳佳将一个压缩文件的相关内容信息写入到了环境中,则查看所有进程的环境变量获取就可以获取到我们想要的信息

实现步骤

第一步  使用userassist插件打印注册表中UserAssist相关信息,找到固定在任务栏的google chrome

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 userassist

这里发现了一个 Google Chrome.lnk 从路径上看,很明显是一个用户固定在任务栏上的文件快捷方式,那么Last updated 一行中的时间 2021-12-10 12:21:36 UTC+0000 应该就是题目要求的佳佳最后一次运行固定在任务栏的google chrome的时间,将这个时间 +8 个小时(JiaJia-CP-1中第三步有解释),最后提交flag时发现不对。然后继续查看 userassist 输出的内容,发现如下:

这里又发现一个 chrome.exe ,这是chrome程序文件,将这个文件的最后一次运行时间 2021-12-10 12:28:43 UTC+0000 +8 小时后提交flag时发现正确。具体原因暂不清楚,其实userassist输出结果中本就只有两个关于chrome的文件,一个不行换另一个就可以,至于前面那一个为什么不行,有大佬知道的还望在私信或评论区告知!

这题,也可以如 JiaJia-CP-1 中第二问一样使用 timeliner 插件并用管道符和grep命令过滤出chrome

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 timeliner | grep "chrome"

命令跑了很久,也没跑出固定在任务栏的chrome快捷方式,但是答案跑出来了。(记得时间要加上 8 小时)

第二步  使用 envars 插件,显示所有进程的环境变量。

vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 envars

在Pid为 3396 那一个环境变量中获取了文件的相关内容信息为 Th1s_i5_Ur_P5wd

第三步  根据题目要求,格式化flag为:ctfshow{md5(2021-12-10_20:28:43_Th1s_i5_Ur_P5wd)} -> ctfshow{6430ef3578f7e1206506995cae3d2c24}

总结

总体上不难,重点在于内存取证工具Volatility 2.6的使用和内存简单的分析上,更重要的是耐心。因为自身对电子取证了解的也不多,技能与认知有限,以上步骤中有不严谨的地方还望指出。当然还有别的解题方法,待我对电子取证有更进一步的认识后,再来修改润色,提供更多的解题方法。下面对本题所用到的命令进行一次命令总结

插件解释示例
imageinfo查看/识别镜像信息vol.py -f JiaJia_Co.raw imageinfo
hivelist打印注册表配置单元列表vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 hivelist
printkey打印注册表项及其子项和值vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 printkey -K "SAM\DOMAINS\Account\Users\Names"
userassist打印注册表中UserAssist相关信息vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 userassist
timeliner创建内存中的各种痕迹信息的时间线vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 timeliner
filescan提取文件对象池信息vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 filescan
dumpfiles提取内存中映射或缓存的文件vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000013dd413f0 -D ./
iehistory重建IE缓存及访问历史记录vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 iehistory
screenshot基于GDI Windows的虚拟屏幕截图保存vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 screenshot -D ./
envars显示进程的环境变量vol.py -f JiaJia_Co.raw --profile=Win7SP1x64 envars

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值