新手向!CTF解題技能之MISC基礎(chǔ)
雜項介紹
Miscellaneous簡稱MISC,意思是雜項,混雜的意思。
雜項大致有幾種類型:
1.隱寫
2.壓縮包處理
3.流量分析
4.攻擊取證
5.其它

本篇主要介紹雜項基礎(chǔ)題目的知識點以及解題思路。
0x00 文件類型識別
雜項題目主要是以文件附件作為題目,但是給的文件不一定是有后綴名的,這就需要我們識別這些文件
1. file命令
file命令實際上是一個命令行工具,用來查看文件類型。
使用方法:
將文件復(fù)制到kail或者帶有file工具的系統(tǒng)中,使用file查看文件。

將文件后綴名補(bǔ)上即可正常打開。
然后根據(jù)實際情況進(jìn)行初步判斷可能是什么類型的題目。
2. 010Editor
010Editor是一款快速且強(qiáng)大的十六進(jìn)制編輯器。用來編輯二進(jìn)制文件。有一個友好易于使用的界面,無限次的undo和redo操作。另外還可以打印x十六進(jìn)制的字節(jié)或者以書簽的方式標(biāo)出某些重要的字節(jié)。我們可以通過使用010Editor查看文件的頭部來判斷類型。
以下是常見的文件頭:

PNG文件頭中包含IHDR信息。

IHDR的作用將在后續(xù)的圖片類隱寫中詳細(xì)講解。
當(dāng)文件類型不確定時就可以嘗試查看文件頭來判斷。

既然會出現(xiàn)沒有后綴的文件,那當(dāng)然也會出現(xiàn)缺少頭部的情況,可以根據(jù)后綴名來選擇文件頭部進(jìn)行填充,如果沒有后綴名,則查看文件尾部來判斷文件類型。
以下是常見的文件尾部:
zip文件的結(jié)尾以一串504B0506開始。

rar文件以C43D7B00400700結(jié)尾。

JPG文件結(jié)尾為FFD9。

PNG文件?結(jié)尾為000049454E44AE426082。

Gif文件結(jié)尾為3B。

0x01 文件分離
介紹了文件類型的識別方法了,接下來來講一下文件分離
文件分離的原因:
在CTF這個充滿腦洞的比賽中,出題人往往會以一些稀奇古怪的出題方式出題,因此你可以常??匆姳┐虺鲱}人等字眼出現(xiàn)在比賽論壇中。在CTF中一個文件中隱藏著另外其他文件的題目是經(jīng)常有的。這就需要掌握文件分離的技巧來應(yīng)對。下面介紹幾種姿勢
1. Binwalk
1.1 Binwalk工具介紹
Binwalk是一個自動提取文件系統(tǒng),該工具最大的優(yōu)點就是可以自動完成指定文件的掃描,智能發(fā)掘潛藏在文件中所有可疑的文件類型及文件系統(tǒng)。相比于之前介紹的file命令行工具來說,file只是從文件的第一個字節(jié)開始識別,且只能把一個文件識別成一個類型的文件,很難看出是否隱藏著其他的文件,Binwalk就能很好的完成這項任務(wù)。
1.2 Binwalk文件掃描和提取
Binwalk分析文件
命令:binwalk +file 通過掃描能夠發(fā)現(xiàn)目標(biāo)文件中包含的所有可識別的文件類型。

通過Binwalk我們可以看到這一張jpg文件中藏著zip文件。
Binwalk提取文件。
命令 binwalk +file -e。

“-e"和“--extract"用于按照定義的配置文件中的提取方法從固件中提取探測到的文件系統(tǒng)。
若提取成功則會生成一個_文件名_extracted的目錄,目錄中存放的就是提取出的文件
2. foremost
2.1 foremost工具介紹
foremost是基于文件開始格式,文件結(jié)束標(biāo)志和內(nèi)部數(shù)據(jù)結(jié)構(gòu)進(jìn)行恢復(fù)文件的程序。該工具通過分析不同類型文件的頭、尾和內(nèi)部數(shù)據(jù)結(jié)構(gòu),同鏡像文件的數(shù)據(jù)進(jìn)行比對,以還原文件。它默認(rèn)支持19種類型文件的恢復(fù)。用戶還可以通過配置文件擴(kuò)展支持其他文件類型。
2.2 foremost提取文件
有時候binwalk無法正確分離出文件,這時候就可以使用foremost,將目標(biāo)文件復(fù)制到kali中,在終端中使用命令行進(jìn)入文件所在文件夾,使用如下命令:
Foremost+file –o 輸出目錄名。

