Bugku - 好多壓縮包 - Writeup


bugku - 好多壓縮包 - Writeup

M4x原創,轉載請注明出處

這道題前前后后做了好幾天,這里記錄一下

題目

文件下載

分析

  • 解壓下載后的文件,發現有68個壓縮文件,並且每個壓縮文件里都有一個4個字節大小的名為data.txt的txt文件,於是嘗試用crc32碰撞還原出所有壓縮包中的文件內容

腳本如下:

 1 #coding:utf-8
 2 import zipfile
 3 import string
 4 import binascii
 5 
 6 def CrackCrc(crc):
 7     for i in dic:
 8         for j in dic:
 9             for p in dic:
10                 for q in dic:
11                     s = i + j + p + q
12                     if crc == (binascii.crc32(s) & 0xffffffff):
13                         #print s
14                         f.write(s)
15                         return
16 
17 def CrackZip():
18     for I in range(68):
19         file = 'out' + str(I) + '.zip'
20         f = zipfile.ZipFile(file, 'r')
21         GetCrc = f.getinfo('data.txt')
22         crc = GetCrc.CRC
23         #以上3行為獲取壓縮包CRC32值的步驟
24         #print hex(crc)
25         CrackCrc(crc)
26 
27 dic = string.ascii_letters + string.digits + '+/='
28 
29 f = open('out.txt', 'w')
30 CrackZip()
31 f.close()                

 

腳本運行時間較長

CRC32碰撞的原理請翻到這篇文章的0x06部分

步驟

  • 根據碰撞出內容的格式(末尾兩個==)推斷這段數據是base64編碼過的,先解碼,根據解碼結果中的flag.txt推斷這可能是一個壓縮包,同時根據fix the file and get the flag知需要修復文件

  • 將解碼后的文件導入16進制編輯器(如010editor),觀察數據,發現存在rar的文件尾C43D7B00400700,但缺少文件頭,於是補上rar的文件頭526172211A0700

  • 另存為rar格式,發現文件修復成功,解壓后發現一個txt文檔如下

  • 文件已經修復但還沒發現flag,仔細尋找,在注釋里找到了flag

於是flag即為flag{nev3r_enc0de_t00sm4ll_fil3w1th_zip}


后來經大神提示,根據rar的文件結構可以看出還存在一個名為CMT的文件,CMT即為comment,即為注釋

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM