Power belongs to the people who take it

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

Sorry, this entry is only available in European Spanish. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

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 Comments

  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. Anonymous

    hello

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

© 2024 ironHackers

Theme by Anders NorenUp ↑