Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ashutosh1206
GitHub Repository: ashutosh1206/crypton
Path: blob/master/Block-Cipher/Attack-CBC-Padding-Oracle/Challenges/Secret-Server/secretserver.py
1402 views
1
import os, base64, time, random, string
2
from Crypto.Cipher import AES
3
from Crypto.Hash import *
4
5
key = os.urandom(16)
6
7
def pad(msg):
8
pad_length = 16-len(msg)%16
9
return msg+chr(pad_length)*pad_length
10
11
def unpad(msg):
12
return msg[:-ord(msg[-1])]
13
14
def encrypt(iv,msg):
15
msg = pad(msg)
16
cipher = AES.new(key,AES.MODE_CBC,iv)
17
encrypted = cipher.encrypt(msg)
18
return encrypted
19
20
def decrypt(iv,msg):
21
cipher = AES.new(key,AES.MODE_CBC,iv)
22
decrypted = cipher.decrypt(msg)
23
decrypted = unpad(decrypted)
24
return decrypted
25
26
def send_msg(msg):
27
iv = '2jpmLoSsOlQrqyqE'
28
encrypted = encrypt(iv,msg)
29
msg = iv+encrypted
30
msg = base64.b64encode(msg)
31
print msg
32
return
33
34
def recv_msg():
35
msg = raw_input()
36
try:
37
msg = base64.b64decode(msg)
38
assert len(msg)<500
39
decrypted = decrypt(msg[:16],msg[16:])
40
return decrypted
41
except:
42
print 'Error'
43
exit(0)
44
45
def proof_of_work():
46
proof = ''.join([random.choice(string.ascii_letters+string.digits) for _ in xrange(20)])
47
digest = SHA256.new(proof).hexdigest()
48
print "SHA256(XXXX+%s) == %s" % (proof[4:],digest)
49
x = raw_input('Give me XXXX:')
50
if len(x)!=4 or SHA256.new(x+proof[4:]).hexdigest() != digest:
51
exit(0)
52
print "Done!"
53
return
54
55
if __name__ == '__main__':
56
proof_of_work()
57
with open('flag.txt') as f:
58
flag = f.read().strip()
59
assert flag.startswith('hitcon{') and flag.endswith('}')
60
send_msg('Welcome!!')
61
while True:
62
try:
63
msg = recv_msg().strip()
64
if msg.startswith('exit-here'):
65
exit(0)
66
elif msg.startswith('get-flag'):
67
send_msg(flag)
68
elif msg.startswith('get-md5'):
69
send_msg(MD5.new(msg[7:]).digest())
70
elif msg.startswith('get-time'):
71
send_msg(str(time.time()))
72
elif msg.startswith('get-sha1'):
73
send_msg(SHA.new(msg[8:]).digest())
74
elif msg.startswith('get-sha256'):
75
send_msg(SHA256.new(msg[10:]).digest())
76
elif msg.startswith('get-hmac'):
77
send_msg(HMAC.new(msg[8:]).digest())
78
else:
79
send_msg('command not found')
80
except:
81
exit(0)
82
83