当前位置: 首页 > news >正文

内存取证工具Volatility学习

更新时间:2022.08.11

微信公众号:乌鸦安全

说明

本文参考了一下资料,感谢各位师傅的帮助:

https://github.com/volatilityfoundation/volatility
https://www.volatilityfoundation.org/
https://www.cnblogs.com/Junglezt/p/16027761.html (主要参考)
https://www.freebuf.com/articles/database/266738.html

1. Volatility介绍

Volatility是一款开源的内存取证分析工具,支持Windows,Linux,MaC,Android等多类型操作系统系统的内存取证方式。该工具是由python开发的,目前支持python2、python3环境。接下来小编将带领大家学习Volatility工具的安装及使用。
参考:http://www.hackdig.com/09/hack-484669.htm
volatility(挖楼推了推) 是一个开源的框架,能够对导出的内存镜像进行分析,能够通过获取内核的数据结构,使用插件获取内存的详细情况和运行状态,同时可以直接dump系统文件,屏幕截图,查看进程。
参考:https://www.cnblogs.com/Junglezt/p/16027761.html

可以使用 -h 参数获取使用方法和插件介绍,列举几个常用到的命令

imageinfo:显示目标镜像的摘要信息,这常常是第一步,获取内存的操作系统类型及版本,之后可以在 –profile 中带上对应的操作系统,后续操作都要带上这一参数

pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以

pstree:以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程

psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程

cmdscan:可用于查看终端记录

notepad:查看当前展示的 notepad 文本(–profile=winxp啥的低版本可以,win7的不行,可以尝试使用editbox)

filescan:扫描所有的文件列表

linux配合 grep 命令进行相关字符定向扫描,如:grep flag、grep -E ‘png|jpg|gif|zip|rar|7z|pdf|txt|doc’

dumpfiles:导出某一文件(指定虚拟地址)

需要指定偏移量 -Q 和输出目录 -D

memdump:提取出指定进程,常用foremost 来分离里面的文件

需要指定进程-p [pid] 和输出目录 -D

editbox:显示有关编辑控件(曾经编辑过的内容)的信息

screenshot:保存基于GDI窗口的伪截屏

clipboard:查看剪贴板信息

iehistory:检索IE浏览器历史记录

systeminfo:显示关于计算机及其操作系统的详细配置信息(插件)

hashdump:查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容(mimikatz插件可以获取系统明文密码)

mftparser:恢复被删除的文件

svcscan:扫描 Windows 的服务

connscan:查看网络连接

envars:查看环境变量

dlllist: 列出某一进程加载的所有dll文件

hivelist: 列出所有的注册表项及其虚拟地址和物理地址

timeliner: 将所有操作系统事件以时间线的方式展开
————————————————
版权声明:本文为CSDN博主「南腩男」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_53183117/article/details/122443367

2. Volatility安装

目前作者已公布了两个版本的Volatility,Volatility2是基于py2环境,Volatility3是基于py3环境,目前可以在github上下载安装,也可以直接在官网下载直接运行:
github环境:

https://github.com/volatilityfoundation/volatility

官网直接下载使用:

https://www.volatilityfoundation.org/

直接下载可执行文件直接运行:

image.png

安装的话,可以从github或者官网下载,利用python2进行安装,也可以直接下载编译好的可执行文件直接运行,在这里因为我的kali出了一点问题,所以直接下载mac版的可执行文件运行。
文件下载的话,不要使用Chrome版,下载不下来,需要使用其他的浏览器来下载。

image.png
在这里使用命令看下:./volatility_2.6_mac64_standalone -h
image.png

3. volatility使用

在这里以分析vm虚拟机的镜像文件为例:
在这复制下winserver2003的vm暂停文件:
image.png

3.1 获取内存镜像版本信息

使用方法是:volatility -f 文件名 imageinfo
直接使用命令分析:

./volatility -f 2003.vmem imageinfo

image.png
当前可以分析出来结果:

$ ./volatility -f 2003.vmem imageinfo
Volatility Foundation Volatility Framework 2.6
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : Win2003SP0x86, Win2003SP1x86, Win2003SP2x86
                     AS Layer1 : IA32PagedMemoryPae (Kernel AS)
                     AS Layer2 : FileAddressSpace (/Users/crow/Security/crow_tools/19_取证/volatility_2.6_mac64_standalone/2003.vmem)
                      PAE type : PAE
                           DTB : 0x503000L
                          KDBG : 0x8088e3e0L
          Number of Processors : 1
     Image Type (Service Pack) : 2
                KPCR for CPU 0 : 0xffdff000L
             KUSER_SHARED_DATA : 0xffdf0000L
           Image date and time : 2022-08-09 10:30:16 UTC+0000
     Image local date and time : 2022-08-09 18:30:16 +0800

3.2 pslist 列出内存中的进程

可以列出内存中运行的进程的pid,ppid等信息
volatility -f 镜像名 --profile=第一步获取的版本信息 pslist
在第一步获取的是Win2003SP0x86,所以命令组合以下就是:

./volatility -f 2003.vmem --profile=Win2003SP0x86 pslist

但是命令执行之后,并未获取到有效的进程信息:
image.png

在这里将镜像版本信息更换一下再试试:

./volatility -f 2003.vmem --profile=Win2003SP1x86 pslist

image.png

3.3 导出指定进程 memdump

