现在CTF方向中的内存取证相关的题目越来越多了,之前也一直没有做过整理(发出了咕咕咕的声音),这几天因为某些原因,得把重点放在取证部分,所以干脆直接在这里做个内存取证方面的知识整理。

  • 计算机数字取证主要分为内存取证和磁盘取证,死取证与活取证。但是不管采用什么方式,都应该尽量避免破坏原物。例如通过内存转储工具对内容进行快照,通过硬盘克隆工具对磁盘进行克隆,方便后期的分析工作。
  • 此类题一般会给出raw文件、vmem文件、img文件、dmp文件等内存镜像文件,我们则需要用volatility来解决这种问题

volatility常用命令

imageinfo 命令:用于获取内存镜像的基本信息

volatility -f windows.raw imageinfo

image-20200811194645999

然后从上面的Suggested Profile(s)中选择一个作为--profile的参数

pslist 命令:用于列出镜像中正在运行的进程

volatility -f windows.raw --profile=WinXPSP2x86 pslist

image-20200811195639196

pstree 命令:用于查找镜像中正在运行的进程的进程树

volatility -f windows.raw --profile=WinXPSP2x86 pstree

image-20200811195833451

cmdscan 命令:用于检索命令行(cmd)中键入的内容历史

volatility -f windows.raw --profile=WinXPSP2x86 cmdscan

image-20200811200228009

filescan 命令:扫描文件,可配合 grep 命令进行相关字符定向扫描

# 常规命令,把所有文件列出来
volatility -f windows.raw --profile=WinXPSP2x86 filescan

# 查找flag字符相关
volatility -f windows.raw --profile=WinXPSP2x86 filescan | grep flag

# 查找指定后缀文件
volatility -f windows.raw --profile=WinXPSP2x86 filescan | grep -E 'png|jpg|gif|zip|rar|7z|pdf|txt|doc'

image-20200811200727797

memdump 命令:将指定PID的进程dump出来

volatility -f windows.raw --profile=WinXPSP2x86 memdump -p [PID] -D ./
# [./] 代表当前文件夹
# -D ./ 还可以写作 --dump-dir=./

image-20200811201849190

dumpfiles 命令:将指定Offset(P)的文件提取出来

volatility -f windows.raw --profile=WinXPSP2x86 dumpfiles -Q 0x0000000002c61318 -D ./
# -Q 后接 [filescan]命令扫描得到的 Offset(P)

image-20200811203242802

editbox 插件:可以显示有关编辑控件的信息

volatility -f windows.raw --profile=WinXPSP2x86 editbox

image-20200811203425479

userassist 命令:查看运行进程的次数和时间

volatility -f windows.raw --profile=Win7SP0x86 userassist

image-20200811221658002

notepad 命令:可以查看notepad.exe里面的内容

volatility -f windows.raw --profile=WinXPSP2x86 notepad

image-20200811215347405

clipboard 命令:查看剪切板数据

volatility -f windows.raw --profile=Win7SP0x86 clipboard
# 加参数 -v 可以导出
volatility -f windows.raw --profile=Win7SP0x86 clipboard -v > out.txt

image-20200811221842573

procdump 命令:将指定PID的进程导出为exe

volatility -f windows.raw --profile=WinXPSP2x86 procdump -p [PID] -D ./

dlldump 命令:将指定PID的进程的所有DLL导出

volatility -f windows.raw --profile=WinXPSP2x86 dlldump -p [PID] -D ./

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

volatility -f windows.raw --profile=WinXPSP2x86 iehistory

image-20200811204432552

screenshot 命令:显示GDI样式的截屏

volatility -f windows.raw --profile=WinXPSP2x86 screenshot -D ./

image-20200811222232421

cmdline 命令:列出所有命令行下运行的程序

volatility -f windows.raw --profile=WinXPSP2x86 cmdline

image-20200811204607913

netscan 命令:检索所有网络连接情况

volatility -f windows.raw --profile=WinXPSP2x86 netscan

image-20200811205306465

connections 命令:检索已经建立的网络连接

volatility -f windows.raw --profile=WinXPSP2x86 connections

image-20200811205443554

hivelist 命令:检索所有注册表蜂巢[hive]

volatility -f windows.raw --profile=WinXPSP2x86 hivelist

image-20200811210017042

hivedump 命令:检索SAM注册表键值对

volatility -f windows.raw --profile=WinXPSP2x86 hivedump -o 0xe1492b60#注册表的 virtual 地址 [上图的\SAM]

image-20200811210901697

hashdump 命令:获取内存中的系统密码

# 显示结果是md5形式
volatility -f windows.raw --profile=WinXPSP2x86 hashdump

# 需要和hivelist配合
volatility -f windows.raw --profile=WinXPSP2x86 hashdump -y [注册表 system 的 virtual 地址] -s [SAM 的 virtual 地址]

image-20200811210303239

mimikatz 命令:mimikatz插件可以获得系统明文密码

volatility -f windows.raw --profile=WinXPSP2x86 mimikatz  

但是mimikatz插件不是自带的,得自己另行安装,安装可以参考这个

printkey 命令:可以用来检索注册表中账号密码/最后登录的用户

# 获取SAM表中的用户(注册表中的账号密码)
volatility -f windows.raw --profile=WinXPSP2x86 printkey -K "SAM\Domains\Account\Users\Names"

image-20200811212513715

# 查询登陆账户系统(可查看最后登录用户)
volatility -f windows.raw --profile=WinXPSP2x86 printkey -K "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

image-20200811212713662

timeliner 命令:尽可能多的发现目标主机痕迹

volatility -f windows.raw --profile=WinXPSP2x86 timeliner

consoles 命令:抓取控制台下执行的命令以及回显数据

volatility -f windows.raw --profile=WinXPSP2x86 consoles

image-20200811213345070

systeminfo命令:显示关于计算机及其操作系统的详细配置信息

systeminfo插件也不是自带的,得自行安装,安装过程与前文mimikatz安装类似,这里只给出systeminfo.py文件:

链接:https://pan.baidu.com/s/19OzHV29EGW_0701a5CoQAA
提取码:7h41

#可以获得计算机的 Hostname,ComputerName等信息
volatility -f 1.raw --profile=WinXPSP2x86 systeminfo

image-20210107163143059

mftparser:恢复被删除的文件

volatility -f 1.raw --profile=WinXPSP2x86 mftparser > mftoutput.txt

mftoutput.txt 里面包含内存里面的文件(文件路径,文件内容),可根据需要自行搜索

image-20210107170641802

envars:查看环境变量

 volatility -f imagin.vmem --profile=Win7SP1x64 envars 

且values值是str类型