1. 程式人生 > >【學習總結】ctf隱寫初階解題思路與方法

【學習總結】ctf隱寫初階解題思路與方法

作為ctf中相對較為簡單的題目,隱寫題更適合初學者上手和提高初學者的興趣。本人也對隱寫術很感興趣,於是嘗試著對自己目前所學的隱寫解題思路和工具的使用做一個總結。由於水平有限,總結可能會有錯誤的地方,希望大佬們不吝賜教,謝謝!

一.JPEG圖片

1.檔案的合併與分離

在初階的隱寫題目中,常見的有在jpg圖片中藏有壓縮檔案,需要我們把圖片與壓縮檔案分離,從壓縮檔案裡得到flag。現在,我們可以自己在電腦上操作一下,看看此類照片是怎麼做出來的,以便於我們解題。

首先,找一張jpg格式的圖片,並製作一個zip檔案。

然後我們在當前資料夾下面開啟cmd,執行copy /b timg.jpg+flag.zip outfile.jpg命令。就可以得到一張圖種,也就是藏有檔案的圖片了。 

outfile.jpg這種圖經常就出現在一些簡單的ctf隱寫題裡面了。

那麼,我們該如何分離outfile.jpg這張圖片呢? 我們可以利用binwalk工具來識別檔案的結構,發現圖片裡的隱藏檔案。binwalk是kali裡自帶的一個命令列工具。在終端中輸入binwalk <filename><格式>

我們可以發現在outfile.jpg中除了有一張圖片外,還存在一個zip檔案。

既然發現了圖片裡的隱藏圖片,現在我們用兩種方法將之分離。

1.使用foremost工具使之分離

foremost能夠將多個合併檔案進行分離。在kali中,我們在剛才那張圖片的資料夾下,在終端執行foremost outfile.jpg -o outfile命令,將outfile.jpg與flag.zip分離到outfile這個資料夾中。

我們進入這個資料夾可以看到存在foremost自動生成的audit.txt檔案、jpg和zip檔案 

我們解壓zip檔案就可以得到檔案中的flag了。

2.直接用解壓工具解壓

如果我們在binwalk上面發現圖片裡存在zip等壓縮檔案,我們可以直接修改圖片字尾名為壓縮格式,然後用解壓工具解壓的到檔案即可。

此外,在jpg圖片還可以與jpg圖片合併,較為簡單的題目會把flag以圖片的形式與另外一張圖片合併,此時我們直接使用foremost分離出圖片得到flag即可。

2.檔案中插入資訊

對於一些初階的隱寫題,flag資訊也許會插入在檔案的頭部或者尾部,稍難一點的也許會插入到檔案中間。而且flag形式一般會進行編碼(如base64等),我們需要找到flag的位置並解碼,最終得到flag。

我以一道ctf題為例來總結:

這張jpg圖片我們使用binwalk檢查,發現沒有任何異常。這時候怎麼辦呢?我們嘗試用文字檢視器開啟這張圖片檢視該圖片的原始碼,先在檔案首尾檢視有沒有flag或者不一樣的編碼。我在檔案尾部發現了與圖片原始碼不一樣的編碼:

熟悉HTML等語言的同學們應該一眼就能發現這是HTML的實體編碼,那麼,我們直接複製著一串編碼,直接在網上對應的線上解碼工具中解碼即可。

3.JPEG格式隱寫

如果你仔細閱讀了JPEG格式的文件,我們再來看JPEG格式的圖片會怎麼隱藏flag。

1.JPEG圖片格式分為:標記碼和壓縮資料;如果在標記碼之間隱寫資料,不會影響圖片的正常開啟。

我們照一張JPEG格式的圖片,用010Editor開啟,在標記碼之間加入一串資料,儲存後發現影象依舊可以正常開啟。

未修改的圖片

在標記碼之間隨意加上一些資料

2.JPEG檔案以0xFF 0XD9結束;如果在檔案尾發現還有資訊,若不能直接識別,可以用010Editor或者winhex把資訊複製出來,儲存為新的檔案,繼續查詢flag。

在檔案尾加入資訊,不影響圖片開啟

3. JPEG檔案還有一個特殊的地方:具備exif檔案描述資訊。我們用Windows自帶的屬性檢視JPEG圖片,可以發現JPEG圖片所附帶的資訊比其他型別的圖片多很多,這些附帶資訊就儲存在exif頭中。因此我們查詢JPEG圖片的flag還可以用屬性檢視。

                                                                     可以直接看到flag

 但是,並不是所有資訊都能夠從Windows自帶屬性檢視。這裡我們使用exiftool工具,這款工具能夠檢視完整的exif頭資訊。當圖片是JPEG格式時,可以用exiftool檢視JPEG圖片是否藏有flag資訊。

                                                                       Comment異常

小結

以上就是我對JPEG格式的隱寫解題思路做的總結,當然JPEG圖片的隱寫遠不止這些,flag經常會與密碼學、RGB值以及其它腦洞思路相結合,需要多拓展才行。

二.PNG圖片

其中比較重要的是:

PNG圖片通過zlib壓縮編碼後分為IDAT塊儲存,每個IDAT塊能夠儲存65524大小的資料。

IHDR標識能夠控制圖片顯示的長和寬。

下面,我就這兩個點分別以兩個例題講解:

