由于volatility2.6 和3.0 版本之间略有差异,所以特写本文档用来学习参考。
在vol3 中不需要指定profile,而是在命令中指定系统。 如windows.info、Windows.pslist
使用示例
文档说明
本文作者:SwBack
创作时间:2022年6月14日,15:47:05
知乎:https://www.zhihu.com/people/back-88-87
CSDN:https://blog.csdn.net/qq_30817059
百度搜索: SwBack
系统信息
┌──(root💀kali)-[~/tool/volatility3-1.0.0]
└─# python3 vol.py -f /root/1/mem.dump windows.info
Volatility 3 Framework 1.0.0
Progress: 100.00 PDB scanning finished
Variable Value
Kernel Base 0xf8017aa7d000
DTB 0x1ab000
Symbols jar:file:/root/tool/volatility3-1.0.0/volatility3/symbols/windows.zip!windows/ntkrnlmp.pdb/A0011F02EE8442749E83E5180D8B19A6-1.json.xz
Is64Bit True
IsPAE False
primary 0 WindowsIntel32e
memory_layer 1 FileLayer
KdVersionBlock 0xf8017adb7ff0
Major/Minor 15.15063
MachineType 34404
KeNumberProcessors 1
SystemTime 2019-08-05 08:36:09
NtSystemRoot C:\Windows
NtProductType NtProductWinNt
NtMajorVersion 10
NtMinorVersion 0
PE MajorOperatingSystemVersion 10
PE MinorOperatingSystemVersion 0
PE Machine 34404
PE TimeDateStamp Sat Jun 3 08:53:36 2017
查看系统进程列表
python3 vol.py -f /root/1/mem.dump windows.pslist
查看系统进程树
python3 vol.py -f /root/1/mem.dump windows.pstree
查看系统命令行参数
获取到exe程序的运行时所带的参数(偶尔也有意外收获)
python3 vol.py -f /root/1/mem.dump windows.cmdline
独特的思考方式
众所周知,Downloads目录是下载目录,该目录下的文件均不是系统自带,而这里存在lass.exe的 程序,所以根据题目来判断,这个程序很有可能是恶意程序. 然后可以导出程序进行逆向分析。
列出已加载的dll模块
python3 vol.py -f 1/mem.dump windows.dlllist
查看系统中存在的文件
一般通过grep 来进行筛选,根据进程中的程序及题目要求来筛选,grep “png|jpg|gif|jpeg|zip|rar|7z|txt|Downloads|Desktop”
python3 vol.py -f ../1/mem.dump windows.filescan |grep lass.exe
d
独特的思考方式
有些题目答案自己无法找到,比如找不到用户的创建时间,在注册表中无法找到,那么可以尝试搜索 Security.evtx
文件 找到系统的安全日志,然后下载下来进行读取。其中包含用户的创建、删除、登录等包含用户操作的所有信息
如下图示例
┌──(root??kali)-[~/volatility]
└─# python3 vol.py -f ../1/mem.dump windows.filescan |grep "evtx"
下载系统中的文件
这个插件和2.6中的差异较大, 在3.0的版本中,已经找不到
memdump
procdump
等插件了只有一个
dumpfiles
我们可以通过-h
来查看下参数 在3.0的版本中一定要指定物理地址
进行下载可以发现,不仅可以通过
虚拟地址
还可以通过PID
、物理地址
进行下载文件. 也不再
通过-D 指定保存的路径
#我这边下载的是Security.evtx文件 | 默认保存在当前目录
python3 ../volatility/vol.py -f Windows7.mem windows.dumpfiles --physaddr="0x23e2dcf20"
#我们只需要evtx.dat 文件 vacb是缓存对我们没有帮助.
将evtx.dat 重命名删除.dat后缀后 ,放到与镜像同版本的系统中(window7\window10)因为兼容问题,简单测试 win7日志无法在win10打开
然后根据Window 日志系统的事件ID来筛选出我们想要获取的信息即可。
查看进程环境变量
python3 ../volatility/vol.py -f mem.dump windows.envars
独特的思考方式
环境变量中基本上都有系统的名称 及当前使用的用户 等信息。如果题目要求提交电脑名称,注册表地址不记得那么可以到此处找一找。
查看注册表[重点]
与注册表相关的信息均为重点,这里将会稍微详细一点,所以将其设为一级目录
#这和2.6版本 差不多,不同的是后面的参数
python3 ../volatility/vol.py -f mem.dump windows.registry.hivelist
# 还有一个参数是hivescan 不过它只列出虚拟地址,这里我们在做题的时候基本用不到,就省略不讲了.有兴趣可以自己尝试
打印注册表地址
注册表的地址我们一般不会完全记住,通常都是记部分。那么列取指定路径的注册表就很有必要
这里差异比较大,2.6 是通过-K 参数来指定路径。
#2.6 打印路径
volatility -f mem.dump --profile=Win7SP1x64 printkey -K "SAM"
#3.0 打印路径 为了方便对比,这里我将实际的路径进行了删除
python3 vol.py -f windows.mem windows.registry.printkey --key "SYSTEM"
#或者通过虚拟地址直接指定需要列取的注册表 然后通过key打印子项
python3 vol.py -f Windows7.mem windows.registry.printkey --offset="0xf8a000a85420" --key "SAM\Domains"
下方示例为打印该内存中存在多少用户
下载注册表到本地
之前通过windows.registry.hivelist 命令查看了注册表,有时候通过注册表无法直观的获取到我们想要得到的信息。那么我们只能将其下载到本地,然后借助第三方工具进行分析.
#下载所有注册表到本地
python3 ../volatility/vol.py -f Windows7.mem windows.registry.hivelist --dump
注意事项
1.导出的注册表在本地查看发现是乱码,因为经过了rot13加密
2.日志文件无法导出(无关版本问题,正在测试镜像是否存在问题)
3.遇到window10的内存镜像,采用vol3.0版本,3.0版本对windows10 非常友好.2.6有可能无法识别profile。
4.Windows系统之间很有可能出现不兼容的情况,从window7 导出的日志,在window11下会出现报错,但是在window10下会成功解析。
获取用户名密码密文
python3 /root/tools/volatility3/vol.py -f OtterCTF.vmem windows.lsadump
命令汉化翻译(仅供参考,不全)
常用插件:
layerwriter:列出内存镜像platform信息
linux.bash:从内存中恢复bash命令历史记录
linux.check_afinfo:验证网络协议的操作功能指针
linux.check_syscall:检查系统调用表中的挂钩
linux.elfs:列出所有进程的所有内存映射ELF文件
linux.lsmod:列出加载的内核模块
linux.lsof:列出所有进程的所有内存映射
linux.malfind:列出可能包含注入代码的进程内存范围
linux.proc:列出所有进程的所有内存映射
linux.pslist:列出linux内存映像中存在的进程
linux.pstree:列出进程树
mac.bash:从内存中恢复bash命令历史记录
mac.check_syscall:检查系统调用表中的挂钩
mac.check_sysctl:检查sysctl处理程序的挂钩
mac.check_trap_table:检查trap表中的挂钩
mac.ifconfig:列出网卡信息
mac.lsmod:列出加载的内核模块
mac.lsof:列出所有进程的所有内存映射
mac.malfind:列出可能包含注入代码的进程内存范围
mac.netstat:列出所有进程的所有网络连接
mac.psaux:恢复程序命令行参数
mac.pslist:列出linux内存映像中存在的进程
mac.pstree:列出进程树
mac.tasks:列出Mac内存映像中存在的进程
windows.info:显示正在分析的内存样本的OS和内核详细信息
windows.callbacks:列出内核回调和通知例程
windows.cmdline:列出进程命令行参数
windows.dlldump:将进程内存范围DLL转储
windows.dlllist:列出Windows内存映像中已加载的dll模块
windows.driverirp:在Windows内存映像中列出驱动程序的IRP
windows.driverscan:扫描Windows内存映像中存在的驱动程序
windows.dumpfiles.DumpFiles 下载Windows中的文件
windows.filescan:扫描Windows内存映像中存在的文件对象
windows.handles:列出进程打开的句柄
windows.malfind:列出可能包含注入代码的进程内存范围
windows.moddump:转储内核模块
windows.modscan:扫描Windows内存映像中存在的模块
windows.mutantscan:扫描Windows内存映像中存在的互斥锁
windows.pslist:列出Windows内存映像中存在的进程
windows.psscan:扫描Windows内存映像中存在的进程
windows.pstree:列出进程树
windows.procdump:转储处理可执行映像
windows.registry.certificates:列出注册表中存储的证书
windows.registry.hivelist:列出内存映像中存在的注册表配置单元
windows.registry.hivescan:扫描Windows内存映像中存在的注册表配置单元
windows.registry.printkey:在配置单元或特定键值下列出注册表项
windows.registry.userassist:打印用户助手注册表项和信息
windows.ssdt:列出系统调用表
windows.strings:读取字符串命令的输出,并指示每个字符串属于哪个进程
windows.svcscan:扫描Windows服务
windows.symlinkscan:扫描Windows内存映像中存在的链接