From aba24b087ade780f00f0683da5c8cec150aa5437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Gro=C3=9F?= Date: Sun, 8 Jul 2018 19:06:10 -0400 Subject: [PATCH] Importing Basically Gambling challenge --- basically gambling/README.md | 3 ++ basically gambling/challenge_server.py | 62 ++++++++++++++++++++++++++ basically gambling/getflag_b46.sh | 14 ++++++ 3 files changed, 79 insertions(+) create mode 100644 basically gambling/README.md create mode 100755 basically gambling/challenge_server.py create mode 100755 basically gambling/getflag_b46.sh diff --git a/basically gambling/README.md b/basically gambling/README.md new file mode 100644 index 0000000..dc01ce1 --- /dev/null +++ b/basically gambling/README.md @@ -0,0 +1,3 @@ +# Lucky number 64 + + diff --git a/basically gambling/challenge_server.py b/basically gambling/challenge_server.py new file mode 100755 index 0000000..f204a54 --- /dev/null +++ b/basically gambling/challenge_server.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +import threading, time, socket, sys, random +import SocketServer +from base64 import b64encode + +flag = "MNZ{64IsTheBestBase==}" +notTheFlag = "Better luck next time!" +CHUNKS = 20 +CHANCE = 0.15 +PORT = 6646 +class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler): + def setup(self): + print("Connected TO {}".format(self.client_address)) + try: + fh = open("/dev/urandom","rb") + chunk = random.randint(1, CHUNKS) + for i in range(0, CHUNKS): + output = b64encode(fh.read(22)) + self.request.sendall("{}\n".format(output)) + if i == chunk: + rand = random.random() + output = flag if rand < CHANCE else notTheFlag + print output + output = b64encode(output) + self.request.sendall("{}\n".format(output)) + time.sleep(0.1) + except socket.error as e: + print "Socket error {} - {}".format(e.errno, self.client_address) + finally: + fh.close() + def handle(self): + pass + def finish(self): + print "Closed connection to {}".format(self.client_address) + +class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): + pass + +if __name__ == "__main__": + HOST = "0.0.0.0" + + server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler) + ip, port = server.server_address + + # Start a thread with the server -- that thread will then start one + # more thread for each request + server_thread = threading.Thread(target=server.serve_forever) + # Exit the server thread when the main thread terminates + server_thread.daemon = True + server_thread.start() + print "Server loop running in thread:", server_thread.name + #server.shutdown() + #server.server_close() + while ( True ): + server.handle_request() + try: + server.get_request() + except KeyboardInterrupt: + print "Server Stopping" + server.shutdown() + server.server_close() + break diff --git a/basically gambling/getflag_b46.sh b/basically gambling/getflag_b46.sh new file mode 100755 index 0000000..ef4d4ef --- /dev/null +++ b/basically gambling/getflag_b46.sh @@ -0,0 +1,14 @@ +#!/bin/bash +echo "Attempting to get flag..." +ATTEMPT=1 +while :; +do + echo "Attempt ${ATTEMPT}..." + ATTEMPT=$[ATTEMPT + 1] + RESULT=$(nc localhost 6667 | base64 -d | strings | grep "MNZ{") + if [[ $RESULT ]]; then + echo "Found the flag" + echo $RESULT + break + fi +done