吴思奇的个人博客(⁄ ⁄•⁄ω⁄•⁄ ⁄)~

04月 11

记一次做zip压缩包解密题的过程

今天遇到一道zip压缩包的解密题,第一次接触CTF相关的东西,感觉挺有意思的。
压缩包结构如下
                                |---flag.zip----->flag
timestamp.zip----->111.zip----->|---setup.sh
                   trips.txt

过程


打开压缩包,注释里提供了NmRpZ2l0cw==的字段,通过base64解密得知明文为6digits,意思为6位数字

1.jpg


得知长度为6为纯数字,我打开了ARCHPR,设定好条件进行爆破,很快,密码破解成功

2.jpg


输入密码,打开111.zip,发现里面还有flag.zip和setup.sh
trips.txt则为一段嘲讽的话~

4.jpg
3.jpg


解压出111.zip,发现还有flag.zip(套娃啊),到了这一步,我没发现任何提示了,尝试解压提示需要密码,换7-zip解压,提示头部错误。

5.jpg


诶嘿,头部错误?那得看看头部有啥了
打开16进制编辑器查看压缩包文件头信息,把0x6个字节改为01,保存后,成功解压出setup.sh

6.jpg


在Linux中.sh文件是脚本文件,打开看看里面有什么线索
打开setup.sh,发现只有一行脚本
zip -e --password=`python -c "print(__import__('time').time())"` flag.zip flag 

意为把flag文件压缩为flag.zip,密码用Python的"print(__import__('time').time())"代码执行结果,而这句Python代码的意思为获取当前的unix时间戳。
也就是它用的密码,是当时创建这个压缩包时的时间的Unix时间戳
此时才恍然大悟,为什么文件名是timestamp.zip了,满满的提示呀~~

7.jpg


于是查看flag的修改日期,计算出时间戳为1598871159
在这前后进行爆破就能得知密码了

8.jpg


此外,Python2的时间戳是保留小数点后2位,而Python3最多7位小数
先从简单的小数点后2位(1598871159.00前后)开始穷举,爆破密码

9.jpg


填入密码,成功拿到flag

10.jpg

总结


总共分为三层
第一层:根据注释进行base64解密,得到提示是6个数字,暴力破解6位数字,然后进入第二个zip文件。
第二层:解压flag.zip,然后用十六进制修改把111.zip的第0x6个字节改为01,解压出setup.sh,查看setup.sh源代码。
第三层:分析setup.sh里的代码。当初出题人压缩的时候,密码通过python设置为了当时的时间戳,由于不确定出题人使用的python版本(python 2时间戳是小数最多2位,python3时间戳小数最多7位),所以根据这个线索,在flag、flag.zip文件包含的几个创建时间、修改时间附近穷举,先从简单的可能出发,假设密码是python2格式的时间戳,就保留2位小数,在那几个创建时间、修改时间上下一段时间范围内进行穷举,最终得出密码。

感想

初次接触这种题,莫名的感觉有点坑啊~
所涉及的知识面比较广,得懂Python、文件格式、时间戳等知识,相互结合起来分析。
不过最后拿到flag还是挺有成就感的。

扩展

《压缩包Zip格式详析》https://blog.csdn.net/qq_43278826/article/details/118436116
转载请注明出处(https://wusiqi.cn/archives/548/)
来源网站:547的Blog - 萌萌哒 ~

标签:CTF, 密码破解, 压缩包, zip

已有 9 人抢先你了

  1. 叼茂SEO.bfbikes.com

  2. 怎么收藏这篇文章?

  3. 看的我热血沸腾啊https://www.237fa.com/

  4. 想想你的文章写的特别好https://www.237fa.com/

  5. 想想你的文章写的特别好https://www.ea55.com/

  6. 想想你的文章写的特别好https://www.ea55.com/

  7. 不错不错,我喜欢看 www.jiwenlaw.com

  8. 想想你的文章写的特别好www.jiwenlaw.com

  9. 文章的确不错啊https://www.cscnn.com/

添加新评论