VULNCON CTF 2021 Writeup

この大会は2021/12/4 19:30(JST)~2021/12/05 19:30(JST)に開催されました。
今回もチームで参戦。結果は384点で187チーム中48位でした。
自分で解けた問題をWriteupとして書いておきます。

Sanity Check (Misc)

問題にフラグが書いてあった。

VULNCON{g00d_luck_4nd_Have_fun}

mfine (Crypto)

フラグの各文字についてALPHAのインデックスをiとしたときに、(a * i + b) % mが暗号になっている。メッセージにどのように文字が入っているか不明なので、a, bについて1~m-1ブルートフォースして復号する。

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

def decrypt(ciphertext, a, b):
    plaintext = ''
    for letter in ciphertext:
        i = ALPHA.index(letter)
        c = ((i - b) * inverse(a, m)) % m
        plaintext += ALPHA[c]
    return plaintext

ALPHA = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ{}_ #'
m = len(ALPHA)

with open('cipher.txt', 'r') as f:
    cipher = f.read().replace('\n', '')

found = False
for a in range(1, m):
    for b in range(1, m):
        message = decrypt(cipher, a, b)
        if 'VULNCON{' in message:
            found = True
            print(message)
            break
    if found:
        break

復号結果は以下の通り。

THE AFFINE CIPHER IS A TYPE OF MONOALPHABETIC SUBSTITUTION CIPHER WHERE EACH LETTER IN AN ALPHABET IS MAPPED TO ITS NUMERIC EQUIVALENT ENCRYPTED USING A SIMPLE MATHEMATICAL FUNCTION AND CONVERTED BACK TO A LETTER THE FLAG FOR YOU IS VULNCON{3V3RYTH1NG_C4N_B3_BR0K3N_1F_Y0U_AR3_5M4RT_3N0UGH} THE FORMULA USED MEANS THAT EACH LETTER ENCRYPTS TO ONE OTHER LETTER AND BACK AGAIN MEANING THE CIPHER IS ESSENTIALLY A STANDARD SUBSTITUTION CIPHER WITH A RULE GOVERNING WHICH LETTER GOES TO WHICH SINCE THE AFFINE CIPHER IS STILL A MONOALPHABETIC SUBSTITUTION CIPHER IT INHERITS THE WEAKNESSES OF THAT CLASS OF CIPHERS

この文章の中にフラグがあった。

VULNCON{3V3RYTH1NG_C4N_B3_BR0K3N_1F_Y0U_AR3_5M4RT_3N0UGH}