leak_d的题目与预期解
This commit is contained in:
18
crypto/leak_d/crack.py
Normal file
18
crypto/leak_d/crack.py
Normal 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
68
crypto/leak_d/leak_d.py
Normal 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()
|
Reference in New Issue
Block a user