この大会は2020/11/15 5:00(JST)~2020/11/16 5:00(JST)に開催されました。
今回もチームで参戦。結果は449点で276チーム中23位でした。
自分で解けた問題をWriteupとして書いておきます。
Sanity Check (misc)
問題の画像にフラグが書いてある。
ptm{w3lc0m3_70_m0l3C0n_2020!}
babyhash (crypto)
a = bytes_to_long(b'admin') b = bytes_to_long(b'password') server_hash = (pow(x, a, p) * pow(y, b, p)) % p
adminとpasswordのペア以外で、server_hashと同じになる。ユーザ名、パスワードを指定できたらフラグが表示される。以下のことを使って、ユーザ名とパスワードを指定する。
pow(x, a, p) = pow(x, (a + (p -1) / 2), p)
import socket from Crypto.Util.number import * from binascii import hexlify def recvuntil(s, tail): data = '' while True: if tail in data: return data data += s.recv(1) p = 43401284375631863165968499011197727448907264840342630537012422089599453290392542589198227993829403166459913232354777490444915201356560807401141203961578150815557853865678753463969663318864902106651761912058979552119867603661163587639785030788676120329044248495611269533429749805119341551183130515359738240737511058829539566547367223386189286492001611298474857947463007621758421914760578235374029873653721324392107800911728989887542225179963985432894355552676403863014228425990320221892545963512002645771206151750279770286101983884882943294435823971377082846859794746562204984002166172161020302386671098808858635655367 a = bytes_to_long(b'admin') b = bytes_to_long(b'password') s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('challs.ctf.m0lecon.it', 8000)) username = hexlify(long_to_bytes(a + (p -1) / 2)) data = recvuntil(s, ':') print data + username s.sendall(username + '\n') password = hexlify(long_to_bytes(b + (p -1) / 2)) data = recvuntil(s, ':') print data + password s.sendall(password + '\n') for _ in range(5): data = recvuntil(s, '\n').rstrip() print data
実行結果は以下の通り。
CryptoLog.INC -------------------------------------------------- Welcome, user! Please login with valid credentials, checked by our crypto-evoluted system. -------------------------------------------------- Username:abe6f67efeb8a86949b6c9ce7537e813b428e14a37a043bc7e96d2f31eb424be822daafff5452d34236144e61cdf41eb799a3dbef79bb168d32a9d82b4c5c70ea66a1628d966476d6f5c7652ff81d5d92f97419a0a95499a4f71641203f4eb62bd5ef8d7a2cfcc7252e780cd634c8c429a5e555fb3229bbc08a3d76bf02d37ca36a0544bcbb37f4fdcd9d02bdbaba139ec6cee764d1f880efa491d326ffb4601a688126f86085cb752bda95dffc514944c2cb1bd919d87808bc44088e1017a3da370abe8baea3cd1faae758cb2e0af4671790e9a1621b1928a45825cd19c034e3b8da95e1888fc37c0896e1f49854d4d489ee3891a1c017f70ad18d1556d55d1 Password:abe6f67efeb8a86949b6c9ce7537e813b428e14a37a043bc7e96d2f31eb424be822daafff5452d34236144e61cdf41eb799a3dbef79bb168d32a9d82b4c5c70ea66a1628d966476d6f5c7652ff81d5d92f97419a0a95499a4f71641203f4eb62bd5ef8d7a2cfcc7252e780cd634c8c429a5e555fb3229bbc08a3d76bf02d37ca36a0544bcbb37f4fdcd9d02bdbaba139ec6cee764d1f880efa491d326ffb4601a688126f86085cb752bda95dffc514944c2cb1bd919d87808bc44088e1017a3da370abe8baea3cd1faae758cb2e0af4671790e9a1621b1928a45825cd19c034e3b8da95e1888fc37c0896e1f49854d4d489ee3891a1c017fe10e8be3686f5ec7 Glad to see you, admin! ptm{a_b1g_s0phi3_germ41n_pr1m3}
ptm{a_b1g_s0phi3_germ41n_pr1m3}