写在前面
取证在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内存取证还有很多方面,后期将持续更新。