aes
1 minuto de lectura
Se nos proporciona esta salida:
Python 3.8.10 (default, Mar 15 2022, 12:22:08)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> from Crypto.Cipher import AES
>>> key = random.choice(open("rockyou.txt", "rb").readlines()[:10000]).strip()
>>> key = key.zfill(16)
>>> cipher = AES.new(key, AES.MODE_ECB)
>>> cipher.encrypt(open("flag.txt", "rb").read().zfill(48))
b"\xd6\x19O\xbeA\xb0\x15\x87\x0e\xc7\xc4\xc1\xe9h\xd8\xe6\xc6\x95\x82\xaa#\x91\xdb2l\xfa\xf7\xe1C\xb8\x11\x04\x82p\xe5\x9e\xb1\x0c*\xcc[('\x0f\xcc\xa7W\xff"
Se trata del resultado de una consola de Python REPL. Lo que hace es coger una contraseña aleatoria de rockyou.txt
y la usa como clave para cifrar la flag con AES ECB. También tenemos el texto cifrado.
Solamente necesitamos coger las contraseñas de rockyou.txt
y realizar el descifrado hasta que encontremos una flag que se descifre bien (es decir, que contenga ictf{
):
$ python3 -q
>>> ct = b"\xd6\x19O\xbeA\xb0\x15\x87\x0e\xc7\xc4\xc1\xe9h\xd8\xe6\xc6\x95\x82\xaa#\x91\xdb2l\xfa\xf7\xe1C\xb8\x11\x04\x82p\xe5\x9e\xb1\x0c*\xcc[('\x0f\xcc\xa7W\xff"
>>> keys = open("rockyou.txt", "rb").readlines()[:10000]
>>> from Crypto.Cipher import AES
>>> for key in keys:
... try:
... cipher = AES.new(key.strip().zfill(16), AES.MODE_ECB)
... pt = cipher.decrypt(ct)
... if b'ictf{' in pt:
... print(key, pt)
... break
... except:
... pass
...
b'biscuit\n' b'0000000000000000000ictf{d0nt_us3_w3ak_k3ys!!!!}\n'