0x00 前言
本文对我曾接触到过的CTF中的内存取证类题目与USB流量分析类题目进行一个总结类梳理。其中kali里集成了取证神器volatility与流量分析神器tshark
0x01 Volatility
第一步提取内容镜像信息
常用命令volatility -f <xxx.vmem>(或xx.raw) imageinfo

使用imageinfo插件获取到基本信息,特别是内存数据是什么操作系统下生成的,这点尤为重要 (如图的WinXPSP2x86) 因为在接下来每一步都要命令“–profile”指定操作系统的属性。
第二步列取文件中曾使用的进程信息
常用命令: pslist/pstree/psscan


1)pslist无法显示隐藏/终止进程。
2)解决这个问题的插件是psscan,这个插件输出的内容会比pslist多得多。(所以全面信息获取用psscan)
3)pstree同样也是扫描进程的,但是是以进程树的形式出现的。
同时可以搭配grep命令进行对可疑进程(cmd.exe、notepad.exe等)的快速筛选

第三步根据进程中使用的工具对应查看
常用命令:cmdscan notepad

cmdscan 可以用来查看受害者系统上攻击者操作的最强大的命令之一,无论他们是否打开cmd.exe。简单地说,可以看到攻击者在命令提示符中键入的内容。

当进程中存在notepad.exe时,可用notepad插件查看文本中所写内容

第四步文件探测
常用命令:filescan
该命令通常结合grep命令对所需要文件进行筛选,以下我已在CTF中遇到的两道内存取证的文件隐藏做出结论:大概率搜索桌面即可。

第五步提取文件
常用命令:dumpfiles memdump
volatility -f [imgfile] –profile=[imgversion] dumpfiles -Q [file_offset] –dump-dir [outdir]

注意红框所示需要对应,–dump-dir指定下载到本地的什么位置(这里是当前目录),注:下载下来的文件如果是普通文件(图片,文本)会直接以dat结尾,如果是压缩包,则会在前面加上一个.zip(蓝箭头所指)后续的使用修改为对应文件名及其后缀即可。
dump画图进程: dump 出来的进程文件,可以使用 foremost 来分离里面的文件。332是对应进程的pid 。不进行分离的题型参看https://shawroot.hatenablog.com/entry/2019/11/12/%E8%AE%B0%E4%B8%80%E9%81%93%E7%BA%A2%E5%B8%BD%E6%9D%AFCTF%E9%9A%90%E5%86%99%E9%A2%98%E6%B5%85%E5%AD%A6Volatility

0x02 USB流量分析
这里以XMAN2018挑战赛的AutoKey进行学习
pcapng文件用wireshark打开出现如下信息,这里是经典的提取usb流量问题

tshark -r attachment.pcapng -T fields -e usb.capdata > usbdata.txt
-r: 读取本地文件,可以先抓包存下来之后再进行分析;
-T,-e: 指的是打印这两个字段;
结果会保存到usbdata.txt中。

用脚本对USB信息进行翻译
#!usr/bin/env python #-*- coding:utf-8 -*- mappings = { 0x04:"A", 0x05:"B", 0x06:"C", 0x07:"D", 0x08:"E", 0x09:"F", 0x0A:"G", 0x0B:"H", 0x0C:"I", 0x0D:"J", 0x0E:"K", 0x0F:"L", 0x10:"M", 0x11:"N",0x12:"O", 0x13:"P", 0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 0x20:"3", 0x21:"4", 0x22:"5", 0x23:"6", 0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 0x28:"\n", 0x2a:"[DEL]", 0X2B:" ", 0x2C:" ", 0x2D:"-", 0x2E:"=", 0x2F:"[", 0x30:"]", 0x31:"\\", 0x32:"~", 0x33:";", 0x34:"'", 0x36:",", 0x37:"." } nums = [] keys = open('usbdata.txt') for line in keys: if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0': continue nums.append(int(line[6:8],16)) keys.close() output = "" for n in nums: if n == 0 : continue if n in mappings: output += mappings[n] else: output += '[unknown]' print 'output :\n' + output

还有一种USB信息转换为轨迹坐标的方式。文章参看Root师傅的博客文章https://shawroot.cc/archives/580
0x03 网络安全与执法专业比赛取证10题
考点:volatilty内存取证,USB流量分析,希尔密码

进程中没有看到notepad,但是又cmd进程,利用cmdscan插件查看得到希尔密码的矩阵,还缺少一个密文。

进行文件搜索,最后将zip文件提取出

修改后缀后打开压缩包发现是一个img文件。考虑linux磁盘挂载。

可以看到有一个usb.pcapng文件,考虑USB流量分析,这里直接用tshark命令搭配上面的脚本获取隐藏信息

得到写入密码的密文,利用在线网站进行解密:https://www.dcode.fr/hill-cipher

如上所选修改成对应的3×3矩阵。得到最终的结果
最后注意要取消磁盘挂载:umount ./guazai(挂载文件夹)
文章参考:https://shawroot.cc/archives/673
0x04 最后
感谢Root师傅的带飞,这次比赛跟Root师傅学到了好多。