CTF 壓縮包總結

2022-09-21 13:51:09 字數 3249 閱讀 8607

壓縮包作為misc中比較基礎的乙個考點,經常出現在各種比賽的misc方向中,如果沒有一定的了解看到一層一層的壓縮包難免會頭痛。那麼這裡來簡單的總結一下ctf中關於壓縮包的一些考點。

工具準備

wenhex或相似的16進製制編輯器,archpr(4.53或4.54最好),python環境和zipfile庫。

暴力破解

通常這類題目會有密碼幾位數或有哪些符號的提示,只要給的不是很複雜的提示(比如密碼是32位),就可以確定是暴力破解,用archpr勾選對應的選項破解就可以了。

掩碼爆破

其實和暴力破解相同,只是由於密碼可能在乙個範圍內或者有一些字元確定,如我們已知密碼開頭是ctf,後面是6位數字,那麼掩碼設定中寫為ctf??????,然後爆破即可。

字典爆破

對應的是弱口令密碼的爆破,archpr需要自己提供字典檔案,然後就會將字典中的所有密碼嘗試爆破。有的題目會直接給字典檔案,還有的則是需要自己去網上查詢,需要注意有的弱口令密碼相對並不簡單(如123123@@@),要找乙個比較全的字典。

偽加密

zip檔案中,檔案頭和檔案核心目錄區50 4b 01 02(目錄中檔案檔案頭標記)、1e 03(壓縮使用的pkware版本)、14 00(解壓檔案所需pkware版本)後即是壓縮軟體識別未加密標誌,奇數代表加密,偶數代表無加密。將00 00改為09 00後再次開啟壓縮包,就會顯示需要密碼,然而事實上壓縮包並未設定密碼,所以這樣的手段就被稱為zip偽加密。而在這種時候只需要用16進製制編輯器如wenhex開啟壓縮包,搜尋504b0102,將其後的09 00改為00 00,便可解壓壓縮包。

注意的是由於有的zip壓縮包中有多個檔案,需要對所有顯示加密的檔案進行修改。

crc32爆破

迴圈冗餘校驗(crc)是一種產生簡短固定位數校驗碼的通道編碼技術,主要用來檢測或校驗資料傳輸或者儲存後可能出現的錯誤。crc32 即是會產生乙個32 bit的校驗值,由於 crc32 產生校驗值時源資料塊的每乙個bit都參與了計算,所以資料塊中即使只有一位發生了變化,也會得到不同的 crc32 值。而這也就導致了基於 crc32 的攻擊手法。

例題:buuctf zip

用如下指令碼爆破(摘自網上的指令碼並做了一些修改,類似的題目調整一下都可以使用)

import

zipfile

import

string

import

binascii

defcrackcrc(crc):

for i in

dic:

for j in

dic:

for k in

dic:

for h in

dic:

s = i + j + k +h

if crc ==(binascii.crc32(s.encode())):

f.write(s)

return

defcrackzip():

for i in range(0,68):

file = '

out'+str(i)+'

.zip

'crc = zipfile.zipfile(file,'

r').getinfo('

data.txt

').crc

crackcrc(crc)

print('

\r'+"

loading:

".format(float((i+1)/68)),end=''

)dic = string.ascii_letters + string.digits + '

+/='

f = open('

out.txt

','w')

crackzip()

f.close()

明文攻擊在傳統的zip加密中,檔案會根據口令生成3個金鑰來加密檔案,所以假如獲得與壓縮包中相同的檔案(判斷方式是crc32是否相同),則可以將獲得的檔案進行未加密壓縮,通過一定的手段將加密與未加密檔案進行對比從而求出3個加密金鑰,雖然並不一定能解出口令,但也足夠可以獲得其中的檔案。

比賽中除了直接給相同的檔案外,還有可能是要求自己查詢構造明文,對應的難度會高上很多,比如設定的明文是github上的乙個檔案。

同時由於不同壓縮軟體之間壓縮方式的不同,構造明文的壓縮方式如果不相同則可能無法解出,這種時候我們需要將常見的幾種壓縮方式都進行嘗試。

還要補充的一點是,archpr的版本也會有影響。對於同樣的一道題目,用4.00版本沒有解出來,用4.53很快出現結果,而4.54則會顯示要很長時間,但十幾秒後手動暫停就會顯示解出。

python指令碼類題目

在許多比賽中會有幾百層壓縮包的題目,有的是名字就是密碼或者沒有密碼但檔案非常大,還有的則是額外需要爆破。形式上有的是壓縮包套壓縮包,有的則是一次性好多個壓縮包,對於這類題目,我們往往需要利用python的zipfile庫來寫指令碼爆破。

例題:[mrctf2020]千層套路

乙個套娃的壓縮包,每乙個壓縮包的名字就是它的密碼,寫如下指令碼解出:

import

zipfile

zip_src='

0573.zip

'while(1):

r =zipfile.is_zipfile(zip_src)

ifr:

fz = zipfile.zipfile(zip_src,"r"

) fz.extractall(pwd=bytes(zip_src[0:4],'

utf-8'))

zip_src=fz.filelist[0].filename

else

:

break

開啟後是三個一組的數字,看到255和0猜到是顏色且對應***。用python的ptl庫寫指令碼得到是乙個***,再用軟體qr research掃碼,得到flag。

CTF中壓縮包解密

1.修復壓縮包 zip檔案修復 一般使用winhex這個工具,簡單點的就是改一下字尾 修復檔案頭等等。2.暴力破解 就是逐個嘗試選定集合中可以組成的所有密碼,直到找到正確的密碼。使用暴力破解需要一些工具,例如rarcrack這個工具,但它僅支援rar zip 7z這三種型別。3.明文攻擊 明文攻擊是...

php生成壓縮包和開啟壓縮包

需呀用到ziparchive類,php預設帶的有,廢話不說,直接上 親測可以使用,先來個生成壓縮包,解壓縮包後邊補上 開啟php支援ziparchive 在php.ini檔案中將extension php zip.dll 開頭的 的去掉,重啟www伺服器就可以了 1 對多個檔案生成壓縮包 生成壓縮檔...

Ubuntu 壓縮包操作

壓縮包概念 1.打包,把多個檔案打包成乙個檔案 2.壓縮,把大尺寸資料壓成小尺寸 a.有失真壓縮 壓縮前後不一樣 壓縮率比較高,如聲音,影象,等 b.無失真壓縮 壓縮前後一樣 資料的一直性壓縮,檔案,信件等 linux無檔案字尾的概念 現有的.tar,gz,bz2只是乙個不成文的檔案標識,也可以該做...