50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
import random
|
|
import socketserver
|
|
import socket, os
|
|
import string
|
|
|
|
flag = open('flag.txt','r').read().strip()
|
|
|
|
def send_message(server, message):
|
|
enc = message.encode()
|
|
server.send(enc)
|
|
|
|
def setup(server, key):
|
|
flag = 'THM{thisisafakeflag}'
|
|
xored = ""
|
|
|
|
for i in range(0,len(flag)):
|
|
xored += chr(ord(flag[i]) ^ ord(key[i%len(key)]))
|
|
|
|
hex_encoded = xored.encode().hex()
|
|
return hex_encoded
|
|
|
|
def start(server):
|
|
res = ''.join(random.choices(string.ascii_letters + string.digits, k=5))
|
|
key = str(res)
|
|
hex_encoded = setup(server, key)
|
|
send_message(server, "This XOR encoded text has flag 1: " + hex_encoded + "\n")
|
|
|
|
send_message(server,"What is the encryption key? ")
|
|
key_answer = server.recv(4096).decode().strip()
|
|
|
|
try:
|
|
if key_answer == key:
|
|
send_message(server, "Congrats! That is the correct key! Here is flag 2: " + flag + "\n")
|
|
server.close()
|
|
else:
|
|
send_message(server, 'Close but no cigar' + "\n")
|
|
server.close()
|
|
except:
|
|
send_message(server, "Something went wrong. Please try again. :)\n")
|
|
server.close()
|
|
|
|
class RequestHandler(socketserver.BaseRequestHandler):
|
|
def handle(self):
|
|
start(self.request)
|
|
|
|
if __name__ == '__main__':
|
|
socketserver.ThreadingTCPServer.allow_reuse_address = True
|
|
server = socketserver.ThreadingTCPServer(('0.0.0.0', 1337), RequestHandler)
|
|
server.serve_forever()
|