相信不少看过我博客的朋友,都记得我曾经写过 Zip
加密文件破解的文章,若是有没看过的读者朋友们参看这里:https://www.cnblogs.com/ECJTUACM-873284962/p/9387711.htmlhtml
里面提到了明文攻击的手法,当时我作了一下 15
年强网杯的爆破?,我当时经过 ARCHPR
和 pkcrack
两种手段均未成功破解压缩包,上网找相关的 writeup
,未果,我也不知道为啥没成功,时隔三个月,我再次尝试的时候,今早 0:00
的时候,成功地跑出了答案,欲哭无泪~~只能说出题人太过度了,居然埋下了这个坑。git
做为一个目前还在役的 CTF
选手,我会给你们讲解一些有意思的赛题啊,讲解我是如何踩坑的,我又是如何绕过这个坑的。一方面是自个人总结,一方面也是给你们一点学习思路,如何去分析一道赛题,我不会去重复的解读一些基础知识,更多的基础知识请参看 ctf-wiki
上面的内容,目前我是主要负责维护 Web
和 Misc
部份内容。本文也会在后续同步更新到 ctf-wiki
上,固然也欢迎你们一块儿来 Contribute
。github
ctf-wiki
地址:https://ctf-wiki.github.io/ctf-wiki/算法
本文给你们带来的赛题是来自 15
年强网杯的爆破?shell
赛题地址为:https://static2.ichunqiu.com/icq/resources/ctf/qwb/6005400ffa8ecd5053ab56d0f868d198.zipbash
测试环境工具
本题我将会从 Windows
和 Linux
两个系统环境下讲解如何去解决这个问题,咱们须要用到的实验环境有:学习
Windows 10
家庭版ARCHPR 4.53
Ubuntu 18.04
pkcrack 1.2.2
首先咱们拿到这样一道题,题目标题为爆破?,很明显这题确定是要用到一个破解工具,很暴力的说。测试
咱们下载了这个压缩包之后,咱们看到文件名是 *.zip 结尾,咱们能够当即想到破解压缩包经常使用的几种方式,我在博客上都有写过这些,具体参考原文:https://www.cnblogs.com/ECJTUACM-873284962/p/9387711.html。加密
咱们将其压缩包解压出来,发现里面有两个文件,分别为 Desktop.zip
和 readme.txt
,咱们看看 readme.txt
里面写了什么?
打开之后居然是qianwanbuyaogeixuanshoukandao!!!
,出题人不想让选手看到,这出题人仍是有点意思。咱们再看看那个 Desktop.zip
,咱们能够看到里面有个 readme.txt
文件和 answer
文件夹, answer
文件夹下有 key.txt
文件, flag
应该就藏在这里了。
这题目拿到手上,咱们首先发现解压出来的文件和Desktop.zip压缩包中都含有一样一个文件 readme.txt
,并且并无给出其余相关信息,且文件大小大于 12Byte
,咱们再对比压缩包中的 readme.txt
和原压缩包中的 readme.txt
的 CRC32
的值,咱们发现两个值相同,这说明解压出的 readme.txt
是加密压缩包里的 readme.txt
的明文,因而咱们能够大胆地猜想这很可能是个明文加密。
既然咱们已经知道了它是明文攻击的话,咱们将对其压缩包进行破解,因为解压出的readme.txt是加密压缩包里的 readme.txt
的明文,将 readme.txt
压缩成 .zip 文件,而后在软件中填入相应的路径便可开始进行明文攻击,这里咱们将介绍 Windows
和 Ubuntu
下使用不一样的方式进行明文攻击。
pkcrack
进行明文攻击pkcrack
下载连接:https://github.com/flag-porter/CTF-Tools/blob/master/Tools/Crypto/pkcrack/install
咱们能够直接写个 shell
脚本下载就行了:
#!/bin/bash -ex wget https://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack/pkcrack-1.2.2.tar.gz tar xzf pkcrack-1.2.2.tar.gz cd pkcrack-1.2.2/src make mkdir -p ../../bin cp extract findkey makekey pkcrack zipdecrypt ../../bin cd ../../
把文件保存,改成 pkcrack-install.sh
,而后跑到当前目录下,给它加一个执行权限 x
。
chmod 777 install.sh
或者直接能够:
chmod u+x install.sh
而后运行 ./pkcrack-install.sh
而后当前目录下会生成一个 bin
的文件夹,咱们直接进入 bin
文件夹下,看到有 pkcrack
文件,直接对文件进行明文破解。
./pkcrack -c "readme.txt" -p readme.txt -C ~/下载/misc/Desktop.zip -P ~/下载/misc/readme.zip -d ~/decrypt.zip
咱们所用到的参数选项以下:
-C:要破解的目标文件(含路径) -c:破解文件中的明文文件的名字(其路径不包括系统路径,从zip文件一层开始) -P:压缩后的明文文件 -p:压缩的明文文件中明文文件的名字(也就是readme.txt在readme.zip中的位置) -d:指定文件名及所在的绝对路径,将解密后的zip文件输出
至于其余选项参看 ./pkcrack --help
解密后的结果以下:
咱们能够看到,咱们下午 1:10
开始跑的,下午 3:27
才求解出秘钥。
咱们得出了最终的flag为:flag{7ip_Fi13_S0m3tim3s_s0_3a5y@}
坑点来了
看起来一切都很顺利的样子,一样花了两个多小时,为啥我在博客园上写了我跑了两个小时都没跑出来呢?或者说有朋友遇到了和我同样的问题,我明明和你是同样的,为啥我跑不出结果?
大家可能忽略了一些细节问题,有人曾想过原压缩包是经过什么方式压缩的嘛?还有就是咱们生成的 readme.zip
又该以哪一种方式去生成呢?我就是由于这个问题卡了整整三个月没作出来,不信的话咱们能够看看第二种方法,在 Windows
下用 ARCHPR
进行明文攻击。
首先这题我建议你们下 ARCHPR 4.53
版本,我是在这个版本下测试成功的。成功截图以下:
我相信不少朋友在用 ARCHPR
的时候遇到如下这种状况:
我当时心里是崩溃的,为啥会出现这种状况。
在后来的学习中发现,用 7z
压缩的文件得用 7z
来解压缩, 7z
是一种使用多种压缩算法进行数据压缩的档案格式,和传统的 zip
, rar
相比,它的压缩比率更大,采用的压缩算法不一样,天然而然就可能出现不匹配这种状况,因此咱们在解压缩原压缩包和对文件进行加密的时候得先分析出题人是用什么方式进行加解密的,因此这题的问题显而易见就出来了,通过验证,我发现出题人是用 7z
进行压缩的。
再尝试
咱们已经发现了这个问题,咱们去官网下载 7zip
:https://www.7-zip.org/
而后咱们对原压缩文件用 7z
进行解压缩,而后将 readme.txt
用7z进行压缩便可。而后咱们就能够用 ARCHPR
进行明文攻击了。
结果以下:
咱们将 Desktop_decrypted.zip
解压出来,查看 answer
目录下的 key.txt
便可。
因此最终的flag为:flag{7ip_Fi13_S0m3tim3s_s0_3a5y@}