Scrambled: RSA
This commit is contained in:
43
scrambled_rsa/sol.py
Executable file
43
scrambled_rsa/sol.py
Executable file
@@ -0,0 +1,43 @@
|
|||||||
|
#!python3
|
||||||
|
from pwn import *
|
||||||
|
from sage.all import Integer
|
||||||
|
from string import ascii_lowercase, ascii_uppercase, digits
|
||||||
|
|
||||||
|
conn = remote("mercury.picoctf.net", 4484)
|
||||||
|
|
||||||
|
conn.recvuntil(b": ")
|
||||||
|
flag = conn.recvline().strip()
|
||||||
|
conn.recvuntil(b"n: ")
|
||||||
|
n = Integer(conn.recvline())
|
||||||
|
conn.recvuntil(b"e: ")
|
||||||
|
e = Integer(conn.recvline())
|
||||||
|
|
||||||
|
def remote_encrypt(msg):
|
||||||
|
conn.recvuntil(b"me: ")
|
||||||
|
conn.sendline(msg)
|
||||||
|
conn.recvuntil(b"go: ")
|
||||||
|
return conn.recvline().strip()
|
||||||
|
|
||||||
|
#'''
|
||||||
|
charset = ascii_lowercase + digits + "_" + ascii_uppercase + "{}"
|
||||||
|
C_residue = flag
|
||||||
|
msg = b""
|
||||||
|
known_encs = []
|
||||||
|
P = log.progress("bruteforcing message")
|
||||||
|
while len(C_residue) > 0:
|
||||||
|
P.status(msg.decode())
|
||||||
|
for new_char in charset:
|
||||||
|
new_char = new_char.encode()
|
||||||
|
new_msg = msg + new_char
|
||||||
|
new_enc = remote_encrypt(new_msg)
|
||||||
|
for enc in known_encs:
|
||||||
|
new_enc = new_enc.replace(enc, b"")
|
||||||
|
if new_enc in C_residue:
|
||||||
|
msg += new_char
|
||||||
|
known_encs.append(new_enc)
|
||||||
|
C_residue = C_residue.replace(new_enc, b"")
|
||||||
|
break
|
||||||
|
P.success(msg.decode())
|
||||||
|
log.info("message: {}".format(msg))
|
||||||
|
#'''
|
||||||
|
|
||||||
Reference in New Issue
Block a user