知识点:
volatility 框架是一款用于易失性内存取证的重量级框架。在该框架下我们可以完成许多取证的操作,获取我们想取得的信息。其支持的操作系统也非常广泛,同时支持 windows , linux, Mac OSX,甚至也支持 Android 手机使用ARM处理器的取证。因此,它也是所有网络取证爱好者的必学框架。
volatility 使用:
volatility -f <文件名> -–profile=<配置文件> <插件> [插件参数]
常用插件:
imageinfo
:
显示目标镜像的摘要信息,知道镜像的操作系统后,就可以在 –profile 中带上对应的操作系统
pslist/pstree/psscan
:
pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以.
pstree:以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程
psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程
cmdscan
:
可以用来查看受害者系统上攻击者操作的最强大的命令之一,无论他们是否打开cmd.exe
简单地说,您可以看到攻击者在命令提示符中键入的内容。
filescan
扫描所有的文件列表。配合 dumpfile有意想不到的效果
dumpfile/memdump
:
文件缓存就在内存中,而这些缓存,就成了信息的采集点!
mendump:提取出指定进程,常用foremost 来分离里面的文件
hashdump
:
查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容
svcscan
:
扫描 Windows 的服务
connscan
:
查看网络连接
首先将压缩包打开,发现里面有个data.vmem文件,vmem是vm虚拟机的内存文件,将其提取出来。
拖到kali里面用Volatility分析。
查看一下进程树:
volatility -f data.vmem pstree
发现里面有cmd进程,查看cmd中的内容:
volatility -f data.vmem cmdscan
有一个passwd,猜测有一个压缩文件。
然后对内存中的文件进行扫描,使用flag字符筛选:
volatility -f data.vmem filescan | grep flag
存在一个flag.img。
使用dumpfile命令将其导出:
volatility -f data.vmem dumpfiles -Q 0x0000000001155f90 -D ./
导出了个.dat文件,然后用foremost尝试分离,果然分离到了一个zip文件,用之前得到的密码解压得到usbdata.txt文件。
然后就简单啦,直接用脚本还原出flag。
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('D:\desktop/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)
二维码没什么用,扫出来的信息一度误导我,让我以为有个加密的压缩包。。。
在音频频谱图里发现这个,前面5个后面7个,截取出来:
根据高低音频判断出数字:187485618521
然后base64加密得到flag。
'-0-'
可以代替’or’1绕过