CTF中zip總結(jié)

隱寫篇

0x01. 通過進(jìn)制轉(zhuǎn)換隱藏信息

0x02. 在圖片中隱藏壓縮包(圖種)

加密篇

0x03. 偽加密

0x04. 爆破/字典/掩碼攻擊

0x05. 明文攻擊

0x06. CRC32碰撞

格式篇

0x07. 修改格式

0x01. 通過進(jìn)制轉(zhuǎn)換隱藏信息

這種方法比較簡(jiǎn)單,直接拿一道題講解(題目來自ISCC 2017 Basic-04)体箕。題目給了一個(gè)txt文檔如下圖

經(jīng)過觀察刨沦,所有數(shù)據(jù)都在16進(jìn)制能表示的范圍之內(nèi)眶诈,因此先嘗試使用十六進(jìn)制編碼解密避诽,python腳本如下:

運(yùn)行結(jié)果如下医男,雖然存在大量亂碼,但還是能看到flag.txt,因此猜測(cè)txt中的這段字符是zip包的16進(jìn)制表示(同時(shí)開頭的PK也暗示這是一個(gè)zip包佑稠,PK是zip格式發(fā)明者Phil Katz的名稱縮寫,zip的前兩個(gè)字母就用了PK)

導(dǎo)入到16進(jìn)制編輯器中旗芬,這里用010editor做演示

導(dǎo)入后選擇 Save As(快捷鍵 ctrl + shift + s)舌胶,給新文件命名時(shí)加上后綴.zip,保存后發(fā)現(xiàn)zip文件是正常的疮丛,因此證明思路正確幔嫂,此題的后續(xù)過程請(qǐng)繼續(xù)閱讀這篇文章

另:除了16進(jìn)制的編碼轉(zhuǎn)換,有時(shí)還會(huì)遇到2進(jìn)制編碼的轉(zhuǎn)換誊薄,思路相同履恩,不再?gòu)?fù)述

0x02. 在圖片中隱藏壓縮包(圖種

這種方法大概是zip中最常見的,多用于在一張圖片中隱藏一個(gè)壓縮包呢蔫,這種方法的原理是:以jpg格式的圖片為例切心,一個(gè)完整的 JPG 文件由 FF D8 開頭,F(xiàn)F D9結(jié)尾片吊,圖片瀏覽器會(huì)忽略 FF D9 以后的內(nèi)容绽昏,因此可以在 JPG 文件中加入其他文件。

也以一道題為例為例(ISCC 2017 Basic-07)俏脊,對(duì)于這種隱寫最簡(jiǎn)單的方法是使用Kali下的binwalk進(jìn)行檢測(cè)全谤,binwalk 圖片名 如下,檢測(cè)出圖片中存在壓縮包

分離這個(gè)壓縮包也有至少兩種方法:

1. 利用Linux下的foremost工具爷贫, foremost 圖片名 如下认然,foremost默認(rèn)的輸出文件夾為output,在這個(gè)文件夾中可以找到分離出的zip(推薦使用這種方法沸久,因?yàn)閒oremost還能分離出其他隱藏的文件)

2. 更簡(jiǎn)單粗暴的方法是直接把圖片的后綴改為.zip季眷,然后解壓即可(這種方法雖然簡(jiǎn)單快速,但如果隱寫了多個(gè)文件時(shí)可能會(huì)失斁砜琛)

另:本題后續(xù)步驟為構(gòu)造字典子刮,爆破握手包

0x03. 偽加密

Zip偽加密與zip的文件格式有關(guān)(zip的格式詳解請(qǐng)翻到本文的最后0x07部分),zip中有一位是標(biāo)記文件是否加密的窑睁,如果更改一個(gè)未加密zip包的加密標(biāo)記位挺峡,那么在打開壓縮包時(shí)就會(huì)提示該文件是加密的。

對(duì)于偽加密有以下幾種方法:

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

2. 使用檢測(cè)偽加密的ZipCenOp.jar橱赠,解密后如果能成功打開zip包,則是偽加密箫津,否則說明思路錯(cuò)誤

3. 使用16進(jìn)制編輯器改回加密標(biāo)記位

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

如上狭姨,嘗試解壓壓縮包時(shí)提示有密碼宰啦,根據(jù)題干:比爆破更好的方法推測(cè)為偽加密,用三種方法來解此題:

1. 用除windows外的系統(tǒng)直接打開壓縮包

在Mac OS和部分Linux系統(tǒng)(如Kali)中饼拍,右鍵解壓可直接打開偽加密的zip壓縮包赡模,筆者暫未明確何種Linux能打開偽加密壓縮包,如有傳授师抄,不勝感激漓柑!

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

1

java?-jar?ZipCenOp.jar?r?xxx.zip

經(jīng)ZipCenOp.jar解密后的壓縮包可直接打開

推薦使用這種方法,最便捷

3. 用16進(jìn)制編輯器修改加密標(biāo)記位

