前言
實際上壓縮包本身並不具備隱藏信息的功能,但由於在CTF競賽中,經常出現壓縮包與隱寫術結合在一起的題目,所以我們需要掌握在CTF競賽中有關壓縮包的題目的常見考察方向及分析手段。
CTF中常見的壓縮包套路
-
利用進制轉換隱藏信息
-
作為冗余信息或隱藏信息藏在其他文件中,一般是圖片
-
簡單密碼爆破
-
字典爆破/掩碼攻擊
-
偽加密
-
明文攻擊
-
CRC32碰撞
-
文件修復
-
冗余信息拼接
-
注釋隱藏密碼
0.1 利用進制轉換隱藏信息
我們來看這個例子
分析字符串就會發現,這一長串字符串是十六進制字符串,嘗試十六進制解碼。
雖然輸出了一堆亂碼,但是我們還是能看見存在敏感字符“flag.txt”。判斷為壓縮包后,將其保存為ZIP文件。可以編寫腳本進行十六進制解碼后保存為ZIP文件,也可以直接使用winhex。將其保存為ZIP文件后就可以正常解壓。
0.2 作為冗余信息隱藏在其他文件中,將壓縮包提取出來。
1 將壓縮包隱藏在圖片中
舉個栗子:
使用winhex打開一個后綴名為.jpg的圖片,發現在jpg圖片的結束標識“FFD9”之后,就是ZIP文件的文件標識“504B0304”,而且可以看到flag.txt字樣,如圖:
解決方式:直接將圖片后綴名改為zip,即可解壓。
2 使用隱寫算法將ZIP文件隱藏在圖片中
若是使用隱寫算法隱藏在圖片中,則需要借助相應的工具,使用StegSolve找到隱藏的信息。
0.3 簡單密碼爆破
一般需要爆破的壓縮包密碼不會復雜,大部分情況都是純數字,這里使用ziperello對壓縮包進行爆破。
步驟為:
- 打開ziperello,選擇要解密的壓縮包。
- 點擊右下角的“NEXT”,然后選擇暴力破解。
- 選擇字符集,一般比賽中使用到爆破的,都是純數字的密碼,且長度較短。
- 再次“NEXT”,開始爆破,很快密碼就爆破出來了。
0.4 掩碼攻擊
掩碼攻擊的意思,就是已知這個壓縮包的密碼格式,根據這些已知的條件,來構造一個符合已知條件的字典,將所有可能的結果列出來,進行爆破。
步驟為:
- 打開ziperello,選擇要解密的文件,然后選擇“基於模板的破解”。
- 根據所得的信息構造符合條件的模板,如圖所示,“a”,“A”,“#”分別代表一個字符集,也可以雙擊左邊的字符集窗格構建自定義的字符集。
- 得到密碼;
0.5 ZIP偽加密
ZIP文件格式中存在兩個加密標志位,前面的加密標志位為數據區的加密標志位,后面的加密標志位為目錄區的加密標志位。所謂偽加密就是修改目錄區的加密標志位,使本來沒有加密的ZIP文件,在解壓的時候,需要用戶輸入密碼來進行解壓,但是這個密碼又是不存在的。
我們以同一個壓縮文件的無加密、偽加密、真加密三種形式來做比較,如圖:
當我們在判斷一個壓縮文件為偽加密時,只需將其目錄去的加密標志位的前面一位改為奇數即可。使用winhex或010Editor均可完成。
0.6 明文攻擊
明文攻擊: 是一種攻擊模式,指攻擊者已知明文、密文及算法,求密鑰的過程。更詳細的原理請讀者自行谷歌。
在一個文件夾中存在一個加密的壓縮包和一個未加密的文件,將未加密的文件進行無加密的壓縮,對比兩個壓縮文件中相同文件的CRC32值,如果一致,就可以進行明文攻擊,如果不一致,則換一種壓縮方式繼續比較。
0.7 CRC32碰撞
CRC32:CRC本身是“冗余校驗碼”的意思,CRC32則表示會產生一個32bit(8位十六進制數)的校驗值。在產生CRC32時,源數據塊的每一位都參與了運算,因此即使數據塊中只有一位發生改變也會得到不同的CRC32值,利用這個原理我們可以直接爆破出加密文件的內容,但是CRC32值也存在被碰撞的可能,也就是會出現內容不一樣但是CRC32值一樣的情況,所以利用CRC32碰撞的方法得知壓縮文件的內容,一般是在被壓縮的文件很小的情況下,在CTF中一般為4個字節。
0.8 文件修復
嘗試解壓ZIP文件時報錯,提示ZIP中的文件xxx.xxx:數據錯誤,文件被破壞。這個套路也是跟文件的格式有關,一般都是修改ZIP文件的開始標識,使得在解壓文件時產生錯誤,無法解壓。ZIP文件的頭部標識為“504B0304”且為固定值,利用winhex將其修改回來即可成功解壓。
如圖:
0.9 冗余信息拼接
ZIP壓縮文件目錄結束標識位為“504B0506”,且通常帶有18字節(我們將每個偏移量視作一位,也是一個字節)的冗余數據,總共長度一般為22個字節,所以這個套路就是將隱藏信息分為多片隱藏在多個壓縮包的結尾。而這些壓縮包的最后會有n個字節的冗余數據,將其拼接后得到一串字符串,解碼后可得出答案。
1.0 注釋隱藏代碼
往往有時候,加密者會把密碼放在屬性里面,如下圖:
我們可以看到,這個Zip壓縮文件的密碼就是www.cnblogs.com了