def oracle(msg): key = generate_key() iv = generate_key() request = build_request(msg) compressed_request = zlib.compress(request) encrypted_request = aes_cbc.infra.encrypt_manual(pad_pkcs_7(a2h(compressed_request)), key, iv) return len(encrypted_request)
def encryption_oracle(plaintext): global KEY global prefix if KEY is None: KEY = crypty.generate_key() if prefix is None: # I am getting integer between 0 to 100 prefix = crypty.generate_key(key_size=randint(0, 100)) print "[*] Using Prefix of size : %d" % (len(prefix) / 2) plaintext = crypty.pad_pkcs_7(prefix + plaintext + crypty.convert_b64_to_hex(suffix)) return aes_ecb.infra.encrypt(plaintext, KEY)
def encrypter(): plaintext = crypty.convert_b64_to_hex(plaintexts[randint( 0, len(plaintexts))]) #print plaintext.decode("hex") iv = crypty.generate_key() ciphertext = aes_cbc.infra.encrypt_manual(plaintext, key, iv) return (iv, ciphertext)
def solve(): filename = "test.txt" key = crypty.generate_key() correct_hash = hmac.hmac(key.decode("hex"), open(filename, 'r').read()).decode("hex") print "[*] Key : %s" % (correct_hash.encode("hex")) guessed_hash = ["\x00"] * 20 for i in xrange(20): found_byte = b'' max_timetaken = 0 for c in xrange(256): guessed_hash[i] = chr(c) timetaken = 0 for j in xrange(5): t1 = time.time() insecure_compare("".join(guessed_hash), correct_hash) t2 = time.time() timetaken += (t2 - t1) * 1000 avg_timetaken = timetaken / 5.0 if avg_timetaken > max_timetaken: found_byte = chr(c) max_timetaken = avg_timetaken print "Found next byte : %s" % (found_byte.encode("hex")) guessed_hash[i] = found_byte print "[+] Found Key : %s" % ("".join(guessed_hash).encode("hex")) return
def step3(msg, B): p = A_knows['p'] a = A_knows['a'] A_knows['B'] = B k1 = getSHA1(format(pow(B, a, p), 'x'))[0:32] A_knows['k1'] = k1 A_knows['msg'] = msg iv = crypty.generate_key() return aes_cbc.infra.encrypt_manual(msg.encode("hex"), k1, iv) + iv
def step4(msg): p = B_knows['p'] A = B_knows['A'] b = B_knows['b'] k2 = getSHA1(format(pow(A, b, p), 'x'))[0:32] B_knows['k2'] = k2 B_knows['msg2'] = msg iv = crypty.generate_key() return aes_cbc.infra.encrypt_manual(msg.encode("hex"), k2, iv) + iv
def step3_1(ciphertext, inject=None): msg = aes_cbc.infra.decrypt_manual(ciphertext[0:-32], E_knows['k1'], ciphertext[-32:]) E_knows['msg'] = msg.decode("hex") iv = crypty.generate_key() if inject: E_knows['inject'] = inject msg = inject.encode("hex") return aes_cbc.infra.encrypt_manual(msg, E_knows['k2'], iv) + iv
def step3_1(ciphertext, inject=None): if inject: msg = aes_cbc.infra.decrypt_manual(ciphertext[0:-32], getSHA1(format(0, 'x'))[:32], ciphertext[-32:]) E_knows['msg'] = msg.decode("hex") iv = crypty.generate_key() if inject: E_knows['inject'] = inject msg = inject.encode("hex") return aes_cbc.infra.encrypt_manual(msg, getSHA1(format(0, 'x'))[:32], iv) + iv else: return ciphertext
#!/usr/bin/python """ Main Code """ import crypty from crypty.ciphers import cbc as aes_cbc key = crypty.generate_key() iv = crypty.generate_key() def encrypter(userdata): userdata = userdata.replace(";", "%3B").replace("=", "%3D") prefix = "comment1=cooking%20MCs;userdata=" suffix = ";comment2=%20like%20a%20pound%20of%20bacon" plaintext = prefix + userdata + suffix ciphertext = aes_cbc.infra.encrypt_manual(crypty.a2h(plaintext), key, iv) return ciphertext def decrypter(ciphertext): plaintext = aes_cbc.infra.decrypt_manual(ciphertext, key, iv) return plaintext.decode("hex").find(";admin=true;") != -1 def solve(): ciphertext = encrypter('A' * 16) blocks = crypty.get_blocks(ciphertext) old_cipher_block = blocks[1] new_cipher_block = crypty.xor_hex_strings(
#!/usr/bin/python """ Main Code """ from crypty.hash import sha1 import struct import crypty from random import randint key = crypty.generate_key(key_size=randint(0, 40)).decode("hex") def validate(message, key, digestMAC): return sha1.authenticate(message, key, digestMAC) def pad(message): l = (len(message)) * 8 message += b'\x80' message += b'\x00' * ((56 - (len(message) % 64)) % 64) message += struct.pack('>Q', l) return message def solve(): message = "comment1=cooking%20MCs;userdata=foo;comment2=%20like%20a%20pound%20of%20bacon" hash = sha1.sha1_hexdigest(key + message) hasher = sha1.SHA1(crypty.get_sha1_regs(hash)) hasher.update(";admin=true;", len(pad(key + message) + ";admin=true;")) new_hash = hasher.hexdigest()
def encrypt_profile(profile): global key if key is None: key = crypty.generate_key() ciphertext = ecb_cipher.infra.encrypt(crypty.pad_pkcs_7(crypty.a2h(profile)), key) return (key,ciphertext)
def encryption_oracle(plaintext): global KEY if KEY is None: KEY = crypty.generate_key() plaintext = crypty.pad_pkcs_7(plaintext+crypty.convert_b64_to_hex(suffix)) return aes_ecb.infra.encrypt(plaintext, KEY)