在我们pslist会后,会给出进程的PID,只需要指定PID就可以将进程导出

image.png

当前svchost的进程为1256,运行命令为:

./volatility -f 2003.vmem --profile=Win2003SP1x86 memdump -p 1256 -D ./result

image.png

image.png

导出的文件名进程的PID,后缀名为dmp
可以使用strings -e l 2616.dmp | grep flag,筛选其中的flag
-e为选择字符的大小,l为32bit为一个字符

这段不是我的
[

3.4 查看网络netscan

该命令无法在2003上使用
image.png

换一个win7的试试:
获取win7的镜像信息:
image.png

获取网络:

./volatility -f win7.vmem --profile=Win7SP1x64 netscan

image.png

3.5 列出缓存在内存中的注册表 hivelist

./volatility -f win7.vmem --profile=Win7SP1x64 hivelist

image.png

3.6 扫描内存中的文件 filescan

./volatility -f win7.vmem --profile=Win7SP1x64 filescan

列出的文件会非常的多:
image.png
可以使用grep命令来查找自己需要的:
需要加上-E参数

./volatility -f win7.vmem --profile=Win7SP1x64 filescan | grep -E "txt\|jpg\|png" # 在linux|mac情况下使用

volatility -f win7.vmem --profile=Win7SP1x64 filescan | findstr "txt\|jpg\|png"  # 在Windows下使用

image.png

3.7 导出内存中的文件 dumpfiles

在这里需要3.6中找到的文件的内存地址来导出:

image.png

./volatility -f win7.vmem --profile=Win7SP1x64 dumpfiles -Q  0x000000007ce78f20  -D ./ -u 

-Q:指定文件在内存中的地址  
-D:指定文件导出的地址
-u:指定原文件名导出(不咋好用)

在这里导出的时候,发现win7无法成功,导出的文件均为0kb
image.png

在这里使用winserver2003成功:

./volatility -f 2003.vmem --profile=Win2003SP1x86 dumpfiles -Q  0x0000000002e58150 -D ./ -u

image.png
image.png

3.8 历史命令cmdscan

./volatility -f win7.vmem --profile=Win7SP1x64 cmdscan # 没记录

./volatility -f 2003.vmem --profile=Win2003SP1x86 cmdscan

image.png

3.9 获取截图 screenshot

这里面的截图是黑白的:

./volatility -f win7.vmem --profile=Win7SP1x64 screenshot -D  ./result

image.png

图片如下:
image.png

3.10 列出用户名 pringkey

 ./volatility -f 2003.vmem --profile=Win2003SP2x86 printkey -K "SAM\Domains\Account\Users\Names"

image.png

3.11 列出hash信息 hashdump

在这里也可以看到用户名信息

 ./volatility -f 2003.vmem --profile=Win2003SP2x86 hashdump

image.png

3.12 获取主机名 printkey

./volatility -f 2003.vmem --profile=Win2003SP2x86 printkey -K "ControlSet001\Control\ComputerName\ComputerName"

image.png

3.13 获取系统浏览器历史 iehistory

./volatility -f win7.vmem --profile=Win7SP1x64 iehistory

image.png

3.14 列出PE|程序版本信息 verinfo

./volatility -f 2003.vmem --profile=Win2003SP1x86 verinfo

image.png

3.15 editbox 查看内存中记事本的内容

./volatility -f 2003.vmem --profile=Win2003SP1x86 editbox

image.png

相关文章:

  • MySQL 中的排序在底层是怎样实现的呢?
  • HID 异步访问和同步访问
  • 吊打面试官系列之:我这样回答 “如何更高效的进行接口测试“,面试官果然跪了。
  • 云资源管理
  • 【机器学习】树模型预剪枝和后剪枝
  • 性能提升 25 倍:Rust 有望取代 C 和 C++,成为机器学习首选 Python 后端
  • python一些操作的笔记
  • 4、乐趣国学—“行有不得,反求诸己。”
  • Github每日精选(第42期):web前端自定义Alert窗口sweetalert
  • “大厂”角力移动办公系统市场,钉钉和企微向左、WorkPlus向右
  • 面向有监督学习与文本数据的通用分类器
  • 为了学明白中断机制,我努力了
  • Python中的super函数,你熟吗?
  • 护眼灯频闪是什么意思?无频闪护眼灯哪个好
  • 「设计模式」六大原则之里氏替换原则小结
  • $translatePartialLoader加载失败及解决方式
  • crontab执行失败的多种原因
  • HTML中设置input等文本框为不可操作
  • Iterator 和 for...of 循环
  • java多线程
  • python 装饰器(一)
  • SpiderData 2019年2月16日 DApp数据排行榜
  • spring学习第二天
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 阿里云购买磁盘后挂载
  • 闭包,sync使用细节
  • 分布式任务队列Celery
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 构造函数(constructor)与原型链(prototype)关系
  • 跨域
  • 老板让我十分钟上手nx-admin
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 如何优雅地使用 Sublime Text
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #define 用法
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $().each和$.each的区别
  • (C#)获取字符编码的类
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (十)T检验-第一部分
  • (五)c52学习之旅-静态数码管
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)linux下的时间函数使用
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)树状数组
  • .NET MVC第五章、模型绑定获取表单数据
  • .net 受管制代码
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • /var/spool/postfix/maildrop 下有大量文件
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)