leak_d的题目与预期解

This commit is contained in:
2023-08-31 13:39:08 +08:00
parent 79965ab472
commit 149f1f51c2
2 changed files with 86 additions and 0 deletions

18
crypto/leak_d/crack.py Normal file
View File

@@ -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))

68
crypto/leak_d/leak_d.py Normal file
View File

@@ -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()