相信很多看過我博客的朋友,都記得我曾經寫過 Zip 加密文件破解的文章,如果有沒看過的讀者朋友們參看這里:https://www.cnblogs.com/ECJTUACM-873284962/p/9387711.html
里面提到了明文攻擊的手法,當時我做了一下 15 年強網杯的爆破?,我當時通過 ARCHPR 和 pkcrack 兩種手段均未成功破解壓縮包,上網找相關的 writeup ,未果,我也不知道為啥沒成功,時隔三個月,我再次嘗試的時候,今早 0:00 的時候,成功地跑出了答案,欲哭無淚~~只能說出題人太過分了,竟然埋下了這個坑。
作為一個目前還在役的 CTF 選手,我會給大家講解一些有意思的賽題啊,講解我是如何踩坑的,我又是如何繞過這個坑的。一方面是自我的總結,一方面也是給大家一點學習思路,如何去分析一道賽題,我不會去重復的解讀一些基礎知識,更多的基礎知識請參看 ctf-wiki 上面的內容,目前我是主要負責維護 Web 和 Misc 部分內容。本文也會在后續同步更新到 ctf-wiki 上,當然也歡迎大家一起來 Contribute 。
ctf-wiki 地址:https://ctf-wiki.github.io/ctf-wiki/
本文給大家帶來的賽題是來自 15 年強網杯的爆破?
賽題地址為:https://static2.ichunqiu.com/icq/resources/ctf/qwb/6005400ffa8ecd5053ab56d0f868d198.zip
測試環境
本題我將會從 Windows 和 Linux 兩個系統環境下講解如何去解決這個問題,我們需要用到的實驗環境有:
Windows 10家庭版ARCHPR 4.53Ubuntu 18.04pkcrack 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進行明文攻擊
首先這題我建議大家下 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@}
