内存取证知识点及常见用法

2022-11-11 20:24:46 浏览数 (1)

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

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

volatility常用命令

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

代码语言:javascript复制
volatility -f windows.raw imageinfo

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

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 pslist

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 pstree

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 cmdscan

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

代码语言:javascript复制
# 常规命令,把所有文件列出来
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'

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

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

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

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

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 editbox

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

代码语言:javascript复制
volatility -f windows.raw --profile=Win7SP0x86 userassist

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 notepad

clipboard 命令:查看剪切板数据

代码语言:javascript复制
volatility -f windows.raw --profile=Win7SP0x86 clipboard
# 加参数 -v 可以导出
volatility -f windows.raw --profile=Win7SP0x86 clipboard -v > out.txt

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 procdump -p [PID] -D ./

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 dlldump -p [PID] -D ./

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 iehistory

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 screenshot -D ./

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 cmdline

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 netscan

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 connections

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 hivelist

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 hivedump -o 0xe1492b60#注册表的 virtual 地址 [上图的SAM]

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

代码语言:javascript复制
# 显示结果是md5形式
volatility -f windows.raw --profile=WinXPSP2x86 hashdump

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

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 mimikatz  

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

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

代码语言:javascript复制
# 获取SAM表中的用户(注册表中的账号密码)
volatility -f windows.raw --profile=WinXPSP2x86 printkey -K "SAMDomainsAccountUsersNames"
代码语言:javascript复制
# 查询登陆账户系统(可查看最后登录用户)
volatility -f windows.raw --profile=WinXPSP2x86 printkey -K "SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 timeliner

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

代码语言:javascript复制
volatility -f windows.raw --profile=WinXPSP2x86 consoles

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

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

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

代码语言:javascript复制
#可以获得计算机的 Hostname,ComputerName等信息
volatility -f 1.raw --profile=WinXPSP2x86 systeminfo

mftparser:恢复被删除的文件

代码语言:javascript复制
volatility -f 1.raw --profile=WinXPSP2x86 mftparser > mftoutput.txt

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

envars:查看环境变量

代码语言:javascript复制
 volatility -f imagin.vmem --profile=Win7SP1x64 envars 

且values值是str类型

0 人点赞