· Manuel López Pérez · writeups · 4 min read
Resolviendo los retos básicos de Atenea (CCN-CERT) 2/3
Segunda parte del write-up de los retos básicos de Atenea (CCN-CERT): XOR, entropía, magic numbers, strings en binarios y análisis de metadatos con exiftool.

Resolviendo los retos básicos de Atenea (CCN-CERT) 2/3Buenas 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
