Security Fest 2022 Writeup

この大会は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!}