volatility安装、内存取证常见知识点及例题讲解(已进行2.1次更新)

24 篇文章 8 订阅

最近的CTF比赛有关内存取证、机器学习、流量分析的题越来越多,自己又没怎么下来学过,基本都混在简单基础的图片隐写上面,所以开坑整理内存取证的知识点,并选取两道例题来实操。之后也准备对机器学习开坑。

常见的内存镜像文件有raw、vmem、dmp、img等,这里就需要用到内存取证工具volatility(例题讲解使用版本为2.6),当然如果看见有个叫DumpIt的进程,不用去理会,他就是生成内存文件的程序。

从0开始安装volatility(2021/11/4)

因为我常用的kali坏掉了,每次只能靠快照存活那么几分钟,正好买的Samsung SSD T7到了,就重新在kali里面安装一下volatility吧。

基操部分

1.安装vmware tools
点击上方虚拟机—安装Vmware tools,桌面出现光盘的图标后双击打开,解压VMware tools到桌面,然后进入文件夹,输入命令

sudo ./vmware-install.pl

然后一路回车,有yes的就输入yes
直到最后出现enjoy表明安装成功
然后建议重启一下

2.换源
输入以下指令
sudo vim /etc/apt/sources.list
将原有的源注释掉然后更换国内源

中科大源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
阿里云源
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
清华大学源
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free

三选一即可

在这里插入图片描述

然后输入

sudo apt-get update
sudo apt-get upgrade

然后装个中文输入法吧

sudo apt-get install fcitx
sudo apt-get install fcitx-googlepinyin
重启即可

3.安装pip
我使用的2020.2的kali,只安装了python2.7.18和python3.8.2,但没有pip。
请务必先安装python3再安装python2。如果先安装2再安装3会出现pip和pip3都指向的python3,也不用担心,再次执行python2 get-pip.py即可
对于python2.7:

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

python get-pip.py

如果安装之后输入pip仍然出现找不到pip的情况
说明没有写入PATH,请根据他的提示输入以下命令,如图
在这里插入图片描述
请输入

echo 'export PATH=/home/mumuzi/.local/bin:$PATH' >>~/.bashrc
source ~/.bashrc
注:/home/mumuzi/.local/bin根据自己的WARNING提示来修改

对于python3:

