SECCON CTF 2023 Quals Writeup

この大会は2023/9/9 6:00(JST)~2023/9/11 6:00(JST)に開催されました。
今回もチームで参戦。結果は900点で653チーム中52位でした。
自分で解けた問題をWriteupとして書いておきます。

Welcome (welcome)

Discordに入り、#announcementチャネルのメッセージを見たら、フラグが表示された。

SECCON{Welcome_to_SECCON_CTF_2023}

plai_n_rsa (crypto)

RSA暗号で、e, d, hint(=p+q), cがわかっている。

phi = n - hint + 1
phi * a = d * e - 1 (aはe未満)

aを総当たりして、phiからnを求める。それからn、d, eからp, qを求め、p + qがhintと同じ値になるものを探す。あとは通常通り復号すればよい。

#!/usr/bin/env python3
from Crypto.Util.number import *
from Crypto.PublicKey import RSA

with open('output.txt', 'r') as f:
    params = f.read().splitlines()

e = int(params[0].split('=')[1])
d = int(params[1].split('=')[1])
hint = int(params[2].split('=')[1])
c = int(params[3].split('=')[1])

for a in range(1, e):
    if (d * e - 1) % a == 0:
        phi = (d * e - 1) // a
        n = phi - 1 + hint
        try:
            rsa = RSA.construct((n, e, d))
            p = rsa.p
            q = rsa.q
            if p + q == hint:
                break
        except:
            continue

m = pow(c, d, n)
flag = long_to_bytes(m).decode()
print(flag)
SECCON{thank_you_for_finding_my_n!!!_GOOD_LUCK_IN_SECCON_CTF}