如上圖叨吮,修改加密標(biāo)記位為00辆布,保存,即可打開壓縮包(關(guān)于zip文件的結(jié)構(gòu)茶鉴,請(qǐng)翻到本文最末0x07部分)

0x04. 爆破/字典/掩碼攻擊

把這三種歸位一類是因?yàn)檫@三種方法在本質(zhì)上都是逐個(gè)嘗試锋玲,只不過待選密碼的集合不同

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

2. 字典:字典攻擊的效率比爆破稍高嫩絮,因?yàn)樽值渲写鎯?chǔ)了常用的密碼丛肢,因此就避免了爆破時(shí)把時(shí)間浪費(fèi)在臉滾鍵盤類的密碼上

3. 掩碼攻擊:如果已知密碼的某幾位围肥,如已知6位密碼的第3位是a,那么可以構(gòu)造 ??a??? 進(jìn)行掩碼攻擊蜂怎,掩碼攻擊的原理相當(dāng)于構(gòu)造了第3位為a的字典穆刻,因此掩碼攻擊的效率也比爆破高出不少

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

舉例如下:

1. 對(duì)爆破杠步,以ISCC 2017 Basic-08為例氢伟,選定暴力攻擊、字符集和長(zhǎng)度后進(jìn)行爆破

點(diǎn)擊開始幽歼,進(jìn)行爆破朵锣,如下圖,在4ms內(nèi)就找到了密碼為BIT

另:此題后續(xù)為簡(jiǎn)單的base64解密甸私;爆破在密碼長(zhǎng)度小于6位時(shí)較快诚些,因此如果在7位之內(nèi)沒有爆破出結(jié)果時(shí),基本就可以考慮換個(gè)方法了皇型;此題的正規(guī)解法是培根密碼的轉(zhuǎn)換

2. 字典诬烹,還以之前的ISCC 2017 Basic-07舉例,從圖片中分離出一個(gè)加密的zip壓縮包弃鸦,爆破無果后考慮字典攻擊(可從網(wǎng)上下載字典绞吁,但大多數(shù)題目需要自己構(gòu)造字典,文末的網(wǎng)盤連接里提供了常見的字典)

字典攻擊的結(jié)果如下圖唬格,在字典選擇合適的情況下家破,用很短的時(shí)間就能找到密碼

繼續(xù)以此題為例颜说,解壓后的壓縮包有一個(gè)txt文檔和一個(gè)握手包,txt內(nèi)容如下:

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

運(yùn)行此程序得到字典如下:

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

3. 掩碼攻擊,以ISCC 2017 Misc-06為例马僻,題目給了一個(gè)jpg圖片庄拇,用0x02中的方法分離出加密的壓縮包,根據(jù)題目提示:注意署名韭邓, 構(gòu)造????LiHua的掩碼(?可在自己定義的字符集中任意選擇)進(jìn)行掩碼攻擊措近,如下圖:

攻擊結(jié)果如下,只耗費(fèi)了很少的時(shí)間就找到了密碼

0x05. 明文攻擊

明文攻擊是一種較為高效的攻擊手段女淑,大致原理是當(dāng)你不知道一個(gè)zip的密碼瞭郑,但是你有zip中的一個(gè)已知文件(文件大小要大于12Byte)時(shí),因?yàn)橥粋€(gè)zip壓縮包里的所有文件都是使用同一個(gè)加密密鑰來加密的鸭你,所以可以用已知文件來找加密密鑰屈张,利用密鑰來解鎖其他加密文件,更詳細(xì)的原理請(qǐng)讀者自行谷歌

舉個(gè)例子袱巨,已知 明文攻擊.zip 中存在的文件 明文.txt阁谆,

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

攻擊過程如下:

點(diǎn)擊開始,很快就恢復(fù)了密碼

另:當(dāng)明文的大小比較小時(shí)嫉入,攻擊速度會(huì)比較慢焰盗;即使有時(shí)沒有恢復(fù)密碼,也可以使用明文攻擊咒林,最后點(diǎn)保存還是能得到壓縮包里內(nèi)容的熬拒。

0x06. CRC32碰撞

CRC32:CRC本身是“冗余校驗(yàn)碼”的意思,CRC32則表示會(huì)產(chǎn)生一個(gè)32bit(8位十六進(jìn)制數(shù))的校驗(yàn)值垫竞。

在產(chǎn)生CRC32時(shí)澎粟,源數(shù)據(jù)塊的每一位都參與了運(yùn)算,因此即使數(shù)據(jù)塊中只有一位發(fā)生改變也會(huì)得到不同的CRC32值件甥,利用這個(gè)原理我們可以直接爆破出加密文件的內(nèi)容

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

的CRC32值為0x9c4d9a5d

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

要特別注意

1

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

