相信不少看過我博客的朋友,都記得我曾經寫過 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@}