内存取证基础
内存取证
[toc]
一、获取内存信息
判断未知内存镜像系统版本信息
1 | volatility -f 文件路径 imageinfo |
imageinfo 用于标记操作系统
service pack和硬件体系结构(32位或64位);可能有多个建议的配置文件,我们必须选择正确的配置文件
或者使用命令:kdbgscan
获取内存操作系统
二、使用命令
命令格式:
1 | volatility -f 文件镜像 --profile=<运用的东西> <插件名字> <各种命令> |
第一步:内存镜像的架构
一、对mem.vmem内存信息进行获取
判断未知内存镜像系统版本信息
1 | volatility -f 文件路径 magenfo |
imageinfo:用于标识操作系统、service pack和硬件体系结构(32位或64位);可能有多个建议的配置文件,一般选择第一个。
或者使用kdbgscan获取内存操作系统
二、使用命令
命令1:查看终端信息 cmdscan、cmdline
cmdscan:查看终端记录
cmdscan:用来查看受害者系统上攻击操作系统的最强大的命令之一,无论是否打开cmd.exe。简单说,可以看到攻击者在命令提示符中键入的内容;提取内存中保留的cmd命令使用情况。
1 | volatility -f 1.vmem --profile=Win7SP1x64 cmdscan |
cmdline:查看进程命令行
1 | volatility -f 1.vmem --profile=Win7SP1x64 cmdline |
命令2:文件信息 filescan、dmpfiles、notepad、editbox
filescan:扫描当前打开的文件
1 | volatility -f men.vmem --profile=Winxp SP2 x86 filescan |
扫描所有的文件列表 filescan1
volatility -f 1.vmem --profile=Win7SP1x64 filescan
(linux配合 grep 命令进行相关字符定向扫描,如:grep flag、grep -E ‘png|jpg|gif|zip|rar|7z|pdf|txt|doc’)
例1
2
3volatility -f 1.vmem --profile=Win7SP1x64 filescan grep "flag.txt"
cat system.txt|grep -i computername
dmpfiles:查看文件内容
1 | volatility -f 1.vmem --profile=Win7SP1x64 dumpfiles -Q 0xxxxxxxx -D ./ |
需要指定偏移量 -Q 和输出目录 -D
dumpfiles:导出某一文件(指定虚拟地址)
notepad :查看当前展示的notepad内容
1 | volatility -f 1.vmem --profile=Win7SP1x64 notepad |
查看当前展示的 notepad 文本(–profile=winxp啥的低版本可以,win7的不行,可以尝试使用editbox)
editbox:显示有关编辑控件(曾经编辑过的内容)的信息
1 | volatility -f 1.vmem --profile=Win7SP1x64 editbox |
editbox:显示有关编辑控件(曾经编辑过的内容)的信息 查看内存中记事本的内容
使用正则表达式一起使用:
1 | volatility -f file_patched_tjctf.dmp --profile=Winxp SP2 x86 filescan | grep Downloads |
找下载的文件夹了,一般windows下载的内容都放在Download文件夹中。
mftparser:恢复被删除的文件
1 | volatility -f 1.vmem --profile=Win7SP1x64 mftparser |
mftparser:恢复被删除的文件
查看环境变量envars
命令3:进程信息 dlllist、pslist、psscan、pstree、memdump
dlllist命令:动态链接库信息
dlllist命令:能够显示一个进程装载的动态链接库的信息,其显示列表主要包括加载的动态链接库文件的基地址、文件大小以及文件所在路径。
1 | volatility -f men.vmem --profile=Winxp SP2 x86 dlllist |
pslist命令:查看已知进程
1 | volatility -f 1.vmem --profile=Win7SP1x64 pslist -p 2588 |
psscan命令:隐藏或解链的进程
注:pslist无法显示隐藏/终止进程,解决这个问题可以使用psscan
pkist/pstree/psscan:非常有用的插件,列出转储时运行的进程的详细信息;显示过程ID,该父进程ID(PPID),线程的数目,把手的数目,日期时间时,过程的开始与退出
例:
1 | volatility -f men.vmem --profile=Winxp SP2 x86 pslist |
当内容比较多时候,导出文本进一步分析查看
1 | volatility -f men.vmem --profile=Winxp SP2 x86 pslist > pslist.txt |
1 | volatility -f men.vmem --profile=Winxp SP2 x86 pstree |
pstree进程树扫描
pstree同样也是扫描进程的,但是是以进程树的形式出现的
1 | volatility -f men.vmem --profile=Winxp SP2 x86 pstree |
memdump命令:取进程
1 | volatility -f 1.vmem --profile=Win7SP1x64 memdump -p xxx --dump-dir=./ |
memdump:提取出指定进程,常用foremost 来分离里面的文件
要指定进程-p [pid] 和输出目录 -D
1 memdump -p 332 -D XX/
提取进程 -p 进程号 -D 当前输出路径(导出为332.dmp)
dump出来的进程文件,可以使用 foremost 来分离里面的文件,用 binwalk -e 不推荐
strings -e l 2040.dmp | grep flag 查找flag
命令4:注册表信息 hivelist、hashdump、printkey
hivelist:查看缓存在内存的注册表
1 | volatility -f men.vmem --profile=Winxp SP2 x86 hivelist |
hashdump:查看缓存在内存的注册表
1 | volatility -f men.vmem --profile=Winxp SP2 x86 hashdump |
查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容(mimikatz插件可以获取系统明文密码)
如果john爆破不出来,就使用lasdmp
1 | volatility -f 1.vmem --profile=Win7SP1x64 lsadump |
hivedmp:查看注册表键名
1 | volatility -f 1.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a001032410 |
printkey:查看注册表键值
1 | volatility -f 1.vmem --profile=Win7SP1x64-K "ControlSet001\Control\ComputerName\ComputerName" |
命令5:程序信息
userassist正在运行的程序
userassist:提取出内存中记录的 当时正在运行的程序有哪些,运行过多少次,最后一次运行的时间等信息
1 | volatility -f men.vmem --profile=Winxp SP2 x86 userassist |
可以先查看当前内存镜像中的用户1
2printkey -K “SAM\Domains\Account\Users\Names”
volatility -f 1.vmem –profile=Win7SP1x64 printkey -K “SAM\Domains\Account\Users\Names”
timeliner:最大程序提取信息
1 | volatility -f 1.vmem --profile=Win7SP1x64 timeliner |
timeliner: 将所有操作系统事件以时间线的方式展开
verinfo:程序版本信息
1 | volatility -f 1.vmem --profile=Win7SP1x64 verinfo |
