RCTF 2017 Writeup

この大会は2017/5/20 9:00(JST)~2017/5/22 9:00(JST)に開催されました。
今回もチームで参戦。結果は574点で620チーム中102位でした。
自分で解けた問題をWriteupとして書いておきます。

Sign In (Misc)

freenodeで#rctf2017チャネルに入る。

09:03 *topic : RCTF{Welcome_To_RCTF_2017}
RCTF{Welcome_To_RCTF_2017}

RSA_sign1 (Crypto)

メッセージと対応するシグネチャがあっていればフラグが表示できそう。
何でもよいので、先にシグネチャを決める。それからメッセージを求め、メッセージから順に指定する。

#!/usr/bin/env python
import socket
import rsa

with open('public.pem') as f:
    pub_pem = f.read()

pub_key = rsa.PublicKey.load_pkcs1(pub_pem)
sig = 'hogehoge'

blocksize = rsa.common.byte_size(pub_key.n)
encrypted = rsa.transform.bytes2int(sig)
decrypted = rsa.core.decrypt_int(encrypted, pub_key.e, pub_key.n)
clearsig = rsa.transform.int2bytes(decrypted, blocksize)
sep_idx = clearsig.index('\x00', 2)
msg = clearsig[sep_idx+1:]

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('rsasign1.2017.teamrois.cn', 3000))

data = s.recv(256)
print data
print msg
s.sendall(msg + '\n')
data = s.recv(256)
print data
print sig.encode('hex')
s.sendall(sig.encode('hex') + '\n')
data = s.recv(256)
print data

このコードを実行したらフラグを得られた。

RCTF{your_fir5t_sig_test}