*CTF 2021 Writeup

この大会は2021/1/16 10:00(JST)~2021/1/18 10:00(JST)に開催されました。
今回もチームで参戦。結果は120点で521チーム中245位でした。
自分で解けた問題をWriteupとして書いておきます。

signin (Misc)

Telegramに入ると、メッセージにフラグがあった。

*CTF{we1c0me_to_the_starCTF2021~}

GuessKey (Crypto)

maskに0を指定すれば、p, qが何であっても、keyは変わらない。このことから簡単に推測できる。

import socket

def recvuntil(s, tail):
    data = ''
    while True:
        if tail in data:
            return data
        data += s.recv(1)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('52.163.228.53', 8080))

key = recvuntil(s, '\n').rstrip()
print key

for i in range(3):
    data = recvuntil(s, 'mask:')
    print data + '0'
    s.sendall('0\n')

    data = recvuntil(s, 'guess:')
    print data + str(key)
    s.sendall(str(key) + '\n')

    data = recvuntil(s, '\n').rstrip()
    print data

data = recvuntil(s, '\n').rstrip()
print data

実行結果は以下の通り。

12711853505504410428
mask:0
guess:12711853505504410428
Nice.
mask:0
guess:12711853505504410428
Nice.
mask:0
guess:12711853505504410428
Nice.
*CTF{bcceb9d0913793c7d10ffedddac47cd2}
*CTF{bcceb9d0913793c7d10ffedddac47cd2}