CTF toolkit: lib (net, crypto_utils), templates per category, scaffold, cheatsheet, ps_and_qs example
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,43 @@
|
||||
"""
|
||||
EXAMPLE: SECCON 2017 Quals — "Ps and Qs" (Crypto, 200p)
|
||||
https://github.com/p4-team/ctf/tree/master/2017-12-09-seccon-quals/crypto_ps_and_qs
|
||||
|
||||
VULN: Two RSA public keys (pub1.pub, pub2.pub) share a prime (common factor).
|
||||
FACT: gcd(n1, n2) = p -> recover q1 = n1/p, q2 = n2/p -> private keys -> decrypt.
|
||||
|
||||
Run:
|
||||
cd /home/code/ctfkit
|
||||
python3 examples/ps_and_qs.py
|
||||
Expected flag: SECCON{1234567890ABCDEF}
|
||||
"""
|
||||
import sys
|
||||
from Crypto.PublicKey import RSA
|
||||
from Crypto.Util.number import long_to_bytes
|
||||
|
||||
sys.path.insert(0, "/home/code/ctfkit")
|
||||
from lib.crypto_utils import gcd, modinv
|
||||
|
||||
HERE = __file__.rsplit("/", 1)[0]
|
||||
|
||||
|
||||
def main():
|
||||
pub1 = RSA.importKey(open(f"{HERE}/pub1.pub").read())
|
||||
pub2 = RSA.importKey(open(f"{HERE}/pub2.pub").read())
|
||||
p = gcd(pub1.n, pub2.n)
|
||||
q1 = pub1.n // p
|
||||
q2 = pub2.n // p
|
||||
assert p * q1 == pub1.n and p * q2 == pub2.n, "common-factor failed"
|
||||
msg = int.from_bytes(open(f"{HERE}/cipher", "rb").read(), "big")
|
||||
|
||||
d1 = modinv(pub1.e, (p - 1) * (q1 - 1))
|
||||
pt = long_to_bytes(pow(msg, d1, pub1.n)).decode(errors="replace")
|
||||
import re
|
||||
m = re.search(r"SECCON\{[^}]+\}", pt)
|
||||
flag = m.group(0) if m else pt
|
||||
print("shared prime p =", p)
|
||||
print("FLAG =", flag)
|
||||
return flag
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,14 @@
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAz8+77qffFDqKwgixqh0v
|
||||
hlRaxMtYjJSj+xwUrZGk8Lk2FXxaS4acGKi4ZPRya/j83AIMtBBCuslnhKt9A/k3
|
||||
SUfvsLw9Zlgxl0NAFZ/8PbfI50tjkP2m7sMLgcb/Yk6NP1sXv7elx//Y7PTmUYs5
|
||||
Or793Q+uukMIdGumP4EGtZ1+BYlDoAExp9TlOMRksnBXdkftvEeMwc6Vhe/odzBb
|
||||
OnwufETbVHXt2tw0WiyQqUZ3HKwKRUzby0YfKEDnYTyD6c7MlAN/oJu52qPxgFYs
|
||||
Ad8L5sUfDAbo8OLW4aXlDQoow4gRQHcKn0WTQUa381m5Oc4j8PpQem9ORUVxQwlS
|
||||
ADwg8dl6ZxQLbl/L+zs3bk4klprrHUic/HKvTxWkeIoaqXyJdW0dTZSqR+fNOoGu
|
||||
y5JEjMksd9LvV2qg28E1CGKszdrdvOgDV/DNW4VN0PjEYn/ktxiyTs/hHtJMO+Iv
|
||||
AGQ7vtTuXjRa8Xblt20jovgODsbzTlcYxipw/lVwwouAe0TyLq3r2bX/kG9qhb6I
|
||||
wMj25fiApR8X+E2xwu7+qK80BAREztGjffDk9fcsw/ULfkJ8jC2LYYbq12LwxESz
|
||||
yjoBA+0SqTvOnK50eaIp67wKZI6qb5flBRpm6wnr1zSOkvdfEl69w2fip9Had1nU
|
||||
H64uJjW/S3p/kb7Ks6x9Bb0CAwEAAQ==
|
||||
-----END PUBLIC KEY-----
|
||||
@@ -0,0 +1,14 @@
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuzPMf8yOyvO/ntlcWDeS
|
||||
4exrgO6HXsIGTbzwdZXINEkjv1NlJNTgp1V0x3mMc7GX3SsbQgVLHknLRfvwTm8R
|
||||
TPijZcPfNkVST3eCaAOKP6JoAunR7b+7Xt+1oMN1Nw1/EPV9q71Pdx2tNjLwG5vO
|
||||
EEiZZu6ILasXozt4aqX3MWWlQFEwCx35KAOSo+3p0/ycTYpqBjUfbvNZjo3is507
|
||||
Ga9koXFs0Vgmw/JMsT3rciw6A+8dK+LQpabiEP9dAYNnvjv5nqJroAblFkpN1Vqr
|
||||
zUSd5c4YZIJdwWDlDVCesOb+cj7xgmge3blAhLg+yeLpQ+h8uHUJqw/Zscoiwc6v
|
||||
85/Kz2cp/A4FeGcNh9fw+cy+Ccs+Es64lVcqmXnRC/2/r6JgVo2NsYS+ErPjGT4H
|
||||
cpzjwdnNgoPtaYOgY4gDagpwKU8jOSlEd4KA596fYBY6gVDjD/Sk6gJ5LL6DBbqi
|
||||
6Zr+UeF9r8Vr4NOEFHvNOOnRKTTscSYiIXdzpLOFGpsMbHw+AfYRGh4aVX9OKuSi
|
||||
R86bdczMsYGYJfMFSqHAVb0+I0AJOuLvHQ+loXaCXv33lQcCf1EECAAJFC8NQ+Lx
|
||||
DPrSIIE7u5AU1PQyXtrFOPtegrdT4q07JGB9c4CqZPy5i1nqi1pza4CTgySM7OCx
|
||||
clXqVZ6QEn93ivbX6KZtrZECAwEAAQ==
|
||||
-----END PUBLIC KEY-----
|
||||
Reference in New Issue
Block a user