最近的CTF比赛有关内存取证、机器学习、流量分析的题越来越多,自己又没怎么下来学过,基本都混在简单基础的图片隐写上面,所以开坑整理内存取证的知识点,并选取两道例题来实操。之后也准备对机器学习开坑。
常见的内存镜像文件有raw、vmem、dmp、img等,这里就需要用到内存取证工具volatility(例题讲解使用版本为2.6),当然如果看见有个叫DumpIt的进程,不用去理会,他就是生成内存文件的程序。
因为我常用的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是独立的
建议害怕安装出问题之前,拍点快照
推荐方法(方便安装插件)
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,即可发现已经成功安装
分析获取内存镜像的基本信息
volatility -f raw.raw imageinfo
volatility 建议当做 Win7SP1x64 的镜像,后面的参数使用–profile(两根横杠)
知道镜像信息后,一般就会pslist
pslist:查看镜像中正在运行的进程
volatility -f raw.raw --profile=Win7SP1x64 pslist
当然,也可以用psxview,psxview可查看一些隐藏进程
以树的形式来列出正在进行的进程,当然pstree也不会显示出隐藏或未链接的进程
volatility -f raw.raw --profile=Win7SP1x64 pslist
还有psscan指令,它是以pool tag来扫描,很少用;还有psdispscan、dlllist、dlldump、handles、getsids,这里不做描述
cmdscan是搜索XP / 2003 / Vista / 2008和conhost.exe上搜索csrss.exe的内存,对于win7是搜索cmd.exe。是搜索命令行的输入历史记录
volatility -f raw.raw --profile=Win7SP1x64 cmdscan
相似与cmdscan,但是他扫描的不是COMMAND_HISTORY,而是CONSOLE_INFORMATION,而且还有个显著的优点是cmdscan只能查看到输入的指令,而consoles能查看到输入的指令以及缓冲区的输出(即键入和键出)
volatility -f raw.raw --profile=Win7SP1x64 consoles
此指令将会列出所有命令行下运行的程序
volatility -f raw.raw --profile=Win7SP1x64 cmdline
除此之外,简单讲一些不常见的指令
privs:显示进程权限
envars:显示进程环境变量
verinfo:显示PE文件中嵌入的版本信息
enumfunc:列出进程,dll和内核驱动程序导入和导出
扫描文件指令,一般呢会根据正在进行的进程来定向扫描,也常常会扫描桌面文件。
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后缀文件)
dump出指定PID的文件,一般只要是做内存题都会用到的指令。
volatility -f raw.raw --profile=Win7SP1x64 dumpfiles -Q [PID] -D ./
将PID的文件保存在当前目录
可以将内存中的某个进程保存出来
volatility -f win7.vmem --profile=Win7SP1x64 memdump -p [PID] -D ./
显示出有关编辑控件的信息
在XP中,正在运行的notepad程序,使用notepad指令就可以看到notepad.exe的内容,而在win7中,将不支持notepad,只能使用editbox,这里举例editbox
volatility -f raw.raw --profile=Win7SP1x64 editbox
查看网络连接的连接情况
volatility -f raw.raw --profile=Win7SP1x64 netscan
扫描windows服务列表
volatility -f raw.raw --profile=Win7SP1x64 svcscan
显示GDI样式的截屏
volatility -f raw.raw --profile=Win7SP1x64 screenshot -D ./
查看运行的进程和次数
volatility -f raw.raw --profile=Win7SP1x64 userassist
剪贴板数据,加参数-v可以导出
volatility -f raw.raw --profile=Win7SP1x64 clipboard
volatility -f raw.raw --profile=Win7SP1x64 clipboard -v >clip.txt
列出注册表
volatility -f raw.raw --profile=Win7SP1x64 hivelist
dumpregistry -o virtual地址可以导出,如volatility -f raw.raw --profile=Win7SP1x64 dumpregistry -o 0xfffff8a003696010
malfind 查找隐藏或注入的代码/ DLL
volatility -f raw.raw --profile=Win7SP1x64 malfind
可以查找出存在异常的进程
查看文件句柄,如上面malfind发现PID为2233
volatility -f raw.raw --profile=Win7SP1x64 handles -p 620 -t file
获取浏览器的浏览历史,这个指令也经常用到。
volatility -f raw.raw --profile=Win7SP1x64 iehistory
将指定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
常常是用来列举用户及密码、查看获取最后登陆系统的用户。
获取用户: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解出来的)
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
四川省大学生信息安全技术大赛
第一届网刃杯