misc-圖片隱寫及壓縮包技巧


     在ctf-misc中,隱寫題占了好一部分,所以今天來總結一下圖片隱寫及壓縮包的破解。

         當然,最簡單的就是查看屬性,看看是否有經過編碼過后的特殊字符,解碼后可能就是密碼之類的。

一.隱寫

1.利用binwalk工具分離圖片

1.首先將文件放到kali下,利用binwalk命令查看圖片,通過查看描述可以發現圖片中還隱藏了另外一張圖片。

2.接着利用binwalk -e或foremost命令來分離他們。

 

 

 

 

 

 

3.在生成的目錄中,我們可以發現被隱藏的圖片,從而得到flag。

     (當然,作為一個win系統的菜雞,又懶得打開虛擬機傳文件去分離,所以最簡便的方法是用formost直接分離所有文件,formost詳細安裝看這里)(也適用於壓縮包)

2.stegsolve工具的利用:(LSB隱寫)

1.首先打開stegsolve,並open題目圖片

 

 

2.通過點擊左右箭頭,來查看圖片在其它文件格式下的圖像,然后在Gray bits格式下,發現一張隱藏的二維碼,掃描二維碼即可得到flag

3.在其它格式下也可能會有提示信息,例如這張圖

4.在Green plane0格式下直接發現了flag

 

 

3. txt簡單隱寫

【此類題目可以說是最簡單的一類題,通過直接使用記事本或者其它文本編輯軟件,可直接查看。一般拿到圖片后,大多先用記事本查看,從而判斷是否為txt簡單隱寫。一般flag會位於文本開頭或結尾,少數情況會在文本中間,這類情況后面會單獨介紹】

1.拿到圖片后,直接用記事本打開,在文本結尾發現了一串編碼,學習過密碼學的人應該很容易認出這是Unicode加密。

 

 

2.利用解碼器可直接解flag

4.關鍵字搜索

【這類題目與txt簡單隱寫類似,但flag大多隱藏在文本中間,當文本過長的時候,只靠肉眼查找會浪費很多時間,我們可以直接用ctrl+f搜索關鍵字,例如:flag、FLAG、key、KEY或根據賽方要求的格式進行查找】

5. 十六進制文件頭補全及修改

【首先,我們需要知道文件頭是位於文件開頭,用處承擔一定任務的數據,我們可以通過文件頭來判斷文件類型。因此,當文件頭被刪除或修改后,文件可能會打不開,這種情況我們就要根據所給文件的后綴,補全或修改文件頭】

