Path: blob/master/RSA-encryption/Intro-Challenges/Challenge-13/exploit.py
1402 views
from Crypto.Util.number import *1from pwn import *23def _encrypt(message):4r.recvuntil("choice: ")5r.sendline("1")6r.recvuntil("encrypt (in hex): ")7r.sendline(message.encode("hex"))8ct = r.recvline().strip()[37:].decode("hex")9r.recvline()10r.recvline()11return ct1213def extractmod_eknown(_encrypt, e, limit=4):14"""15Reference: https://crypto.stackexchange.com/questions/43583/deduce-modulus-n-from-public-exponent-and-encrypted-data1617Function to extract the value of modulus, given value of public key exponent1819:input parameters:20_encrypt : <type 'function'> : Function interacting with the server for encryption21e : <type 'int' or 'long'> : Public Key exponent22limit : <type 'int'> : number of values to be sent for encryption23"""24try:25assert limit <= 426except AssertionError:27print "[+] Limit too big!"28return -129try:30m_list = [2, 3, 5, 7]31mod_list = [(bytes_to_long(_encrypt(long_to_bytes(m_list[i])))) - (m_list[i]**e) for i in range(limit)]32_GCD = mod_list[0]33for i in range(limit):34_GCD = GCD(_GCD, mod_list[i])35return _GCD36except Exception as e:37print "[+] Exception: ", e3839r = process("./run.sh")40N = extractmod_eknown(_encrypt, 65537, 4)41print "N: ", N42assert N != -143r.sendline("2")44r.recvuntil("modulus: ")45r.sendline(str(N))46print r.recvline().strip()474849