在 Python 2.x 的版本中瓣颅,binascii.crc32 所計(jì)算出來的 CRC 值域?yàn)閇-2^31, 2^31-1] 之間的有符號(hào)整數(shù),為了要與一般CRC 結(jié)果作比對(duì)譬正,需要將其轉(zhuǎn)為無符號(hào)整數(shù)宫补,所以加上& 0xffffffff來進(jìn)行轉(zhuǎn)換檬姥。如果是 Python 3.x 的版本,其計(jì)算結(jié)果為 [0, 2^32-1] 間的無符號(hào)整數(shù)粉怕,因此不需額外加上& 0xffffffff 健民。

腳本的運(yùn)行結(jié)果如下,即為壓縮文件的內(nèi)容:

再舉另一個(gè)bugku中的例子贫贝,下載下來的文件是68個(gè)壓縮包秉犹,并且根據(jù)binwalk的檢查結(jié)果,每個(gè)壓縮包里都有一個(gè)大小為4個(gè)字節(jié)稚晚,名為out.txt的壓縮文件

用如下的腳本碰撞出所有壓縮包中的數(shù)據(jù):

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

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

0x07. 修改格式

這種情況花樣較多客燕,難以做一個(gè)詳細(xì)的總結(jié)鸳劳,因此只列舉最常見的缺少文件頭或文件尾。

放一個(gè)zip文件格式講的較清楚的鏈接也搓,通過對(duì)zip文件格式的了解赏廓,可以解釋之前偽加密的問題,同時(shí)也可以對(duì)缺少文件頭或文件尾有更直觀的認(rèn)識(shí)傍妒。

如上為正常zip幔摸,缺頭zip和缺尾zip的binwalk掃描結(jié)果,根據(jù)掃描結(jié)果用16進(jìn)制編輯器添加文件頭或文件尾拍顷,即可修復(fù)zip抚太。

總結(jié)

Zip不僅是我們生活中常用到的一種文件格式,在CTF中也經(jīng)常遇到昔案,這里做了一個(gè)關(guān)于CTF中zip的總結(jié),如果對(duì)讀者有幫助电媳,鄙人不勝榮幸踏揣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市匾乓,隨后出現(xiàn)的幾起案子捞稿,更是在濱河造成了極大的恐慌,老刑警劉巖拼缝,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娱局,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡咧七,警方通過查閱死者的電腦和手機(jī)衰齐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來继阻,“玉大人耻涛,你說我怎么就攤上這事废酷。” “怎么了抹缕?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵澈蟆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我卓研,道長(zhǎng)趴俘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任奏赘,我火速辦了婚禮哮幢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘志珍。我一直安慰自己橙垢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布伦糯。 她就那樣靜靜地躺著柜某,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敛纲。 梳的紋絲不亂的頭發(fā)上喂击,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音淤翔,去河邊找鬼翰绊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛旁壮,可吹牛的內(nèi)容都是我干的监嗜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抡谐,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼裁奇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起麦撵,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤刽肠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后免胃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體音五,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年羔沙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了躺涝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡撬碟,死狀恐怖诞挨,靈堂內(nèi)的尸體忽然破棺而出莉撇,到底是詐尸還是另有隱情,我是刑警寧澤惶傻,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布棍郎,位于F島的核電站,受9級(jí)特大地震影響银室,放射性物質(zhì)發(fā)生泄漏涂佃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一蜈敢、第九天 我趴在偏房一處隱蔽的房頂上張望辜荠。 院中可真熱鬧,春花似錦抓狭、人聲如沸伯病。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽午笛。三九已至,卻和暖如春苗桂,著一層夾襖步出監(jiān)牢的瞬間药磺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工煤伟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留癌佩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓便锨,卻偏偏與公主長(zhǎng)得像围辙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸿秆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Ubuntu的發(fā)音 Ubuntu恳守,源于非洲祖魯人和科薩人的語言考婴,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 99,271評(píng)論 9 467
  • 本文是Medusa和Hydra快速入門手冊(cè)的第二部分催烘,第一部分的傳送門這兩篇也是后續(xù)爆破篇的一部分沥阱,至于字典,放在...
    LinuxSelf閱讀 2,853評(píng)論 0 4
  • 因出差原因伊群,16年和17年分別來到位于東歐區(qū)的羅馬尼亞和摩爾多瓦考杉。其實(shí)歐洲對(duì)于世界人民來說應(yīng)該是富饒策精,和諧,...
    帶走Shawn閱讀 489評(píng)論 0 0
  • 熊威老師解困惑 困惑1——感覺自己的課堂不夠嗨,怎么辦崇棠? 答: 1.首先需要明白為什么要自己的課堂還起來咽袜? 2.是...
    顯梅阿卡西記錄閱讀 466評(píng)論 0 0
  • 1 貧窮在你一個(gè)人的時(shí)候只是面包和饅頭的區(qū)別询刹,當(dāng)喜歡的人出現(xiàn)后你才會(huì)發(fā)現(xiàn)貧窮帶來的自悲。 路邊的男人看起來一臉沉著...
    oneday君閱讀 619評(píng)論 0 2