1.先觀察所給的文件類型,發現是jpg格式,我們就要想到jpg文件的文件頭為FFD8FF(常用文件頭

2.利用Winhex打開圖片,查看文件的十六進制,觀察后我們會發現,相比於正常的jpg文件,這張圖的文件頭缺失了三位

3.將文件頭補全后保存,系統會自動生成一個備份文件,防止修改錯誤,而原文件則會變為正常圖片

4.文件頭修改同理,觀察文件頭前幾位,將其修改為正確格式,保存后即可得到正常圖片

 

5.最近還遇到了另一種的修改方式,就是開頭是png格式,但是結尾卻是FF D9(jpg文件結尾),所以需要將開頭改為FFD8FFE0(jpg文件開頭)

6. png格式的IHDR問題

【這類題目最大的標志:圖片格式為png,或當你感覺這張圖片好像被裁掉一部分時,要考慮的這類問題。這類題目的原理我理解的並不是很深刻,僅僅局限於解題方法...】

1.先查看一下原圖

 

 

2.用十六進制編輯器打開圖片后,我們會發現他的標志IHDR,對應左邊十六進制的49 48 44 52,我們以此為界,后面的四位為圖片寬度,再向后四位為圖片高度

2.接下來,我們根據實際情況,將寬度和高度改為相同數值,然后保存

3.再次查看圖片,發現隱藏的flag

 

 

 

7.TXT下隱藏png(暫且這么叫,因為本萌新也不知道叫什么)
如圖:

解題方法:(也許比較片面,望指正)

     一般來說,winhex打開后都是flag.txt下有secret.png, 然而,png原本是看不到的,所以就要修改 A8 3C 7A(原來的)(我的結論就是在png的上下幾行內),需要將7A修改為74,然后保存就有png的圖片了。

二.壓縮包加密

1. 偽加密

Zip偽加密與zip的文件格式有關(zip的格式詳解請翻到本文的最后0x07部分),zip中有一位是標記文件是否加密的,如果更改一個未加密zip包的加密標記位,那么在打開壓縮包時就會提示該文件是加密的。

對於偽加密有以下幾種方法:

1. 在Mac OS及部分Linux(如Kali)系統中,可以直接打開偽加密的zip壓縮包

2. 使用檢測偽加密的ZipCenOp.jar,解密后如果能成功打開zip包,則是偽加密,否則說明思路錯誤

3. 使用16進制編輯器改回加密標記位

以HBCTF的一道題講解這幾種方法:

http://p5.qhimg.com/t01a009da383e529f49.png

如上,嘗試解壓壓縮包時提示有密碼,根據題干:比爆破更好的方法推測為偽加密,用三種方法來解此題:

1. 用除windows外的系統直接打開壓縮包

在Mac OS和部分Linux系統(如Kali)中,右鍵解壓可直接打開偽加密的zip壓縮包,當然,暫未明確何種Linux能打開偽加密壓縮包,如有傳授,不勝感激!

2. 使用ZipCenOp.jar(需java環境) 使用方法

java -jar ZipCenOp.jar xxx.zip

http://p6.qhimg.com/t01d7a8a7a2474c4337.png

經ZipCenOp.jar解密后的壓縮包可直接打開

http://p1.qhimg.com/t015bf711f1a744ff2d.png

3. 用16進制編輯器修改加密標記位

http://p1.qhimg.com/t015dbef209fe99fc31.png

如上圖,修改加密標記位為00,保存,即可打開壓縮包(zip文件結構

2. 爆破/字典/掩碼攻擊

把這三種歸位一類是因為這三種方法在本質上都是逐個嘗試,只不過待選密碼的集合不同

1. 爆破:顧名思義,逐個嘗試選定集合中可以組成的所有密碼,知道遇到正確密碼

2. 字典:字典攻擊的效率比爆破稍高,因為字典中存儲了常用的密碼,因此就避免了爆破時把時間浪費在臉滾鍵盤類的密碼上

3. 掩碼攻擊:如果已知密碼的某幾位,如已知6位密碼的第3位是a,那么可以構造 ??a??? 進行掩碼攻擊,掩碼攻擊的原理相當於構造了第3位為a的字典,因此掩碼攻擊的效率也比爆破高出不少

對這一類的zip問題,推薦windows下的神器AZPR

舉例如下:

(1) 對爆破,以ISCC 2017 Basic-08為例,選定暴力攻擊、字符集和長度后進行爆破

http://p7.qhimg.com/t018a6f366fcf9b3f21.png

http://p4.qhimg.com/t010afd7e4440281a23.png

點擊開始,進行爆破,如下圖,在4ms內就找到了密碼為BIT

http://p0.qhimg.com/t01811a7e2dcb89cade.png

另:此題后續為簡單的base64解密;爆破在密碼長度小於6位時較快,因此如果在7位之內沒有爆破出結果時,基本就可以考慮換個方法了;此題的正規解法是培根密碼的轉換

(2) 字典,還以之前的ISCC 2017 Basic-07舉例,從圖片中分離出一個加密的zip壓縮包,爆破無果后考慮字典攻擊(可從網上下載字典,但大多數題目需要自己構造字典)

http://p6.qhimg.com/t0161c303af1040467f.png

字典攻擊的結果如下圖,在字典選擇合適的情況下,用很短的時間就能找到密碼

http://p0.qhimg.com/t01f20c62ea9613230d.png

繼續以此題為例,解壓后的壓縮包有一個txt文檔和一個握手包,txt內容如下:

http://p1.qhimg.com/t016b6d12c62d06a5ad.png

因此可知握手包的密碼為ISCC****的形式(*代表大寫字母或數字),自己寫程序構造字典

http://p9.qhimg.com/t01023e96e1a806e82c.png

運行此程序得到字典如下:

http://p4.qhimg.com/t01ebdf87a5ebae3d3a.png

之后用aircrack-ng來選中字典跑除握手包的密碼如下圖,不再詳述

http://p5.qhimg.com/t014ad5b26364cf618f.png

(3) 掩碼攻擊,以ISCC 2017 Misc-06為例,題目給了一個jpg圖片,用2中的方法分離出加密的壓縮包,根據題目提示:注意署名, 構造????LiHua的掩碼(?可在自己定義的字符集中任意選擇)進行掩碼攻擊,如下圖:

http://p6.qhimg.com/t01df197bb44c6ff8da.png

攻擊結果如下,只耗費了很少的時間就找到了密碼

http://p9.qhimg.com/t011e91c09434272596.png

 

3.明文攻擊

明文攻擊是一種較為高效的攻擊手段,大致原理是當你不知道一個zip的密碼,但是你有zip中的一個已知文件(文件大小要大於12Byte)時,因為同一個zip壓縮包里的所有文件都是使用同一個加密密鑰來加密的,所以可以用已知文件來找加密密鑰,利用密鑰來解鎖其他加密文件,更詳細的原理請讀者自行谷歌

舉個例子,已知 明文攻擊.zip 中存在的文件 明文.txt,

因此將 明文.txt 壓縮,這里需要判斷明文壓縮后的CRC32是否與加密文件中的一致,若不一致可以換一個壓縮工具。

http://p4.qhimg.com/t0112994a09cc25c574.png

攻擊過程如下:

http://p2.qhimg.com/t0170f27bf19e30b533.png

點擊開始,很快就恢復了密碼

http://p4.qhimg.com/t016abbabfa89c43970.png

另:當明文的大小比較小時,攻擊速度會比較慢;即使有時沒有恢復密碼,也可以使用明文攻擊,最后點保存還是能得到壓縮包里內容的。

 

4. CRC32碰撞

CRC32:CRC本身是“冗余校驗碼”的意思,CRC32則表示會產生一個32bit(8位十六進制數)的校驗值。

在產生CRC32時,源數據塊的每一位都參與了運算,因此即使數據塊中只有一位發生改變也會得到不同的CRC32值,利用這個原理我們可以直接爆破出加密文件的內容

還是以之前HBCTF偽加密那道題為例,另一種解法就是CRC32碰撞,打開壓縮包,可以看出壓縮文件 flag6位數

的CRC32值為0x9c4d9a5d

http://p4.qhimg.com/t01b82b48613741c1c9.png

因此寫出碰撞的腳本如下:

http://p1.qhimg.com/t01a640855d935796bf.png

要特別注意

if (binascii.crc32(str(i)) & 0xffffffff) == crc:

在 Python 2.x 的版本中,binascii.crc32 所計算出來的 CRC 值域為[-2^31, 2^31-1] 之間的有符號整數,為了要與一般CRC 結果作比對,需要將其轉為無符號整數,所以加上& 0xffffffff來進行轉換。如果是 Python 3.x 的版本,其計算結果為 [0, 2^32-1] 間的無符號整數,因此不需額外加上& 0xffffffff 。

腳本的運行結果如下,即為壓縮文件的內容:

http://p5.qhimg.com/t01e060547556133ddc.png

再舉另一個bugku中的例子,下載下來的文件是68個壓縮包,並且根據binwalk的檢查結果,每個壓縮包里都有一個大小為4個字節,名為out.txt的壓縮文件

http://p0.qhimg.com/t010586f8c300e85b02.png

用如下的腳本碰撞出所有壓縮包中的數據:

http://p9.qhimg.com/t01be844b801390f33c.png

http://p7.qhimg.com/t0113a72419e06317f1.png

此題較為繁瑣,之后的步驟不再展開

另:限於CPU的能力,CRC碰撞只能用於壓縮文件較小的情況

5. 修改格式

這種情況花樣較多,難以做一個詳細的總結,因此只列舉最常見的缺少文件頭或文件尾。

放一個zip文件格式講的較清楚的鏈接,通過對zip文件格式的了解,可以解釋之前偽加密的問題,同時也可以對缺少文件頭或文件尾有更直觀的認識。

http://p5.qhimg.com/t0159fc55b30cd3e507.png

如上為正常zip,缺頭zip和缺尾zip的binwalk掃描結果,根據掃描結果用16進制編輯器添加文件頭或文件尾,即可修復zip。

   當然,也有些說法為C4 3D 7B 00 40 07 00是rar文件尾(有的wp上說這就是rar文件的問件尾,但是我好像看過別的rar文件,尾部並不是這樣的),將文件頭52 61 72 21 1A 07 00補上,改后綴為rar,打開后文件信息部分出現flag

三.最后

     比賽中肯定好幾種知識一起用,要隨機應變。

四.參考文章:

      https://blog.csdn.net/Dog_Captain/article/details/89028552        作者:Sn1Per_395                    

      https://www.anquanke.com/post/id/86211           作者:M4xW4n9


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM