diff --git a/crypto/leak_d/crack.py b/crypto/leak_d/crack.py new file mode 100644 index 0000000..e850292 --- /dev/null +++ b/crypto/leak_d/crack.py @@ -0,0 +1,18 @@ +from Crypto.Util.number import * # type: ignore +from pwn import * # type: ignore + +r = remote("localhost",10001) +r.recvline() +n = r.recvline() +n = int(n.decode()) + +r.recvline() +c = r.recvline() +c = int(c.decode()) + +r.recvline() +d = r.recvline() +d = int(d.decode()) + +m = pow(c, d, n) +print(long_to_bytes(m)) \ No newline at end of file diff --git a/crypto/leak_d/leak_d.py b/crypto/leak_d/leak_d.py new file mode 100644 index 0000000..ee6c7ad --- /dev/null +++ b/crypto/leak_d/leak_d.py @@ -0,0 +1,68 @@ +import socketserver +import signal +import os +from Crypto.Util.number import * # type: ignore + + +class Task(socketserver.BaseRequestHandler): + def _recvall(self): + BUFF_SIZE = 2048 + data = b'' + while True: + part = self.request.recv(BUFF_SIZE) + data += part + if len(part) < BUFF_SIZE: + break + return data.strip() + + def send(self, msg, newline=True): + try: + if newline: + msg += b'\n' + self.request.sendall(msg) + except: + pass + + def recv(self, prompt=b'[-] '): + self.send(prompt, newline=False) + return self._recvall() + + def question(self,flag): + p = getPrime(512) + q = getPrime(512) + n = p * q + e = 65537 + phi = (p - 1) * (q - 1) + d = inverse(e,phi) + flag = bytes_to_long(flag) + c = pow(flag, e, n) + self.send(b"Here is N") + self.send(str(n).encode()) + self.send(b"You can't decrypt this!") + self.send(str(c).encode()) + self.send(b"OMG d leaked!") + self.send(str(d).encode()) + + + def handle(self): + signal.alarm(60) + self.question(flag) + + + +class ThreadedServer(socketserver.ThreadingMixIn, socketserver.TCPServer): + pass + + +class ForkedServer(socketserver.ForkingMixIn, socketserver.TCPServer): + pass + + +if __name__ == "__main__": + # flag = bytes(os.getenv("FLAG"),"utf-8") + flag = b"testflag" + HOST, PORT = '0.0.0.0', 10001 + server = ForkedServer((HOST, PORT), Task) + server.allow_reuse_address = True + print(HOST, PORT) + server.serve_forever() \ No newline at end of file