预备知识:wireshark流量分析、binwalk、内存取证、USB、volatility 、strings、grep
参考、致敬:CTF 内存取证 USB流量分析
附件分析
拿到附件后,只有一个数据包文件。不用想,直接用wireshark打开分析一波。
##文件分析
这玩意确实挺大的,首先考虑包含了文件,使用kali linux 下的工具binwalk分析一波。
但是binwalk出来的附件在解压时都损坏了,此路不通。
继续分析我们的流量包,追踪http协议。
发现了巨大的包,可能有附件,于是在wireshark中导出http对象。(左上角文件-导出对象-http)
接下来观察导出的文件
有两个一样的较大的php文件,考虑文件包含。再次丢到binwalk里面分析一波。
果不其然,分离出了data.vmem文件。可以理解为vmem文件保存了当时内存中的数据,以支持在虚拟机中的暂停功能。
接下来用内存分析工具volatility 分析data.vmem
使用方法: volatility -f filename imageinfo //查看镜像信息。
通过imageinfo 可以确定,镜像为WinXPSP2x86或者WinXPSP3x86.(影响不大)
接下来使用命令 volatility -f data.vmem –profile=WinXPSP2x86 filescan 扫描内存中的文件
可以看到有一堆文件。由于是ctf比赛,尝试过滤文件:比赛名称xctf或者flag 即
volatility -f data.vmem –profile=WinXPSP2x86 filescan |grep flag
volatility -f data.vmem –profile=WinXPSP2x86 filescan |grep xctf]
通过过滤flag 我们找到了flag.img文件。
DUMP IT!
接下来需要做的事将flag.img 导出。
使用命令 volatility -f data.vmem –profile=WinXPSP2x86 dumpfiles -Q 0x0000000001155f90 -D ./
将文件导出至当前目录。
导出文件为二进制格式。
接下来继续binwalk分析。
可以得到一个压缩包,压缩包里包含了加密的usb.txt文件。下一步就是获取加密的密码。
在尝试爆破的同时,继续进行内存取证分析。
通过volatility工具的子命令 hivelist 可以获得内存中的注册表信息,cmdscan查看cmd操作,connscan查看网络连接,pslist查看进程。
通过cmscan我们可以发现提示了密码:
尝试将该密码作为文件的解压密码(使用360解压,可以自动修复文件)—-成功!
现在获得了敲击码,接下来就是将敲击码转换为字符。
使用脚本
1 | import sys |
读取usbdata.txt即可获取flag.
注意将括号[]转为{}