1.IDAT塊異常

我們看這樣一張圖:

我們知道,PNG圖片每個IDAT塊能儲存65524大小的資料,而且必須一個塊填滿才會把資料寫入下一個資料塊。那麼,我們拿到一張PNG圖片,首先使用工具pngcheck來檢查該圖片。

在cmd下輸入如下命令:pngcheck.exe -v <圖片名>.png (如果是在Linux系統下,則為:pngcheck -v <圖片名>.png)

 從這裡我們就可以看到異常了,倒數第二個IDAT塊在資料沒有填滿的情況下,還多生成了一個IDAT資料塊,這說明最後一個IDAT塊存在異常。

那麼我們使用010Editor或者Winhex檢視圖片:

我們找到存在問題的IDAT塊,49 44 41 54是IDAT塊頭部資訊,D9 CF A5 A8是CRC校檢位,我們又知道中間的資訊是zlib壓縮格式,於是我們把中間的資料複製出來,嘗試用一個python指令碼來解壓縮:

我們可以看到解出來的是二進位制串,有625位,因為625不是7或者8的倍數,因此我們排除轉為ASCLL碼的情況。我們又發現625=25x25,是一個正方形的形狀,那麼,我們很自然的可以想到這是一幅二維碼,我們用python的image庫畫圖:

 執行後得到一個二維碼,直接在網上的二維碼掃描上掃描,就可以得到flag了。

 2.修改IHDR顯示的高度

IHDR標記頭後緊跟著長度和寬度限制位(各4位,寬度限制位在前)。ctf中有些PNG圖片就是修改了長度的標記位,從而達到隱藏flag的目的。我們來看這樣的一張圖:

從這張圖上我們不能發現任何有用資訊,於是我們繼續使用pngcheck來檢查一下圖片是否存在問題:

 我們可以發現檢查出IHDR塊出現問題,那麼我們就嘗試更改IHDR塊中圖片的長度。同樣,我們使用010Editor或者winhex開啟圖片,找到長度限制位,修改其長度後儲存:

這時候我們再次開啟圖片,就可以看到隱藏的flag了:

小結:

這些就是PNG圖片的一些常規隱寫,只要利用好PNG圖片的工具,我們可以輕鬆解題,當然PNG圖片還可以進行LSB隱寫,我將在最後和BMP圖片格式一起討論LSB隱寫的一些簡單的情況。

三.其他型別的圖片隱寫

1.GIF圖片的隱寫

關於gif圖片的隱寫一般比較簡單,只要用好工具,解題不會太難。以下是我總結的一些解題思路:

1.用binwalk檢視圖片發現格式是gif時,若圖片字尾不是gif格式,請改為.gif的字尾,再做題。

2.flag往往是GIF圖片的一幀或者幾幀,這時候我們需要用到一個GIF檢視器:Namo Gif Animator,這個工具可以一幀一幀的檢視GIF圖片。

3.GIF圖片格式可以參考這篇部落格:http://dev.gameres.com/Program/Visual/Other/GIFDoc.htm,有時候ctf會給一個.gif字尾的檔案,但是卻我們打不開它或者顯示圖片損壞,這時候我們就需要從格式入手,檢視格式是否有損壞,比如GIF的頭部標識。這時候我們需要修復頭部資訊,再根據修復成功的GIF圖片解題。

2.使用PS、Matlab等工具銳化

用圖片處理工具調整處理圖片,有一些flag也許就在圖片中,但是需要我們調好亮度,銳化等之後,才會顯現出flag。

四.LSB隱寫(初階)

LSB隱寫就是修改RGB顏色分量的最低二進位制位(LSB),每個顏色都會有8bit,LSB隱寫就是修改了像數中的最低的1Bit,這是對圖片影響十分小,而人類的眼睛不會注意到這前後的區別,每個畫素可以攜帶3Bit的資訊,這樣就把資訊隱藏起來了。LSB隱寫常見於:BMP圖片和PNG圖片。

關於lsb隱寫,本人由於學藝不精,無法做到像眾大佬一般,隨手寫一個python指令碼把最低位取出來解出flag,所以我只能當個指令碼小子,用別人寫好的指令碼來解一些初階的題。

下面推薦一款看lsb痕跡的神器,Stegsolve。這款軟體能夠幫助我們輔助分析圖片的各個通道位。

我們來看一道簡單的LSB隱寫題來結束此次的初階隱寫之旅:

 這是一張PNG圖片的LSB隱寫,我們直接使用神器,使用Stegsolve開啟圖片:

 往左或者往右檢視各個通道位的情況,在Gray bits中就可以發現圖片中隱藏著一個二維碼,掃描這個二維碼,我們就可以直接得到flag了:

總結:

這些是我在隱寫學習中學到的一些圖片解題思路和技巧,隱寫術不僅僅止於圖片隱寫,還有音訊、視訊、可執行檔案等的隱寫加密。如果想要更深入的瞭解隱寫術,這裡推薦一本書籍:《資料隱藏技術揭祕:破解多媒體、作業系統、移動裝置和網路協議中的隱祕資料》,這本書籍能夠讓你的隱寫術更上很多層樓。這裡分享這本書的雲盤連結:https://pan.baidu.com/s/16PfOjijmmMOAE--wj5SHog 密碼:8nd2。