Path: blob/master/RSA-encryption/Attack-Retrieve-Modulus/Challenges/Lost-Key/exploit.py
1402 views
from pwn import *1from Crypto.Util.number import *2from Crypto.PublicKey import *3import math45def encrypt(m):6m=long_to_bytes(m)7r.recvuntil("cmd: ")8r.sendline("A")9r.recvuntil("input: ")10r.sendline(m.encode("hex"))11return int(r.recvline().strip(),16)1213def decrypt(m):14m=long_to_bytes(m)15r.recvuntil("cmd: ")16r.sendline("B")17r.recvuntil("input: ")18r.sendline(m.encode("hex"))19return int(r.recvline().strip(),16)2021r = process("./run.sh")22r.recvline().strip()23flag_enc = bytes_to_long(r.recvline().strip().decode("hex"))2425# Finding the modulus26c1 = encrypt(2)27c2 = encrypt(3)28c3 = encrypt(5)29c4 = encrypt(2**2)30c5 = encrypt(3**2)31c6 = encrypt(5**2)32N = GCD(GCD(c1**2 - c4, c2**2 - c5), c3**2 - c6)33print "Modulus: ", N3435for j in range(2, 1000000):36assert N % j != 03738# LS Byte Oracle Attack39flag = "\n"40for i in range(1,60):41inv = inverse(256**i, N)42_multiplier = encrypt(inv)43chosen_ct = flag_enc*_multiplier44output = decrypt(chosen_ct)45flag_char = (output - (bytes_to_long(flag)*inv) % N) % 25646flag = chr(flag_char) + flag47print flag484950