執(zhí)行成功后會在目標(biāo)文件的文件目錄下生成我們設(shè)置的目錄,目錄有中按照文件類型分離出文件。

3. dd
前面介紹的兩種都是自動化分離工具,dd這個工具是一種半自動化工具,有的時候自動化工具不能實現(xiàn)文件的分離,所以需要用這個工具來進(jìn)行分離。
使用dd命令分離文件格式如下:
dd if=源文件名 bs=1 skip=開始分離的字節(jié)數(shù) of=目標(biāo)文件名
參數(shù)說明:
if=file #輸入文件名,缺省為標(biāo)準(zhǔn)輸入。?
of=file #輸出文件名,缺省為標(biāo)準(zhǔn)輸出。?
bs=bytes #同時設(shè)置讀寫塊的大小為 bytes ,可代替 ibs 和 obs 。?
skip=blocks #從輸入文件開頭跳過 blocks 個塊后再開始復(fù)制。?
以IDF實驗室“抓到一只蒼蠅”為例,需要將獲得的文件去除前364個字節(jié):
dd if=s1 bs=1 skip=364 of=d1
使用dd命令分離文件格式如下:
dd if=源文件名 bs=1 skip=開始分離的字節(jié)數(shù) of=目標(biāo)文件名
參數(shù)說明:
if=file #輸入文件名,缺省為標(biāo)準(zhǔn)輸入。?
of=file #輸出文件名,缺省為標(biāo)準(zhǔn)輸出。?
bs=bytes #同時設(shè)置讀寫塊的大小為 bytes ,可代替 ibs 和 obs。?
skip=blocks #從輸入文件開頭跳過 blocks 個塊后再開始復(fù)制。?
若需要將獲得的文件去除前364個字節(jié):
dd if=s1 bs=1 skip=364 of=d1

4. 010Editor
在之前文件識別中提到這個工具,手動分離文件也可以使用這個工具
拖動想要分離的部分。


右鍵->選擇->保存選擇。
然后根據(jù)需要分離的文件類型選擇后綴名。

在介紹了文件分離后,還需要提到的是文件合并。
天下之事分久必合合久必分,既然CTF有文件分離的題目,那自然也少不了文件合成的了,但是文件合成還是有技巧的。
1. linux環(huán)境文件合并
cat 是linux系統(tǒng)下的一個能提取文件的內(nèi)容的命令,使用cat命令將文件內(nèi)容提取出來再導(dǎo)入目標(biāo)文件。使用方式如下:
將chapter01、chapter02、chapter03三個文件按從左到右順序合并,輸出到book文件中。
所使用的命令:cat chapter01 chapter02 chapter03 > book
將所有以chapter開頭的文件按文件名從小到大的順序合并,輸出到book文件中。
所使用的命令:cat ?chapter* > book?

但是要注意的一點是,cat是需要遵循順序來獲取文件內(nèi)容的,所以在cat之前需要判斷一下文件的先后順序。
2. windows環(huán)境文件合并
linux中有cat等命令,windows環(huán)境下也有類似的命令copy,使用方式如下:
將chapter01、chapter02、chapter03三個文件按從左到右順序合并,輸出到book文件中。
所使用的命令:copy /B chapter01+chapter02+chapter03 book
將所有以chapter開頭的文件按文件名從小到大的順序合并,輸出到book1文件中。
所使用的命令:copy /B ?chapter* book1?

3. Python文件合并
python環(huán)境適用于linux也適用于windows,它是通過編寫腳本來實現(xiàn)的文件合并,以之前的例子來。
# -*- coding: utf8 -*-
def foo():
path=r".\chapter%d"
s=""
for?i in xrange(1,4):
f=open(path % i).read()
s+=f
print?s
pass
if?__name__ ==?'__main__':
foo()
print?'ok'
0x03 總結(jié)
介紹了這么多關(guān)于CTF基礎(chǔ)類型的文件處理方法,為了方便大家梳理,提供一個思維導(dǎo)圖給大家來參考。
【CTF學(xué)習(xí)資料領(lǐng)取】

用來處理文件的方法和工具不僅僅只有這些,這就需要靠大家自己發(fā)現(xiàn)和探索。