XCTF進階區Crypto之你猜猜 write up

我們剛剛攔截了,敵軍的文件傳輸獲取一份機密文件,請君速速破解。

下載下來是個txt,裏面一串神祕代碼:

504B03040A0001080000626D0A49F4B5091F1E0000001200000008000000666C61672E7478746C9F170D35D0A45826A03E161FB96870EDDFC7C89A11862F9199B4CD78E7504B01023F000A0001080000626D0A49F4B5091F1E00000012000000080024000000000000002000000000000000666C61672E7478740A0020000000000001001800AF150210CAF2D1015CAEAA05CAF2D1015CAEAA05CAF2D101504B050600000000010001005A000000440000000000

猜想是十六進制數,拿去decode一下:

decode出來發現是亂碼,但是內含flag.txt字樣,結合開頭504B0304,猜測這是一個zip的二進制數據。

因此在winHex中新建一個zip文件,解壓時需要密碼。

此時判斷該zip是真加密還是假加密:

1.壓縮源文件目錄區的標記第二位是奇數:01 08

2.壓縮源文件數據區標記第二位是奇數:01 08

嘗試將其修改爲偶數失敗,真加密實錘了。

目前想到的辦法就是爆破。

寫一個python3腳本,跑字典:

import zipfile #導入模塊,它是做壓縮和解壓縮的
pwds = '1234567890'
passFile=open('E:\\informationSecurity\\pwd.txt')
i=0
zfile = zipfile.ZipFile("C:\\Users\\llllll\\Desktop\\a.zip") #要解壓縮的壓縮包
for line in passFile.readlines():
    pwds.append(line.replace('\n',''))
    i += 1

for j in range(0,len(pwds)):
    password=pwds[j] #我們設定的口令
    zfile.extractall(path='C:\\Users\\llll\\Desktop', members=zfile.namelist(), pwd="123456".encode('utf-8'))

但是讀取字典會報錯,直接在代碼裏聲明密碼時就不會,原因不明。

Traceback (most recent call last):
    File "E:/05.Project/01.Python/Aziji-usefully/force_unlock_zipfile/d.py", line 10, in <module>
      fn.extractall(pwd=b'100100')
   File "C:\Program Files\Python37\lib\zipfile.py", line 1594, in extractall
     self._extract_member(zipinfo, path, pwd)
   File "C:\Program Files\Python37\lib\zipfile.py", line 1647, in _extract_member
     with self.open(member, pwd=pwd) as source, \
   File "C:\Program Files\Python37\lib\zipfile.py", line 1516, in open
     raise RuntimeError("Bad password for file %r" % name)

所以不用代碼了,使用工具Ziperello爆破:

最後跑出來密碼是123456.

解壓成功拿到flag:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章