Power belongs to the people who take it

Resolviendo los retos básicos de Atenea (CCN-CERT) 2/3

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

¿Me ayudas a compatirlo?

6 comentarios

  1. Antonio

    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.

  2. Javicasais

    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.

    • Solrac

      A mi me pasa igual. No tengo idea

    • Mansercu

      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.

  3. ferleguidoor

    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!

  4. Anónimo

    hello

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

© 2024 ironHackers

Tema por Anders NorenArriba ↑