Volatility

Volatility官网地址
里面有Windows版本和Linux版本,我用的是Windows。
所以讲的大部分是Windows下的命令。

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
可以使用 -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: 将所有操作系统事件以时间线的方式展开

查看用户名密码信息

1
volatility -f 1.vmem --profile=Win7SP1x64 hashdump

查看进程

1
volatility -f 1.vmem --profile=Win7SP1x64 pslist

查看服务

1
volatility -f 1.vmem --profile=Win7SP1x64 svcscan

查看浏览器历史记录

1
volatility -f 1.vmem --profile=Win7SP1x64 iehistory

查看网络连接

1
volatility -f 1.vmem --profile=Win7SP1x64 netscan

查看命令行操作

1
volatility -f 1.vmem --profile=Win7SP1x64 cmdscan

查看文件

1
volatility -f 1.vmem --profile=Win7SP1x64 filescan

查看文件内容

1
volatility -f 1.vmem --profile=Win7SP1x64 dumpfiles -Q 0xxxxxxxx -D ./

查看当前展示的notepad内容

1
volatility -f 1.vmem --profile=Win7SP1x64 notepad

提取进程

1
volatility -f 1.vmem --profile=Win7SP1x64 memdump -p xxx --dump-dir=./

屏幕截图

1
volatility -f 1.vmem --profile=Win7SP1x64 screenshot --dump-dir=./

查看注册表配置单元

1
volatility -f 1.vmem --profile=Win7SP1x64 hivelist

查看注册表键名

1
volatility -f 1.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a001032410

查看注册表键值

1
volatility -f 1.vmem --profile=Win7SP1x64 printkey -K "xxxxxxx"

查看运行程序相关的记录,比如最后一次更新时间,运行过的次数等。

1
volatility -f 1.vmem --profile=Win7SP1x64 userassist

最大程序提取信息

1
volatility -f 1.vmem --profile=Win7SP1x64 timeliner
1
2
3
4
5
6
7
8
9
大致常用命令
python2 vol.py -f 1.raw imageinfo
python2 vol.py -f 1.raw pslist --profile=Win7SP1x64
python2 vol.py -f 1.raw --profile=Win7SP1x64 filescan |grep flag
python2 vol.py -f 1.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000003da43680 -D ./
python2 vol.py -f 1.raw --profile=Win7SP1x64 editbox
python2 vol.py -f 1.raw --profile=Win7SP1x64 hashdump
python2 vol.py -f 1.raw --profile=Win7SP1x64 lsadump
python2 vol.py -f 1.raw --profile=Win7SP1x64 clipboard

Volatility使用

以一道取证题为例
Q:admin密码是什么?
通过imageinfo获取系统信息

1
volatility_2.6_win64_standalone.exe -f window.vmem imageinfo


使用使用hashdump获取sam

1
volatility_2.6_win64_standalone.exe -f window.vmem --profile=Win7SP1x64 hashdump


可以通过john工具来进行爆破,但是好像跑不出来结果。应该是设定了强密码。于是只能使用了lasdump命令来查看

1
volatility_2.6_win64_standalone.exe -f window.vmem --profile=Win7SP1x64 lsadump


Q:ip和主机名是什么
通过netscan可以查询到地址

1
volatility_2.6_win64_standalone.exe -f window.vmem --profile=Win7SP1x64 netscan tee netscan.txt


主机名需要通过查询注册表,先用hivelist

1
volatility_2.6_win64_standalone.exe -f window.vmem --profile=Win7SP1x64 hivelist tee hivelist.txt

1
volatility -f worldskills3.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a000024010 > system.txt;cat system.txt name

通过hivedump查询对应键名volatility -f worldskills3.vmem –profile=Win7SP1x64 hivedump -o 0xfffff8a000024010 > system.txt;cat system.txt|grep name,这个速度比较慢。(不知道什么原因,这个东西出来的很慢,所以用了别人的图片QAQ)

如果知道键名的话,可以直接查询键值(这两段Windows不是太好实现)

1
volatility -f worldskills3.vmem --profile=Win7SP1x64 printkey -K "ControlSet001\Control\ComputerName"


Q:获取桌面上的 flag.txt
先用filescan扫描文件

1
volatility -f worldskills3.vmem --profile=Win7SP1x64 filescan grep "flag.txt"

接着使用dumpfiles爆破文件内容

1
volatility -f worldskills3.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000007f1b6c10 --dump-dir=./