この大会は2021/11/27 10:00(JST)~2021/11/28 10:00(JST)に開催されました。
今回もチームで参戦。結果は1101点で197チーム中27位でした。
自分で解けた問題をWriteupとして書いておきます。
WELCOME (Misc)
Discordに入り、#announcementチャネルのメッセージを見ると、フラグが書いてあった。
ISITDTU{Welcome_t0_ISITDTU_CTF_2021}
ONE TIME BEACH (Cryptography)
制限付きのある長さのキーでXOR暗号化している。拡張子がbinで、データ量も多いので、ASCIIデータではないと推測する。画像データあたりから推測して、復号を試す。PNGでは整合できなかったので、他の形式の画像ファイルかもしれない。次にJPGを試すと、途中まで整合が取れる。他のJPGデータを参考にしながら、復号する。
#!/usr/bin/python3 from itertools import cycle def xor(a, b): return [i ^ j for i, j in zip(a, cycle(b))] with open('cipher.enc', 'rb') as f: cipher = f.read()[20:] HEADER = b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01' HEADER += b'\x00\x01\x00\x00\xff\xdb\x00\x43' c = HEADER[0] ^ cipher[0] o = HEADER[1] ^ cipher[1] t = HEADER[2] ^ cipher[2] h = HEADER[3] ^ cipher[3] a = HEADER[4] ^ cipher[4] n = HEADER[5] ^ cipher[5] _ = HEADER[6] ^ cipher[6] b = HEADER[22] ^ cipher[22] r = HEADER[17] ^ cipher[17] u = HEADER[14] ^ cipher[14] i = HEADER[23] ^ cipher[23] s = HEADER[7] ^ cipher[7] e = HEADER[18] ^ cipher[18] y = HEADER[9] ^ cipher[9] key = [c,o,t,h,a,n,_,s,a,y,s,_,y,o,u,_,a,r,e,_,a,_,b,i,t,t,h] FLAG = xor(cipher, key) with open('flag.jpg', 'wb') as f: f.write(bytes(FLAG))
復号した画像フラグが書かれていた。
ISITDTU{OMG_1_KNOW_PI_DIGITS}