题目在 http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=57
下载到的文件是misc_fly.pcapng,使用wireshark打开,能看到一堆tcp、http和dns协议混合的数据包,在上面的框里面输入http,让它只显示http协议的数据包。
![QQ20150618-1@2x.png][1]
逐个展开大致的看了下,是在qq邮箱里面发送邮件。其中有一个上传文件行为,分为5个HTTP请求。
{
"path": "fly.rar",
"appid": "",
"size": 525701,
"md5": "e023afa4f6579db5becda8fe7861c2d3",
"sha": "ecccba7aea1d482684374b22e2e7abad2ba86749",
"sha3": ""
}
![QQ20150618-2@2x.png][2]
接下来提取文件 在每个请求的media type上点右键export
![QQ20150618-4@2x.png][3]
发现提取出来的文件比实际的要大呢
-rw-r--r-- 1 root root 131436 6月 18 15:47 1
-rw-r--r-- 1 root root 131436 6月 18 15:47 2
-rw-r--r-- 1 root root 131436 6月 18 15:48 3
-rw-r--r-- 1 root root 131436 6月 18 15:48 4
-rw-r--r-- 1 root root 1777 6月 18 15:48 5
怀疑是文件头部添加了东西,对比一下每个文件,确实在大约0x4d0的位置以上都是一样的。后来搜索得知这是文件分块的头部,存储有分块大小等信息。 ![QQ20150618-3@2x.png][4]
提取出来的文件总大小是527521,而上面提示的文件大小是525701,(527521 - 525701) / 5.0 = 364就是每个文件被添加的头部的大小,手动的去掉就可以了。
可以使用命令dd if=输入文件名 bs=1 skip=364 of=输出文件名
然后cat,或者用Python seek一下就好了。
最终得到一个rar文件。
其实提取文件还有简单的方法就是使用foremost,foremost -i -e misc_fly.pcapng
,然后output/rar/xxx.rar就有了。但是文件大小是对的,md5却是错的。再研究一下。。。。
文件在mac和linux打开都提示输入密码,在windows下使用360压缩提示文件损坏,怀疑文件被修改过。使用Bless打开文件,看到第0X17个字节处rar加密标志位是84,可能是伪加密,将它修改为80以后,保存并正常解压得到一个exe。
![QQ20150618-6@2x.png][5] 继续开windows虚拟机,
运行这个exe得到一屏幕的苍蝇,也倒符合了这个题目的意思。。。
回到linux,使用binwalk分析可以看到文件末尾包含一个图片,有点异常,提取出来看看。还是用dd if=flag.txt bs=1 skip=991232 of=1.png
974018 0xEDCC2 Zlib compressed data, best compression, uncompressed size >= 14460
979947 0xEF3EB PC bitmap, Windows 3.x format, 49 x 23 x 8
990196 0xF1BF4 XML document, version: "1.0"
991232 0xF2000 PNG image, 280 x 280, 1-bit colormap, non-interlaced
得到一个二维码,扫一下就能获取到flag了。结果是flag{m1Sc_oxO2_Fly}
[1]: /assets/blog/images/296/1.png
[2]: /assets/blog/images/296/2.png
[3]: /assets/blog/images/296/3.png
[4]: /assets/blog/images/296/4.png
[5]: /assets/blog/images/296/5.png