예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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
예제 #8
0
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
예제 #9
0
#!/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(
예제 #10
0
#!/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()
예제 #11
0
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)
예제 #12
0
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)