现在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文件:
代码语言:javascript复制链接:https://pan.baidu.com/s/19OzHV29EGW_0701a5CoQAA 提取码:7h41
#可以获得计算机的 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类型