SECCON 2018 Online CTF

2018/10/30

595位。Unzipのみ解いた。

Unzip

Problem

https://score-quals.seccon.jp/challenges#Unzip

Solution

flag.zipとこれをzipにした時のコードが与えられる。コードは以下の通り。

echo 'SECCON{'`cat key`'}' > flag.txt
zip -e --password=`perl -e "print time()"` flag.zip flag.txt

パスワードはzipにした時刻のUnixtimeであり、CTF開催時点で約1540644768。全探索は間に合わないが最新の時刻から1ずつ減らせば十分間に合うと判断し以下のコードを実行。

import zipfile
import zlib

with zipfile.ZipFile('./flag.zip', 'r') as zf:
    for password in range(1540644768, 1000000000, -1):
        try:
            print(str(password).encode())
            zf.extractall(pwd = str(password).encode())
            print(password)
            break
        except RuntimeError:
            if(password % 10000000 == 0):
                print(password)
            continue
        except zlib.error as e:
            print(e)
            continue
        except zipfile.BadZipFile as e:
            print(e)
            continue

約20秒でパスワードを得られる。これを使いflag.zipを解凍しflagを得る。