Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ashutosh1206
GitHub Repository: ashutosh1206/crypton
Path: blob/master/Block-Cipher/Attack-CBC-Bit-Flipping/Challenges/CNVService/CNVService.py
1402 views
1
import os
2
import socket
3
import threading
4
import time
5
import SocketServer
6
from AES_CNV_COOKIE import Cookie, BLOCK_SIZE
7
from Crypto import Random
8
from Secret import __FLAG__
9
10
host, port = '0.0.0.0', 4444
11
BUFF_SIZE = 1024
12
13
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
14
allow_reuse_address = True
15
16
class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
17
18
def Register(self):
19
self.request.sendall("*****************************REGISTER*****************************\n")
20
self.request.sendall("Name: ")
21
name = self.request.recv(BUFF_SIZE).strip()
22
self.request.sendall("Username: ")
23
username = self.request.recv(BUFF_SIZE).strip()
24
if "root" in username:
25
self.request.sendall("Can not register root user!\n")
26
else:
27
cookie = self.cookie.register(name, username)
28
self.request.sendall("Cookie: %s\n" %cookie)
29
self.request.sendall("***************************END REGISTER***************************\n")
30
31
def Login(self):
32
self.request.sendall("*******************************LOGIN******************************\n")
33
self.request.sendall("Cookie: ")
34
cookie = self.request.recv(BUFF_SIZE).strip()
35
name, username, time = self.cookie.authentication(cookie)
36
if username == None:
37
self.request.sendall("Don't attack my service, hacker!\n")
38
self.request.sendall("***************************LOGIN FALSE****************************\n")
39
else:
40
self.request.sendall("**************************LOGIN SUCCESS***************************\n")
41
self.request.sendall("Welcome CNV service: %s\n" %name)
42
self.request.sendall("Username: %s\n" %username)
43
self.request.sendall("Time register: %s\n" %time)
44
if username != "root":
45
self.request.sendall("Sorry! This service support only root user! Please waiting service upgrade.\n")
46
return False
47
else:
48
self.request.sendall("***************************Root Servive***************************\n")
49
self.request.sendall("This is flag: %s\n" %__FLAG__)
50
return True
51
52
def handle(self):
53
self.key = Random.new().read(BLOCK_SIZE)
54
self.cookie = Cookie(self.key)
55
self.request.settimeout(1)
56
self.countuser = 0
57
self.request.sendall("***************************CNVService*****************************\n")
58
self.request.sendall("* Challenge created by CNV *\n")
59
self.request.sendall("* My blog: https://chung96vn.blogspot.com *\n")
60
self.request.sendall("***************************CNVService*****************************\n")
61
while True:
62
self.request.sendall("********************Menu********************\n")
63
self.request.sendall("* 1 - Register *\n")
64
self.request.sendall("* 2 - Login *\n")
65
self.request.sendall("********************************************\n")
66
self.request.sendall("Your choice: ")
67
try:
68
choice = int(self.request.recv(BUFF_SIZE).strip())
69
except:
70
choice = 0
71
if choice == 1:
72
if self.countuser < 2:
73
if self.Register():
74
self.countuser += 1
75
else:
76
self.request.sendall("Can not register more than two user!\n")
77
elif choice == 2:
78
self.Login()
79
break
80
else:
81
self.request.sendall("Invalid choice!\n")
82
break
83
def main():
84
server = ThreadedTCPServer((host, port), ThreadedTCPRequestHandler)
85
server_thread = threading.Thread(target=server.serve_forever)
86
server_thread.daemon = True
87
server_thread.start()
88
print "Server loop running in thread:", server_thread.name
89
server_thread.join()
90
91
if __name__ == '__main__':
92
main()
93
94