我也是用的wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
然后python3 get-pip.py
(虽然我印象中python2和3的get-pip是独立的

在这里插入图片描述

安装volatility

建议害怕安装出问题之前,拍点快照
推荐方法(方便安装插件)
1.下载volatility
https://github.com/volatilityfoundation/volatility
或者git clone https://github.com/volatilityfoundation/volatility.git
进入文件夹后,输入

python setup.py install

2.然后运行,你会发现缺少很多库,于是安装这些库,一个个安装

pip install yara
pip install pycrypto
如果在安装的时候报python.h的错,请执行下面一条
sudo apt-get install python2-dev
pip install pillow
pip install distorm3
pip install openpyxl

然后直接运行python vol.py即可
以下问题可能只是我个人出现的,如果你们也出现了可以看一看
虽然运行发现出现错误,发现是yara的原因,重新安装一次,发现在
Requirement already satisfied: yara in /home/mumuzi/.local/lib/python2.7/site-packages (1.7.7)
而报错原因是

Failed to import '/usr/lib/libyara.so'
PATH = /home/mumuzi/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games;/usr/lib
*** Failed to import volatility.plugins.linux.malfind (OSError: /usr/lib/libyara.so: cannot open shared object file: No such file or directory)
Failed to import '/usr/lib/libyara.so'
PATH = /home/mumuzi/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games;/usr/lib;/usr/lib
……

在这里插入图片描述

于是想到利用软连接来解决问题

ln -s /home/mumuzi/.local/lib/python2.7/site-packages/usr/lib/libyara.so /usr/lib/libyara.so

问题就被解决啦
在这里插入图片描述还可能出现下面的问题
bash: /usr/local/bin/vol.py:/usr/bin/python:解释器错误: 没有那个文件或目录
然后在测试发现,将python改成python2才能使用。
于是进入bin目录,查看一下链接
在这里插入图片描述
发现bin下,是python2指向的python2.7,所以使用python的时候是找不到python2.7的,于是将bin下的python2改名python
在这里插入图片描述在这里插入图片描述

插件的安装可以看后面

独立volatility安装方法
1.下载volatility
https://www.volatilityfoundation.org/26
选择下载Linux系统的,下载下来之后解压
然后把解压出来的文件夹改名为volatility,使用指令移动到/usr/local
顺便把那个可执行文件的文件名也改成volatility

sudo mv volatility/ /usr/local/

2.然后添加环境变量,通过修改profile

sudo vim /etc/profile
然后在最后,换行添加一句
export PATH=/usr/local/volatility:$PATH
重启即可

之后直接输入volatility,即可发现已经成功安装

imageinfo

分析获取内存镜像的基本信息

volatility -f raw.raw imageinfo

在这里插入图片描述
volatility 建议当做 Win7SP1x64 的镜像,后面的参数使用–profile(两根横杠)

pslist

知道镜像信息后,一般就会pslist
pslist:查看镜像中正在运行的进程

volatility -f raw.raw --profile=Win7SP1x64 pslist

当然,也可以用psxview,psxview可查看一些隐藏进程

在这里插入图片描述

pstree

以树的形式来列出正在进行的进程,当然pstree也不会显示出隐藏或未链接的进程

volatility -f raw.raw --profile=Win7SP1x64 pslist

在这里插入图片描述
还有psscan指令,它是以pool tag来扫描,很少用;还有psdispscan、dlllist、dlldump、handles、getsids,这里不做描述

cmdscan

cmdscan是搜索XP / 2003 / Vista / 2008和conhost.exe上搜索csrss.exe的内存,对于win7是搜索cmd.exe。是搜索命令行的输入历史记录

volatility -f raw.raw --profile=Win7SP1x64 cmdscan

在这里插入图片描述

consoles

相似与cmdscan,但是他扫描的不是COMMAND_HISTORY,而是CONSOLE_INFORMATION,而且还有个显著的优点是cmdscan只能查看到输入的指令,而consoles能查看到输入的指令以及缓冲区的输出(即键入和键出)

volatility -f raw.raw --profile=Win7SP1x64 consoles

在这里插入图片描述

cmdline

此指令将会列出所有命令行下运行的程序

volatility -f raw.raw --profile=Win7SP1x64 cmdline

在这里插入图片描述

除此之外,简单讲一些不常见的指令

privs:显示进程权限
envars:显示进程环境变量
verinfo:显示PE文件中嵌入的版本信息
enumfunc:列出进程,dll和内核驱动程序导入和导出

filescan

扫描文件指令,一般呢会根据正在进行的进程来定向扫描,也常常会扫描桌面文件。

volatility -f raw.raw --profile=Win7SP1x64 filescan
volatility -f raw.raw --profile=Win7SP1x64 filescan | grep “flag”
volatility -f raw.raw --profile=Win7SP1x64 filescan | grep “Desktop”(有的可能是中文把Desktop改成桌面即可)
volatility -f raw.raw --profile=Win7SP1x64 filescan | grep -E “png”(查找png后缀文件)

在这里插入图片描述

dumpfiles

dump出指定PID的文件,一般只要是做内存题都会用到的指令。

volatility -f raw.raw --profile=Win7SP1x64 dumpfiles -Q [PID] -D ./
将PID的文件保存在当前目录

在这里插入图片描述

procdump

转储进程的可执行文件,后跟PID

volatility -f mal.raw --profile=Win7SP1x64 procdump -p 3468 -D ./

memdump

可以将内存中的某个进程保存出来

volatility -f win7.vmem --profile=Win7SP1x64 memdump -p [PID] -D ./

在这里插入图片描述

editbox/notepad

显示出有关编辑控件的信息
在XP中,正在运行的notepad程序,使用notepad指令就可以看到notepad.exe的内容,而在win7中,将不支持notepad,只能使用editbox,这里举例editbox

volatility -f raw.raw --profile=Win7SP1x64 editbox

在这里插入图片描述

netscan

查看网络连接的连接情况

volatility -f raw.raw --profile=Win7SP1x64 netscan

在这里插入图片描述

svcscan

扫描windows服务列表

volatility -f raw.raw --profile=Win7SP1x64 svcscan

在这里插入图片描述

screenshot

显示GDI样式的截屏

volatility -f raw.raw --profile=Win7SP1x64 screenshot -D ./

在这里插入图片描述
在这里插入图片描述

userassist

查看运行的进程和次数

volatility -f raw.raw --profile=Win7SP1x64 userassist

在这里插入图片描述

clipboard

剪贴板数据,加参数-v可以导出

volatility -f raw.raw --profile=Win7SP1x64 clipboard
volatility -f raw.raw --profile=Win7SP1x64 clipboard -v >clip.txt

在这里插入图片描述

hivelist

列出注册表

volatility -f raw.raw --profile=Win7SP1x64 hivelist
dumpregistry -o virtual地址可以导出,如volatility -f raw.raw --profile=Win7SP1x64 dumpregistry -o 0xfffff8a003696010

在这里插入图片描述

malfind

malfind 查找隐藏或注入的代码/ DLL

volatility -f raw.raw --profile=Win7SP1x64 malfind

可以查找出存在异常的进程

handles

查看文件句柄,如上面malfind发现PID为2233

volatility -f raw.raw --profile=Win7SP1x64 handles -p 620 -t file

iehistory

获取浏览器的浏览历史,这个指令也经常用到。

volatility -f raw.raw --profile=Win7SP1x64 iehistory

在这里插入图片描述

dlldump

将指定PID的进程的所有DLL导出

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

在这里插入图片描述

使用插件找到密码

不像printkey一样,用hash来获取密码,这里可以直接使用mimikatz.py插件来获取内存中的密码,无论多复杂都彳亍。当然也可以用最新版的passware kit来获取密码,原理同样是从内存中直接获取密码。
插件地址
https://github.com/ruokeqx/tool-for-CTF/tree/master/volatility_plugins
若不会装插件,可看这篇文章
命令也很简单,直接在后面加个mimikatz即可,如:

volatility -f raw.raw --profile=Win7SP1x64 mimikatz

printkey

常常是用来列举用户及密码、查看获取最后登陆系统的用户。

获取用户:volatility -f raw.raw --profile=Win7SP1x64 printkey -K “SAM\Domains\Account\Users\Names”

在这里插入图片描述

获取最后登陆系统的用户:volatility -f raw.raw --profile=Win7SP1x64 printkey -K “SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon”

在这里插入图片描述

获取密码哈希:
1.获取system 的 virtual 地址,SAM 的 virtual 地址:
volatility -f raw.raw --profile=Win7SP1x64 hivelist
在这里插入图片描述
2.hashdump:
volatility -f raw.raw --profile=Win7SP1x64 hashdump -y 0xfffff8a000024010 -s 0xfffff8a001390010
在这里插入图片描述>3.碰运气解hash(一般题都是能用cmd5、somd5解出来的)
在这里插入图片描述

配合Gimp

dump出正在运行的内存,然后配合Gimp

1.dump出正在运行的程序,随便dump都行
volatility -f raw.raw --profile=Win7SP1x64 memdump -p [PID] -D ./
2.将dump出来的文件(如1234.dmp)重命名为.data拓展名(即1234.data)
3.使用Gimp打开(ubuntu)
在这里插入图片描述
在这里插入图片描述>4.这里请放大,进行如下操作
(1).将图像类型RGB修改为RGB Alpha
(2).调整高度(建议调稍微高一点)、确定一个看着合适的宽度、调整位移,可以使用鼠标滑轮和键盘来快速调整,也可以拖动调整
在这里插入图片描述>例如这里我就找到文字信息(请注意,在宽度和偏移下,可能会出现不同的界面)
经过调整,当宽度为264的时候,就会出现我想要的信息
在这里插入图片描述
当然,这里是倒过来的,脑补一下就行了。

例题

我真的是懒啊新题就不写了这里直接放我写的其他内存的WP
蓝帽2021 初赛
强网杯2021 初赛
第二届祥云杯
WMCTF2021
四川省大学生信息安全技术大赛
第一届网刃杯
Securinets CTF Quals 2022 Forensics Writeup

  • 72
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
内存镜像进行分析是一种常见取证手段,可以帮助我们了解系统运行的状态以及获取关键信息。在中科磐云内存取证方面,需要运用专业的工具和技术来对内存镜像进行分析。 首先,我们需要使用合适的取证工具来获取系统的内存镜像。这可以通过中科磐云内存取证的功能来实现,该功能可以帮助我们采集系统的内存快照。获取到内存镜像后,我们可以将其保存为一个文件,以便进行后续的分析。 接下来,我们可以使用各种内存分析工具来分析内存镜像。这些工具可以帮助我们解析内存中的各种数据结构和信息,如进程、线程、文件、网络连接等等。通过分析这些信息,我们可以了解系统运行的状态,找到异常或可疑的行为。 在分析过程中,我们可以使用一些开源工具,如Volatility、Rekall等,这些工具提供了丰富的内存分析功能,并且有很多社区支持和相关文档可供参考。通过学习和使用这些工具,我们可以深入理解内存分析的原理和方法,提高对系统行为的观察能力。 当分析到相应的信息时,我们可以寻找到管理员的qq号码,并将其作为flag进行提交。这可以帮助我们收集更多关于系统的信息,为后续的取证工作提供更多线索和证据。 总之,对内存镜像进行分析是一项重要的取证工作。通过运用专业的工具和技术,我们可以深入了解系统的运行状态,获取关键信息,并在中科磐云内存取证中将管理员的qq号码作为flag进行提交。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值