この大会は2022/6/2 19:00(JST)~2022/6/3 20:00(JST)に開催されました。
今回もチームで参戦。結果は600点で285チーム中33位でした。
自分で解けた問題をWriteupとして書いておきます。
Sanity Check (misc)
問題にフラグが書いてあった。
SECFEST{dr0p_th4t_v4n1ty_c0m3_cl41m_y0ur_s4n1ty}
panta fler (crypto)
Many Time Pad Attackの問題。同じXOR鍵で3つの平文の暗号がある。1つ目の平文の先頭が"SECFEST{"であると仮定し、推測しながら復号する。
#!/usr/bin/env python3 from Crypto.Util.strxor import strxor cs = [ b'\xc1=\x01}\xe7\x1c\x94YRj\xb3\xa7K@\xde\x0c\x9a\xc9\x00\xb0ZB\r\x87\r\x8b\x8f\xffQ\xc7', b'\xfc\x1d4^\xd0o\xb2GE|\x89\xe4^]\xcfE\x86\xdd\x1e\x8a\r@\x1c\x96r\x92\x87\xec\x19\xd4', b'\xfa\x19!P\x82;\xa8G\x10\x7f\x80\xa5DP\xdeE\x94\xc8S\x9cHH\x1f\x8a!\x87\xc0\xe3\x1f\xcd' ] msg0 = b'SECFEST{' key = strxor(cs[0][:8], msg0) for i in range(3): msg = strxor(key, cs[i][:8]) print('[+] msg%d:' % i, msg) # guess key += strxor(cs[2][8:9], b' ') for i in range(3): msg = strxor(key, cs[i][:9]) print('[+] msg%d:' % i, msg) key += strxor(cs[2][9:16], b'planet ') for i in range(3): msg = strxor(key, cs[i][:16]) print('[+] msg%d:' % i, msg) key += strxor(cs[1][16:25], b'same key ') for i in range(3): msg = strxor(key, cs[i][:25]) print('[+] msg%d:' % i, msg) key += strxor(cs[2][25:27], b't ') for i in range(3): msg = strxor(key, cs[i][:27]) print('[+] msg%d:' % i, msg) key += strxor(cs[1][27:30], b'ain') for i in range(3): msg = strxor(key, cs[i][:30]) print('[+] msg%d:' % i, msg)
実行結果は以下の通り。
[+] msg0: b'SECFEST{' [+] msg1: b'never re' [+] msg2: b'hack the' [+] msg0: b'SECFEST{b' [+] msg1: b'never reu' [+] msg2: b'hack the ' [+] msg0: b'SECFEST{be_cauti' [+] msg1: b'never reuse the ' [+] msg2: b'hack the planet ' [+] msg0: b'SECFEST{be_cautious_with_' [+] msg1: b'never reuse the same key ' [+] msg2: b'hack the planet at secfes' [+] msg0: b'SECFEST{be_cautious_with_xo' [+] msg1: b'never reuse the same key ag' [+] msg2: b'hack the planet at secfest ' [+] msg0: b'SECFEST{be_cautious_with_xor!}' [+] msg1: b'never reuse the same key again' [+] msg2: b'hack the planet at secfest now'
SECFEST{be_cautious_with_xor!}