压缩包结构如下
|---flag.zip----->flag
timestamp.zip----->111.zip----->|---setup.sh
trips.txt
过程
打开压缩包,注释里提供了NmRpZ2l0cw==的字段,通过base64解密得知明文为6digits,意思为6位数字
得知长度为6为纯数字,我打开了ARCHPR,设定好条件进行爆破,很快,密码破解成功
输入密码,打开111.zip,发现里面还有flag.zip和setup.sh
trips.txt则为一段嘲讽的话~
解压出111.zip,发现还有flag.zip(套娃啊),到了这一步,我没发现任何提示了,尝试解压提示需要密码,换7-zip解压,提示头部错误。
诶嘿,头部错误?那得看看头部有啥了
打开16进制编辑器查看压缩包文件头信息,把0x6个字节改为01,保存后,成功解压出setup.sh
在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了,满满的提示呀~~
于是查看flag的修改日期,计算出时间戳为1598871159
在这前后进行爆破就能得知密码了
此外,Python2的时间戳是保留小数点后2位,而Python3最多7位小数
先从简单的小数点后2位(1598871159.00前后)开始穷举,爆破密码
填入密码,成功拿到flag
总结
总共分为三层
第一层:根据注释进行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 - 萌萌哒 ~
叼茂SEO.bfbikes.com
怎么收藏这篇文章?
看的我热血沸腾啊https://www.237fa.com/
想想你的文章写的特别好https://www.237fa.com/
想想你的文章写的特别好https://www.ea55.com/
想想你的文章写的特别好https://www.ea55.com/
不错不错,我喜欢看 www.jiwenlaw.com
想想你的文章写的特别好www.jiwenlaw.com
文章的确不错啊https://www.cscnn.com/