Path: blob/master/RSA-encryption/Attack-LSBit-Oracle/exploit.py
1402 views
from Crypto.Util.number import *1from Crypto.PublicKey import RSA2from pwn import *34def _encrypt(message):5r.recvuntil("choice: ")6r.sendline("1")7r.recvuntil("to encrypt (in hex): ")8r.sendline(message.encode("hex"))9ct = r.recvline("ciphertext (in hex): ").strip()[37:]10r.recvline()11r.recvline()12return ct.decode("hex")1314def _decrypt(ciphertext):15r.recvuntil("choice: ")16r.sendline("2")17r.recvuntil("to decrypt (in hex): ")18r.sendline(ciphertext.encode("hex"))19pt = r.recvline("plaintext (in hex): ").strip()[36:]20r.recvline()21r.recvline()22return pt.decode("hex")2324r = process("./encrypt.py")25r.recvline()26flag_enc = r.recvline().strip()[31:].decode("hex")27N = int(r.recvline().strip()[20:])28print "flag_enc: ", flag_enc29print "N: ", N30print "\n\n"3132e = 6553733upper_limit = N34lower_limit = 03536flag = ""37i = 138while i <= 1034:39chosen_ct = long_to_bytes((bytes_to_long(flag_enc)*pow(2**i, e, N)) % N)40output = _decrypt(chosen_ct)41if ord(output[-1]) == 0:42upper_limit = (upper_limit + lower_limit)/243elif ord(output[-1]) == 1:44lower_limit = (lower_limit + upper_limit)/245else:46break47print "Unsuccessfull"48i += 14950print "Flag : ", long_to_bytes(lower_limit)515253