Files
picoCTF/dachshund_attacks/sol.py
Maxime Vorwerk c8845312fe Dachshund Attacks
2024-06-20 14:22:19 +02:00

43 lines
1.0 KiB
Python
Executable File

#!/home/maxime/.pyvenv/bin/python3
from sympy import Rational, Symbol, solve
from sympy.ntheory.continued_fraction import continued_fraction, continued_fraction_convergents
from pwn import *
conn = connect("mercury.picoctf.net", 30761)
conn.recvuntil(b':')
e = int(conn.recvline().strip())
conn.recvuntil(b':')
n = int(conn.recvline().strip())
conn.recvuntil(b':')
c = int(conn.recvline().strip())
conn.close()
print("n =", n, '\n')
print("e =", e, '\n')
print("c =", c, '\n')
cont_frac = continued_fraction(Rational(e, n))
convergents = continued_fraction_convergents(cont_frac)
for convergent in convergents:
if convergent.p == 0:
continue
pk = convergent.p
pd = convergent.q
pphi = (e*pd - 1)//pk
p = Symbol('p', integer=True)
roots = solve(p**2 + (pphi - n - 1)*p + n, p)
if len(roots) == 2:
pp, pq = roots
if pp*pq == n:
print("factorized!")
P = pow(c, pd, n)
print(P.to_bytes((P.bit_length()+7)//8, byteorder='big'))
break