writeups/2021/corctf/dividing_secrets/exploit.py

36 lines
915 B
Python

from pwn import *
from math import ceil, sqrt
import sys
def run():
r = remote("crypto.be.ax", 6000)
try:
g = int(r.recvline().decode().split(":")[1])
print("g", g)
p = int(r.recvline().decode().split(":")[1])
print("p", p)
enc = int(r.recvline().decode().split(":")[1])
print("enc", enc)
position = 504
top_bits = 0
while True:
r.recvuntil("number> ")
r.sendline(str(2**position))
h = int(r.recvline().decode())
for i in range(256):
if pow(g, (top_bits << 8) | i, p) == h:
sys.stdout.write(chr(i))
top_bits = (top_bits << 8) | i
position -= 8
break
else:
raise Exception('char not found')
finally:
r.close()
if __name__ == "__main__":
run()