Write up for UTCTF 2024 - Crypto/simple signature

Challenge

The s in rsa stands for secure.

Explain

The server receives the message and returns the RSA signature value. Each time you sign, the server calculates the signature value of the message value you entered + i (starting from i = 0).

Solve

from pwn import *

r = remote("betta.utctf.live", 4374)

r.recvuntil(b"n = ")
n = int(r.recvline()[:-1])

r.recvuntil(b"e = ")
e = int(r.recvline()[:-1])

r.recvuntil(b"Enter a message as an integer (enter 0 to stop):")
r.sendline(b"1")

r.recvuntil(b"Enter a message as an integer (enter 0 to stop):")
r.sendline(b"4")

r.recvuntil(b"Your signature is: ")
s = r.recvline()[:-1]

r.recvuntil(b"Enter a message as an integer (enter 0 to stop):")
r.sendline(b"0")

r.recvuntil(b"Enter a message: ")
r.sendline(b"3")

r.recvuntil(b"Enter a signature: ")
r.sendline(s)

r.recvuntil(b"Congrats! Here is the flag: ")
print(str(r.recvline(), "utf-8")[:-1])
❯ python3 utctf_simple-signature.py
[+] Opening connection to betta.utctf.live on port 4374: Done
utflag{a1m05t_t3xtb00k_3x3rc153}
[*] Closed connection to betta.utctf.live port 4374