内存取证

内存取证

volatility基础命令

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

mendump:提取出指定进程,常用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: 将所有操作系统事件以时间线的方式展开

自己总结

一:总结一下上面题目所用到的命令
查看镜像
vol.py -f Target.vmem imageinfo
提取本地存储的凭证信息
vol.py -f Target.vmem --profile=Win7SP1x64 lsadump
扫描含CTF的文件
vol.py -f Target.vmem --profile=Win7SP1x64 filescan | grep CTF
扫描多个文件
vol.py -f Target.vmem --profile=Win7SP1x64 filescan | grep -E "jpg|png|zip|rar|gif"
提取文件
vol.py -f Target.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000007d8c7d10 -D 1
查看进程
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 pslist
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 pstree
扫描终端
vol.py -f file.raw --profile=WinXPSP2x86 cmdscan
查看浏览记录
vol.py -f file.raw --profile=WinXPSP2x86 iehistory
扫描其IP地址
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 netscan | grep "LunarMS.exe"
查看剪切板信息
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 clipboard

[陇剑杯 2021]内存分析(问1)

查看镜像

vol.py -f Target.vmem imageinfo 

img

1:没有安装pycryptodome,kali里自带python3的环境,有python2的环境却没有pip2

这里得在python2的环境下使用pip2来安装pycryptodome

一:下载get-pip.py

wget https://bootstrap.pypa.io/pip/2.7/get-pip.py 

二:python执行get-pip.py

sudo python2 get-pip.py

三:查看pip2的版本

pip2 -V

img

四:安装pycryptodome

pip2 install pycryptodome

img

img

2:可以找到Win7SP1x64,通过lsadump插件将被调用以提取本地存储的凭证信息

vol.py -f Target.vmem --profile=Win7SP1x64 lsadump

img

方法二:使用mimikatz插件来解

1:下载mimikatz.py,将其移至volatility的plugins,注意这里不能直接复制粘贴进去,得使用命令

sudo mv mimikatz.py /home/kali/Desktop/volatility/plugins/

2:安装construct

pip install construct

嘶,我没装上,嘿嘿,不过用处和lsadump插件差不多

[陇剑杯 2021]内存分析(问2)

网管小王制作了一个虚拟机文件,让您来分析后作答:
虚拟机中有一个某品牌手机的备份文件,文件里的图片里的字符串为_____________。(解题过程中需要用到上一题答案中flag{}内的内容进行处理。本题的格式也是flag{xxx},含有空格,提交时不要去掉)。

试着搜索CTF的文件名,可以发现HUAWEI P40

vol.py -f Target.vmem --profile=Win7SP1x64 filescan | grep CTF

img

vol.py -f Target.vmem --profile=Win7SP1x64 filescan | grep HUAWEI

img

导出第一个

vol.py -f Target.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000007d8c7d10 -D 1

img

unzip file.None.0xfffffa80037e0af0.dat

img

解压之后我们可以发现多了一个文件夹,并发现一个images0.tar.enc文件,此文件为华为加密文件,在网上下载相应的解密脚本即可

下载地址:https://github.com/RealityNet/kobackupdec

这里需要用到的密码为第一题所需的密码,文件夹为刚才解压出来的文件夹

python3 kobackupdec.py -vvv W31C0M3_T0_THiS_34SY_F0R3NSiCX "/home/kali/Desktop/HUAWEI P40_2021-aa-bb xx.yy.zz" /home/kali/Desktop/2

img

在所生成的文件2里找到相应的压缩包,得到flag

img

[羊城杯 2021]Baby_Forenisc

查看镜像的系统版本

img

查看进程

img

查看cmd命令

img

使用git命令上传了一些文件,既然上传了一些文件,我们使用grep来特定找出相应的文件

img

实在不放心可以使用file命令来查看其类型

img

可以发现其为SSH私钥

使用dumpfiles将其ssh.txt导出

vol.py -f BIODOG-7711E93C-20210908-053022.raw --profile=WinXPSP2x86 dumpfiles -Q 0x00000000020bf6a0 -D 2

img

base64对其进行编码和解码来提取.dat的数据

img

这里发现qq邮箱

img

github上搜索其qq邮箱

img

img

下载其_APP_,010里找到

img

base64解码

SangFor{S0_3azy_2_crack_noob_player}

[鹏城杯 2022]简单取证

查看镜像,找到WinXPSP2x86

img

发现一张secret.jpg,使用dump提取出来

img

又或者是直接查看其浏览记录vol.py -f file.raw –profile=WinXPSP2x86 iehistory

img

img

找到jpg图片vol.py -f file.raw –profile=WinXPSP2x86 filescan | grep secret.jpg

img

提取jpg图片vol.py -f file.raw –profile=WinXPSP2x86 dumpfiles -Q 0x0000000002325028 -D 3

img

img

注意:这里导出的并不是jpg图片,而是其数据,可以发现是base64编码,对其进行base64解码,可以发现其是一个压缩包的逆序数据。

可以使用base64 -d file.None.0x81fc6610.dat | rev ,嘶,这个直接卡死,转半天没转出来

img

在厨师里进行解密,保存为zip,嘶,这里转化有点问题,找不到flag.txt

img

直接用脚本进行转化.这个可以

import base64
import struct

with open("1.jpg", "r") as f:
r = f.read()

lst = list(base64.b64decode(r))
lst.reverse()

with open("flag.zip", "wb") as f:
for i in lst:
s = struct.pack('B', i)
f.write(s)

vol.py -f file.raw –profile=WinXPSP2x86 cmdscan

img

password:62b041223bb9a

打开压缩包,类似坐标,绘制二维码

from PIL import Image

im = Image.new("RGB", (350, 350), (0, 0, 0))

with open("flag.txt", "r") as f:
r = f.read()

lst = r.split("\n")
for i in lst:
x = int(i.split(" ")[0])
y = int(i.split(" ")[1])
im.putpixel((x, y), (255, 255, 255))

im.save("flag.png")

img

flag{a6b93e36-f097-11ec-a9b2-5254002d2b31}