diff --git a/crypto/no_padding_no_problem/solve.py b/crypto/no_padding_no_problem/solve.py new file mode 100755 index 0000000..3c3ca98 --- /dev/null +++ b/crypto/no_padding_no_problem/solve.py @@ -0,0 +1,35 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i python3 -p python3 python3Packages.pwntools python3Packages.pycryptodome + +from pwn import * +from Crypto.Util.number import long_to_bytes + +def decipher(r: tube, ciphertext: bytes) -> str: + r.recvuntil(b'Give me ciphertext to decrypt: ') + r.sendline(ciphertext) + r.recvuntil(b'Here you go: ') + return r.recvline().strip() + +def main(): + addr, port, *_ = "mercury.picoctf.net 33780".split(" ") + r = remote(addr, int(port)) + + r.recvuntil(b'Good Luck!\n\n\n') + + n = int(r.recvline().split(b' ')[1].strip()) + e = int(r.recvline().split(b' ')[1].strip()) + enc = int(r.recvline().split(b' ')[1].strip()) + print(f"{n=}") + print(f"{e=}") + print(f"{enc=}") + + padding = 2 + encrypted_padding = pow(padding, e, n) + + payload = (enc * encrypted_padding) + output = decipher(r, str(payload).encode()) + flag = long_to_bytes(int(output) // padding).decode() + print(flag) + +if __name__ == "__main__": + main()