Volatility是一款非常强大的内存取证工具,可用于windows,linux,mac osx,android等系统内存取证。
Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。
一. 工具的基本使用
1.1 下载安装
官网下载:https://www.volatilityfoundation.org/releases
github下载:
python2版本 https://github.com/volatilityfoundation/volatility
python3版本 https://github.com/volatilityfoundation/volatility3
这里就使用python2版本的volatility演示,使用如下命令安装。
git clone https://github.com/volatilityfoundation/volatility.git cd volatility pip install pycryptodome pip install distorm3 python2 setup.py install vol.py -h |
1.2 命令格式
命令格式
vol.py -f [image] --profile=[profile] [plugin] |
在分析之前,首先需要知道当前的镜像信息,通过imageinfo命令分析是哪个系统。
vol.py -f xx.vmem imageinfo |
如下图所示,Suggested Profile(s),猜测出多个系统信息,可能性越大的排在前面,一般取第一个,知道镜像后,就可以在--profile=中带上对应的操作系统,继续后面的分析。
1.3 常用插件
查找⽤户名密码信息。当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容
vol.py -f Target.mem --profile=Win7SP0x64 hashdum |
从注册表中提取LSA密钥信息(已解密)
vol.py -f Target.mem --profile=Win7SP0x64 lsadump |
列举出系统进程,但它不能检测到隐藏或者解链的进程
vol.py -f Target.mem --profile=Win7SP0x64 pslist |
可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程
vol.py -f Target.mem --profile=Win7SP0x64 psscan |
以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程
vol.py -f Target.mem --profile=Win7SP0x64 pstree |
提取进程, -p是进程号 -D 存储的文件夹 提取出指定进程
vol.py -f Target.mem --profile=Win7SP0x64 memdump -p xxx --dump-dir=./ |
查看服务
vol.py -f Target.mem --profile=Win7SP0x64 svcscan |
查看ie浏览器浏览历史
vol.py -f Target.mem --profile=Win7SP0x64 iehistory |
查看⽹络连接
vol.py -f Target.mem --profile=Win7SP0x64 netscan |
查看命令⾏操作
vol.py -f Target.mem --profile=Win7SP0x64 cmdscan |
查看⽂件
vol.py -f Target.mem --profile=Win7SP0x64 filescan |
提取文件
vol.py -f Target.mem --profile=Win7SP0x64 dumpfiles -Q 0xxxxxxxx -D ./ |
查看当前展示的notepad内容
vol.py -f Target.mem --profile=Win7SP0x64 notepad |
查看屏幕截图
vol.py -f Target.mem --profile=Win7SP0x64 screenshot --dump-dir=./ |
查看注册表单元
vol.py -f Target.mem --profile=Win7SP0x64 hivelist |
导出注册表, -o 注册表的virtual地址
vol.py -f Target.mem --profile=Win7SP0x64 hivedump -o 0xfffff8a001032410 |
获取注册表信息,-K “键值”
vol.py -f Target.mem --profile=Win7SP0x64 printkey -K "xxxxxxx" |
查看运⾏程序相关的记录
vol.py -f Target.mem --profile=Win7SP0x64 userassist |
二. 实例分析
题目附件下载
链接: https://pan.baidu.com/s/1aA-hqm23rgPudFW-t_dCAA 提取码: dm6
2.1 2021陇剑杯-内存分析1
第一个问题是虚拟机的密码是_?
使用 imageinfo 插件获取内存文件基本信息,分析出是哪个操作系统。
使用hashdump命令获取用户hash。
把be5593366cb1019400210101581e5d0d拿去hash解密失败。
lsadump命令获取最后登录的用户。
2.2 2018护网杯-easy_dump
查看系统信息
查看进程信息,发现notepad进程
vol.py -f easy_dump.img --profile=Win7SP1x64 pslist |
将notepad进程提取出来
vol.py -f easy_dump.img --profile=Win7SP1x64 memdump -p 2616 -D ./ |
提取出来的直接用strings是无法查看,需要添加-e参数
strings -e l 2626.dmp | grep flag #-e的参数为编码⽅式,其中l为16-bit编码 |
寻找jpg图片
vol.py -f easy_dump.img --profile=Win7SP1x64 filescan |grep -E 'jpg' |
提取图片
vol.py -f easy_dump.img --profile=Win7SP1x64 dumpfiles -Q 0x000000002408c460 -D ./ |
将file.None.0xfffffa8008355410.vacb,修改为jpg后缀,并foremost分离图片,得到一个压缩包,解压得message.img文件。
file 命令查看文件类型为ext2磁盘文件
在linux系统中使用mount 命令挂载此文件。查看hint.txt文件,内容是两列数字,很像x,y坐标。
─$ mkdir test └─$ sudo mount message.img ./test └─$ cd test └─$ls -la total 271 drwxr-xr-x 4 root root 1024 Sep 28 2018 . drwxr-xr-x 5 parallels parallels 4096 May 30 14:20 .. -rw-r--r-- 1 root root 257163 Sep 28 2018 hint.txt drwx------ 2 root root 12288 Sep 28 2018 lost+found drwx------ 4 root root 1024 Sep 28 2018 .Trash-0 └─$ cat hint.txt|more 10 10 10 11 10 12 10 13 10 14 10 15 10 16 |
使用gnuplot画图,发现二维码,扫描后得到维吉尼亚密码的key。
Here is the vigenere key: aeolus, but i deleted the encrypted message
进入.Trash-0/files/,发现.swp文件,这个文件是因为使用vim编辑文件时意外中断产生的,可以vim -r恢复,得到文件内容yise!dmsx_tthv_arr_didvi 。
维吉尼亚密码解密一下即可得flag