奇怪的文件
单独记录这个题的原因是:
涉及到了太多的知识盲区,做这个题真的帮助我学到了很多。例如真真实实的了解了zip文件格式的详细分析、pyc反编译、lsb图片隐写等等。可惜纵横靶场上的wp太过简洁,不适合新手阅读(还要浪费积分),所以本文以一个真实的新手思路来解决这个问题~希望能帮助自己回忆的同时能更好的帮助其他人。
题目描述:在上位机中发现奇怪的文件,你能发现其中的秘密吗?flag形式为 flag{}
文件下载下来是三个不知什么格式的文件,一开始采用010分析part1,只能看到文件中似乎存在jpg文件
所以一开始的想法是在kali中直接binwalk提取隐藏文件。
事实证明我的想法还是太过简单了:嘶,竟然提取不出来,foremost也不行= =那为啥文件中会有一个jpg格式的隐藏文件?
好了接下来就到了我们请神的时候了!反手一个wp请神:
part1、part2、part3分别对应的是ZIP压缩包的压缩源文件数据区、压缩源文件目录区和压缩源文件目录结束标志。
修复的方法是:在每一部分前添加50 4b(也就是zip的常见标志:pk)两个字节;
part1中CRC值缺失,可由part2中找到;part2中没有压缩文件名可由part1确定。
现在回头看,就能猜到为什么提取不出来jpg文件了。。因为人家根本就是一个缺失的文件,二进制分析中的jpg代表的是源压缩文件中存在jpg文件。三个文件part1-3分别就代表的zip的三个主要组成部分(这。。哪个菜鸡能想得到不过理性分析:有了一定的知识广度,根据前面的分析确实可以判断出是zip压缩文件的各个部分)
现在根据其他师傅的wp可以展开我们后面的工作了。
在这之前还是需要详细了解下zip文件的格式分析:ZIP压缩算法原理详解
为了更加直观的详细分析压缩源文件数据区的格式,我们随便选取一个电脑中存在的压缩文件:01.zip来详细分析:
如上图所示,我们对压缩源文件数据区每个字节的含义逐个分析:
50 4B 03 04(4 bytes):即为我们zip格式压缩文件的头文件标记。其中50 4B的ASCII对应的是PK,是创始人Phil Katz的缩写,可以用这个来识别zip格式压缩文件。实际上zip文件的各个部分都以这个为开头。
14 03(2 bytes):解压文件需要的pkware版本,部分也有14 00的。
00 00(2 bytes):全局定位标记,可以查看zip文件有无加密,有则为01 00,无则为00 00.如果没有设置密码,但我们把这个修改为了01 00则为俗称的伪加密。
08 00(2 bytes):压缩方式。固定为08 00
8E 92(2 bytes):最后修改文件时间
DD 52(2 bytes):最后修改文件日期
E5 3E 05 5D(4 bytes):CRC-32校验码(5D053EE5)
BC F2 49 00(4 bytes):压缩后尺寸
71 7E 69 00(4 bytes):压缩前尺寸
07 00(2 bytes):文件名长度。代表扩展记录长度后面,包含的压缩源文件名有几个字节。
00 00(2 bytes):扩展记录长度
30 31 2E 70 63 61 70(7 bytes):和前面的07 00对应。可以看到右侧转换出来的即为我们zip文件中包含有01.pcap流量包。
其他两个部分:压缩源文件目录区和压缩源文件目录结束标志的详细分析这里就不再详细赘述,具体可参考:ZIP文件组成
下面我们先补全part1-part3的文件头50 4b。注意:每个part都要先加上50 4b!!!。我这里只展示了part1部分的添加。
part1压缩源文件数据区详细分析
从上面我们仍然可以按照前面的进行详细分析:
开头和前面分析的一样,唯一值得注意的是全局定位标记01 00,代表我们后面恢复的压缩文件有密码= =提前做好准备(哎呀 好复杂)
我们直接从jpg那里回头推:0D 00代表压缩文件名为13个字节:keyvisual.jpg。
那前面的76 9A 06 00后面的8个字节即为压缩的前后尺寸。
而从前面推的08 00 压缩方式后面的四个字节:E7 BE 03 4F即为我们上次修改的时间、日期。
分析到这里就可以看到四个字节的00 00 00 00即为我们缺失的CRC-32校验码。
因此我们可以回头看part2压缩源文件目录区部分:
part2压缩源文件目录区详细分析
补全了开头的50 4B后:
50 4B 01 02(4 bytes):压缩源文件目录区的文件头标记。和数据区的不同即为01 02。
3F 00(2 bytes):压缩使用的pkware版本
14 00(2 bytes):解压文件需要的pkware版本
01 00(2 bytes):全局定位标记,这里代表加密。
08 00(2 bytes):同part1
E7 BE 03 4F(4 bytes):上次修改的时间、日期。同part1
34 47 56 50(4 bytes):我们需要的CRC-32校验码。用这个去补全part1的00 00 00 00
76 9A 06 00(4 bytes):压缩前尺寸。同part1
E2 9C 06 00(4 bytes):压缩后尺寸。同part1
0D 00(2 bytes):文件名长度
24 00(2 bytes):扩展字段长度
00 00(2 bytes):文件注释长度
00 00 (2 bytes):磁盘开始号
00 00(2 bytes):内部文件属性
20 00 00 00(4 bytes):外部文件属性
00 00 00 00(4 bytes):局部头部偏移量
上面即为对part2压缩源文件目录区的详细分析,可以得到我们需要的CRC-32校验码:34 47 56 50
对part1部分补全:(如红字)
同时把part1部分的文件名:keyvisual.jpg对应的16进制:4B 65 79 56 69 73 75 61 6C 2E 6A 70 67 8D补全到part2中:
part3压缩源文件目录结束标志详细分析
50 3B 05 06(4 bytes):压缩源文件目录结束标志头
00 00(2 bytes):当前磁盘编号
00 00(2 bytes):目录区开始磁盘编号
01 00(2 bytes):本磁盘上记录总数
01 00(2 bytes):目录区中记录总数
5F 00 00 00(4 bytes):目录区尺寸大小
A1 9A 06 00(4 bytes):目录区对第一张磁盘的偏移量
00 00(2 bytes):ZIP文件注释长度
前面已经完成了zip文件每个部分的补全操作。下面将三个部分整合为一个文件:
具体操作:在010中将part2 和part3部分的16进制代码复制粘贴到part1部分的结尾。如下图所示
ctrl+s保存,给part1的文件名后面加上后缀.zip即可打开我们需要的zip文件:
可以看到:如我们前面分析的一样,zip文件果然有加密~
暴力破解
题目中没有任何和压缩文件有关的信息,更不用谈和压缩文件密码有关的信息了= =
所以似乎我们只能采用暴力破解来获取密码。如下图所示:暴力破解要至少一天的时间。。。
虽然肯定是可以破解出来,但所耗的时间成本太大了。。真正比赛也不会给这么多时间(按道理应该会给提示的)但不论是题目,还是我们恢复出的zip压缩文件中的注释,都没有我们需要的密码信息,所以只能硬着头皮上了。
这里为了不浪费时间直接用wp破解出来(wp永远嘀神!滑稽)
把压缩文件里的jpg图片解压出来,发现:
什么都发现不了~没有我们需要的flag。一般来说题出到这里已经差不多了= =(收手吧,阿祖!外面全是警察.jpg)
没办法,只能继续十六进制分析了~
检查文件头什么的也没问什么问题,搜索常见字符串也没有发现。。。
没办法,请神吧~
zip文件逆序
解压后得到一个JPG文件,在文件末尾附加信息,经识别,是一个zip文件的逆序
看到jpg文件的最后,果然有zip文件的文件头:pk的逆序kp。
看到这里真的是心中直呼:6666.真的是山路十八弯啊~这种逆序操作,放到binwalk里面照样也是分析不出来的= =
接下来就是把白色部分的zip逆序(010editor还是挺给力的,识别很方便),倒过来后在生成一个新的zip文件了:
具体流程:
先将需要逆序的部分十六进制文件复制生成一个新的文件:reverse
编写py脚本逆序读取文件:
# coding:utf-8
f1 = open('reverse','rb+')
f2 = open('reverse.zip','wb+')
f2.write(f1.read()[::-1])
f1.close()
f2.close()
执行py文件得到reverse.zip。
pyc文件反编译
解压zip文件,发现文件中存在有pyc文件,pyc文件反编译即为py文件。
直接使用在线pyc反编译工具反编译pyc文件
得到enc.py为加密算法的代码,根据此我们可以修改构建解密算法enc1.py
对encrypted加密文件解密,得到decrypted文件:
扔进010,发现解密后的文件为png文件,所以直接修改后缀名后打开:喂,怎么兜兜转转又是这个图?wtf
老规矩:请神吧。(我已经被折腾废了~)
lsb隐写密码爆破
该图片有lsb隐写,但隐写信息加密,使用https://github.com/livz/cloacked-pixel中的工具对隐写密码爆破,密码为U!lSb29
从decrypted.png中释放出来一个jpg文件,打开文件发现是一半flag
肉眼识别出为:flag{2ceuagIha7v8mlfod9uas1d86wqer0}
总结:难,好难,真难!
部分wp参考:
1、ctfhub
2、纵横靶场附件wp