Buenas de nuevo, vamos a seguir resolviendo los retos básicos de https://atenea.ccn-cert.cni.es
Esto es la segunda parte, si queréis ver los primeros 6 retos id a: https://ironhackers.es/writeups/resolviendo-los-retos-basicos-de-atenea-ccn-cert-1-3/
Reto 7 – XOR
Enunciado:
Una cadena de texto puede ser cifrada aplicando el operador de bit XOR sobre cada uno de los caracteres utilizando una clave. Para descifrar la salida, sólo hay que volver a aplicar el operador XOR con la misma clave.
Usa la clave encryptXOR para descifrar el siguiente mensaje:
UGFzc3dvcmQ6IHhvFzYMACEfBiAgIA==
Solución:
Para solucionar este reto basta con pasar a hexadecimal ambas cadenas y usar cualquier herramienta online que nos permita realizar operaciones bit a bit como XOR
Como veis lo único que nos faltaría seria pasar este resultado a ascii.
Vamos a resolverlo ahora con python:
#!/usr/bin/python3 import base64 key = 'encryptXOR' cod = 'UGFzc3dvcmQ6IHhvFzYMACEfBiAgIA==' code = base64.b64decode(cod).hex() key = key.encode('utf-8').hex() result = hex(int(code,16) ^ int(key,16)).split("x")[1] print(bytes.fromhex(result).decode('utf-8'))
Reto 8 – Entropia
Enunciado:
Para pasar este reto deberás encontrar cuál de las imágenes adjuntas tiene la mayor entropía. La solución al reto es el nombre del fichero de la imagen (incluyendo la extensión) en el formato habitual de la plataforma (por ejemplo: imagen25.jpg).
Solución:
Para resolver este reto podríamos buscarnos un calculador web que nos devolviera el valor de la entropía de cada imagen.
Pero con una pequeña búsqueda encontramos un script de python que nos la calcula:
https://www.kennethghartman.com/calculate-file-entropy/
Vamos a hacer unas pequeñas modificaciones para que recorra todo el directorio en vez de ir de uno en uno y que ademas nos nuestre solo el de mayor entropía:
#!/usr/bin/python # file_entropy.py # # Shannon Entropy # FB - 201011291 import sys import math import os import hashlib # read the whole file into a byte array def entropy(name): f = open(name, "rb") byteArr = map(ord, f.read()) f.close() fileSize = len(byteArr) # calculate the frequency of each byte value in the file freqList = [] for b in range(256): ctr = 0 for byte in byteArr: if byte == b: ctr += 1 freqList.append(float(ctr) / fileSize) # Shannon entropy ent = 0.0 for freq in freqList: if freq > 0: ent = ent + freq * math.log(freq, 2) ent = -ent entropyList[name] = ent entropyList = {} for file in os.listdir("entropy"): entropy("entropy/"+file) max_value = max(entropyList.values()) max_keys = [k for k, v in entropyList.items() if v == max_value] maxEntr = max_keys[0].split('/')[1] print ( maxEntr + " : " + str(max_value) ) print "flag{"+hashlib.md5(maxEntr).hexdigest()+"}"
Reto 9 – Magic number
Enunciado:
Para superar el reto, debes averiguar qué magic number tiene el fichero sin extensión proporcionado (con letras mayúsculas. Por ejemplo: 0011DEADBEEFC0FFEEBABEFF)
Solución:
Para ver el magic number de un fichero basta con mirar la primera linea en hexadecimal del fichero, para esto usaremos xxd
Además linux incorpora un comando file que nos ayuda a identificar el tipo de fichero
# Fichero a analizar: magicnumber xxd magicnumber | head -n 1
Reto 10 – Strings
Enunciado:
Para superar este reto deberás averiguar cuál es el dominio al que se intenta conectar el binario de Linux que se adjunta (por ejemplo: www.dominio.com).
Solución:
Tal y como dice el enunciado debemos usar el comando strings y buscar el nombre de dominio, para facilitar la búsqueda vamos a usar grep:
strings lookinside-64d0177d2ee53c67e46d5748183d0098 | grep www*
Reto 11 – Metadatos
Enunciado:
Los metadatos y los datos ocultos pueden contener información sensible, y esto representa un riesgo que las organizaciones y sus usuarios deben entender. Este riesgo está asociado a la posibilidad de revelar información sensible cuando el documento sea compartido y salga fuera de su dominio de seguridad.
Para superar este reto deberás averiguar quién es el autor del documento PDF.
Solución:
Para ver los metadatos de un fichero podemos utilizar ‘exiftool’, para solucionar este reto bastata con ver el autor:
exiftool LoremIpsum-1e40fa12a5e7ce47ebcaaace81f6fd06.pdf
Reto 12 – Metadatos 2
Enunciado:
Para superar este reto deberás averiguar el modelo de la cámara con la que se tomó la fotografía (la solución es sólo el modelo, sin incluir la marca, y todo en mayúsculas)
Solución:
Tal como en el anterior reto, con usar exiftool nos bastara para solucionarlo:
exiftool balloon-fc416bf4b40d82bcaa2b941bd38a42cd.jpg
Hola buenas me gusta este mundillo de los ordenadores, y me gustaría aprender mas sobre su manejo y todo lo que tiene escondido , es na pasada.
Hola buenas tardes, tengo una pregunta, en el ejercicio de XOR cuando paso el mensaje a hex me sale esto (55 47 46 7a 63 33 64 76 63 6d 51 36 49 48 68 76 46 7a 59 4d 41 43 45 66 42 69 41 67 49 41 3d 3d 0a) y a el le sale (50 61 73 73 77 6f 72 64 3a 20 78 6f 17 36 0c 00 21 1f 06 20 20 20) alguien me puede explicar porque es diferente si tendria que salir lo mismo ?. Al pasar la contraseña a Hex si me sale la misma.
A mi me pasa igual. No tengo idea
Hola.
El ejercicio está mal, ya que tanto el mensaje a descrifrar como la key, no se corresponden, con lo que hay en la web de Atenea.
Usa la clave encryptXORkey para descifrar el siguiente mensaje:
HQERKhYCLDc9KgQX.
Con esos datos, la respuesta siempre será errónea.
Pero si pones la solución que explican aquí, será válido dicho resultado.
Hola. Para resolver el reto 8 Entropía, es necesario tener instalado Python 2.7.13. El código no me funcionó cuando corrí la última versión de Python a la fecha de este comentario (18/12/2020).
Gracias!
hello