在上一期,我主要談了談對於雜項的一些淺薄理解,這一期我們正式開始對於CTF雜項的學習,我們首先學習的是雜項中最常考察的一項——隱寫分析。
這篇文章的大部分來自於我為了科學之光冬令營20號下午的講課所準備的大綱。
有些時候,我們想把一些資訊或者檔案隱藏在某些檔案之中,就可以利用隱寫術來達到我們的目的。而針對那些有隱藏資訊的檔案,我們從中獲取到被隱藏的資訊的過程就叫做隱寫分析。
隱寫分析是 Misc 中最為重要的專案之一,包括檔案分析、資訊隱寫等等,涉及巧妙的編碼、隱藏資料、層層巢狀的檔案中的檔案等等於雜項一樣,它也喜歡考察一些並非為我們所掌握的小知識,比如一些從來沒聽說過的亂七八糟的密碼(比如與佛論禪加密、顏文字加密等等),我們需要善用自己的資訊蒐集能力(其實就是查百度),在這裡順便簡單介紹一下資訊蒐集。
我的理解是,資訊蒐集就是針對某一目標,在蒐集它/他/她的明顯資訊後,通過進一步的資訊整合與分析得到他的隱蔽資訊。
(此處省略500字)
「知己知彼,百戰百勝。」我們學習資訊蒐集只是為了更好地防止自己的資訊被蒐集,提高自身資訊保安意識,自覺保護個人資訊,防止自己的隱私被窺探。
但其實,我們做隱寫分析也用不到什麼高深的技術,在這裡我推薦使用 Bing(國內查不到還能順手查查國外的)。當碰到自己的知識盲區時,我們需要準確地找出自己想問的問題,比如[BUUCTF]荷蘭寬頻資料洩露,下載後我們得到了一個 conf.bin 檔案,我覺得可能大部分人都不清楚這是個什麼玩意,編輯器開啟一看還是堆亂碼,這個時候我們就需要使用搜尋引擎了。
我們首先要明確自己的問題: conf.bin 檔案是什麼,輸入搜尋方塊,回車,很快便能得知這是路由器的備份組態檔,要用 RouterPassView.exe 開啟檢視。
其它的問題大抵也是如此,只要我們準確把握問題主幹,搜尋引擎大多數時候都會給我們想要的結果。
本節我們需要的工具:一個十六進位制編輯器(010 Editer 或者 WinHex 等等),最好有個 Kali Linux 虛擬機器器
我們都知道,檔案的擴充套件名往往反映了檔案的型別,但又不一定準確,因為我們可以隨意地去修改它。比如我們把可以一個 jpg 圖片檔案改名成 xxx.png,無論我們學過學過計算機知識都應該知道 JPG 和 PNG 不是同一個東西,但是我們雙擊卻依然可以用圖片檢視器檢視這張圖片,這說明程式有自己的方式去判斷這是什麼型別的檔案,從而選擇讀取這張圖片內容的方式,這就是檔案頭的作用。
大部分檔案型別有其固定的檔案結構,基本結構為:
檔案頭 + 檔案內容(+ 檔案尾) //檔案尾可能有可能沒有
圖片檢視器開啟圖片檔案時,首先會根據檔案頭判斷它是哪種型別的檔案,然後再根據檔案型別選擇恰當的讀取方式。一般來說,程式在讀取有檔案尾的檔案時一般只會讀到檔案尾,並不會關注後面還有沒有別的內容。
所以對於有檔案尾的檔案型別A來說,檔案尾之後的內容往往不會對檔案的檢視有影響,增加的內容普通情況下不會被發現(拿十六進位制編輯器不算普通情況)。我們可以往它的檔案尾後面新增字元,數位,甚至是藏一個別的檔案,這就是直接附加。
要分離出附加在檔案A後面的檔案,可以通過在十六進位制編輯器中觀察檔案尾後中隱含的檔案頭資訊來判斷檔案A中附加的檔案型別,從而進行提取,常見檔案型別檔案頭(尾)如下:
檔案型別 | 檔案頭 | 檔案尾 |
---|---|---|
JPEG( jpg ) | FF D8 FF | FF D9 |
PNG | 89 50 4E 47 | AE 42 60 82 |
GIF | 47 49 46 38 | 00 3B |
ZIP | 50 4B 03 04 | 50 4B |
RAR | 52 61 72 21 | / |
Wave(wav) | 57 41 56 45 | / |
型別列舉不全,更詳細的可以看大佬部落格:https://blog.csdn.net/Ahuuua/article/details/109165473
說實話,我不推薦肉眼觀察法提取(楽),一個是考驗記憶力和眼力,最主要的是可能有藏比作者把一個相同型別的檔案藏一個檔案裡,然後在前一個檔案的檔案尾和後一個檔案的檔案頭之間藏東西(我是深受其害),對於我這種喜歡先拉到最後看檔案尾的人很不友好。
我推薦使用 Binwalk 工具(Kali Linux自帶)和 Foremost 工具(如果你的 linux 沒有的話可以輸入 apt-get install foremost
回車,其他工具類似)分離檔案A中附加的其他檔案,Binwalk 可以自動分析一個檔案中包含的多個檔案並將它們提取出來,Foremost 也可以分離檔案而且有時候更好用一點,我們可以先用 Binwalk 進行分析,如果有隱藏檔案再用 Foremost 分離,我們經常使用的一些相關使用方法如下:
binwalk [檔案A] #分析檔案A
binwalk -e [檔案A] #分析檔案A後自動提取已知的檔案型別的隱藏檔案
foremost [檔案A] #分離檔案A的隱藏檔案,存到與檔案A同目錄的output資料夾中,同時在資料夾中生成一個紀錄檔檔案
更詳細的使用方法我懶得寫了(笑),不過一般也用不著
找了道例題:[BUUCTF] 二維條碼 大家可以自己先嚐試一下,如果有困難再去看下面的題解。順便說一下,做CTF題,遇到不會的題看題解是一件非常正常的事,關鍵在於能不能在這道題中吸取教訓,只要下次做到類似的能做對就行,這也是一個積累經驗的過程(最好看完自己不會的地方再自己做,不要照抄 flag)。
下載下來是一張 PNG 格式的二維條碼,盲猜掃出來肯定不是結果。扔到 WinHex 中(或者 010-Editor ),一眼看到 png 檔案尾和 zip 檔案頭(看多了就能一眼盯真