volatility内存取证

  • Post author:
  • Post category:其他




写在前面

取证在CTF中占比越来越大,甚至某些比赛中misc全是取证。在之前的比赛中本人表示束手无策很难受,所以乘着实习摸鱼期间学习了一下。



volatility适用场景

volatility常用于以下镜像文件的取证:raw、vmen、dmp、img。



volatility的安装

因为volatility安装并不复杂,且网上教程很多,所以简略带过。

1、git clone https://github.com/volatilityfoundation/volatility.git直接拉去github上面镜像。可能会出现要求安装依赖,跟着提示来就可以了。

2、https://www.volatilityfoundation.org/releases官网下载地址,下载对应安装包,打开安装目录终端python setup.py install进行安装

未安装依赖报错(不影响volatility正常使用):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IpGkvxFO-1644239229095)(./picture/volatility未安装插件报错.png)]
在这里插入图片描述

全部依赖安装完毕后:

在这里插入图片描述



volatility一些基本命令

-h:**help。


-f

:指定镜像。


imageinfo

:用于获取当前镜像的基本信息。


pslist

:用于枚举系统中的进程。主要包括偏移地址,进程PID,父进程ID号,线程数量,句柄数量,进程会话ID号以及进程开始和结束时间。

psscan

,可以展示所有父进程和子进程,以及隐藏的病毒。

pstree

可以展示树状图。


filescan

:显示系统已经打开的文件,包括隐藏文件。


netscan

:发现TCP/UDP端口和监听器。

**memdump:**将进程在内存中的所有页存入一个文件中。

**prcodump:**获取进程的可执行文件。

**–profile:**后接系统名。

**-p:**指定PID。

**-Q:**后接内存地址。

**-D/–dump-dir:**储存文件。,后接存储目录。

**-o:**后接注册表的virtual地址。



组合使用

1、查看系统镜像:

python vol.py -f 1.raw imageinfo

这个时候可以看到镜像的基本信息在获取了系统镜像文件之后,就在后面输入

--profile=系统名

系统名这里以Win7SP0x86为例,即接下来都为

python vol.py -f 1.raw --profile=Win7SP0x86

2、网上很多先举例进程,举例注册表之类的。wha1e表示先从简单的开始找,说不定有意外收获。

python vol.py -f 1.raw --profile=Win7SP0x86 filescan | grep "flag"

也可以替换成key,password,hint等关键信息试试看。

如果有发现flag等字眼,可以提取出来

python vol.py -f 1.raw --profile=Win7SP0x86 dumpfiles -Q 0x233666 --dump-dir=./

3、举例进程

python vol.py -f 1.raw --profile=Win7SP0x86 pslist

或者使用pstree

python vol.py -f 1.raw --profile=Win7SP0x860 pstree

提取进程

python vol.py -f 1.raw --profile=Win7SP0x86 memdump -p 332 -D ./

提取出dump文件后就可以对其进行查找,是否存在key,password,或者直接存在flag。如果都没有,接着寻找。

举个栗子

python vol.py -f 1.raw --profile=Win7SP0x86 pslist | find "chrome.exe"

可以列出所有chrome浏览器的进程,然后提取

常见Windows进程名

TrueCrypt.exe 磁盘加密工具notepad.exe 自带记事本mspaint.exe 自带画图工具iexplore.exe IE浏览器DumpIt.exe 内存镜像提取工具

4、举例注册表

python vol.py -f 1.raw --profile=Win7SP0x86 hivelist

提取注册表信息。

python vol.py -f 1.raw --profile=WinpSP0x86 hivedump -o 0x23333 -D ./

5、获取ie浏览器历史记录

python vol.py -f 1.raw --profile=Win7SP0x86 iehistory

wha1e表示以前碰到过几次浏览器取证的题目。

6、扫描图片的命令

python vol.py -f 1.raw --profile=Win7SP0x86 filescan | grep -E "jpg|png|jpeg|bmp|gif"

获取屏幕截屏

python vol.py -f 1.raw --profile=Win7SP0x86 screenshot --dump-dir=./

7、列举用户名以及密码

python vol.py -f 1.raw --profile=Win7SP0x86 printkey -K "SAM\Domains\Account\Users\Names"

获取最后登录用户的用户名以及密码

python vol.py -f 1.raw --profile=Win7SP0x86 printkey -K "SOFTWARE\Microsoft\Windows Nt\CurrentVersion\Winlogon"

8、查看cmd命令

python vol.py -f 1.raw --profile=Win7SP0x86 cmdscan

查看cmd详细情况

python vol.py -f 1.raw --profile=Win7SP0x86 cmdline

9、复制、剪切板

python vol.py -f 1.raw --profile=Win7SP0x86 clipboard
python vol.py -f 1.raw --profile=Win7SP0x86 dlllist -p 3820



例题实操


V&NCTF2020内存取证


题目链接

https://buuoj.cn/match/matches/3/challenges

先查看一下系统镜像(这里配错图了)

在这里插入图片描述

试试有没有flag等字眼,没有。
在这里插入图片描述

查看进程
在这里插入图片描述

发现三个关键进程:mspaint.exe,notepad.exe,truecrypt.exe。这三项进程在上文均有介绍,分别为自带画图工具,自带记事本,磁盘加密工具。稍后依次进行分析。

在这里插入图片描述


mspaint.exe


修改后缀名为data通过gimp打开。

在这里插入图片描述

本人表示看到这种文件很头疼,完全无从下手,在通过广大的互联网学习之后,总算知道如何处理此类文件。

先修改图片长宽,随便选一组比较常见且分辨率并不算高的参数。这里的初始参数选的是1280*720。然后改变位移,得到以下图片,疑似文字。

在这里插入图片描述

此时通过修改长宽将文字显现,最终通过改变位移完整展示图片内容如下所示:

在这里插入图片描述

改图为key上下翻转,翻过来后为:1YxfCQ6goYBD6Q。


notepad.exe


对于notepad查找并不方便,这里推荐editbox插件,editbox插件可以显示有关编辑控件的信息。

在这里插入图片描述

因为原题链接已经停了,Buuctf直接提供了VOL。然后就需要用到Elcomsoft Forensic Disk Decryptor这个工具。

具体用法如下(如果没有截屏保持默认即可):

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里选择挂载该磁盘

在这里插入图片描述

在这里插入图片描述

挂载成功后打开即可获得最终key

在这里插入图片描述

然后用veracrypt挂载镜像,密码为刚才获得的key

uOjFdKu1jsbWI8N51jsbWI8N5

在这里插入图片描述

最后打开磁盘,使用mspaint获得的passwd解压压缩包,获取flag

在这里插入图片描述

验证一下

在这里插入图片描述

flag正确,比赛时间已过无法提交:D。


小结

这题花费了我很多时间,最后还是靠wp复现出来的,质量很高,收获颇丰。个人感觉这篇wp在我所能搜索到的来说是最全面的了。本文主要为我学习取证的一个记录,有任何不足错误的地方欢迎联系我。路漫漫其修远兮,吾将上下而求索。volatility内存取证还有很多方面,后期将持续更新。



版权声明:本文为qq_51652400原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。