volatility内存取证

文章目录

写在前面

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

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内存取证
全部依赖安装完毕后:
volatility内存取证

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

先查看一下系统镜像(这里wha1e配错图了)
volatility内存取证
试试有没有flag等字眼,没有。volatility内存取证
查看进程volatility内存取证
发现三个关键进程:mspaint.exe,notepad.exe,truecrypt.exe。这三项进程在上文均有介绍,分别为自带画图工具,自带记事本,磁盘加密工具。稍后依次进行分析。

volatility内存取证
mspaint.exe
修改后缀名为data通过gimp打开。
volatility内存取证
wha1e表示看到这种文件很头疼,完全无从下手,在通过广大的互联网学习之后,总算知道如何处理此类文件。

先修改图片长宽,随便选一组比较常见且分辨率并不算高的参数。这里wha1e的初始参数选的是1280*720。然后改变位移,得到以下图片,疑似文字。
volatility内存取证
此时通过修改长宽将文字显现,最终通过改变位移完整展示图片内容如下所示:
volatility内存取证
改图为key上下翻转,翻过来后为:1YxfCQ6goYBD6Q。

notepad.exe
对于notepad查找并不方便,这里推荐editbox插件,editbox插件可以显示有关编辑控件的信息。
volatility内存取证
因为原题链接已经停了,Buuctf直接提供了VOL。然后就需要用到Elcomsoft Forensic Disk Decryptor这个工具。
具体用法如下(如果没有截屏保持默认即可):
volatility内存取证
volatility内存取证
volatility内存取证
这里选择挂载该磁盘
volatility内存取证
volatility内存取证
挂载成功后打开即可获得最终key
volatility内存取证
然后用veracrypt挂载镜像,密码为刚才获得的key
uOjFdKu1jsbWI8N51jsbWI8N5
volatility内存取证
最后打开磁盘,使用mspaint获得的passwd解压压缩包,获取flag
volatility内存取证
验证一下
volatility内存取证
flag正确,比赛时间已过无法提交:D。

小结

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

上一篇:11 后台首页相关接口(l轮波图接口)


下一篇:在Linux端用Nonebot2整一个QQ机器人