Seis mordiscos

May 09 2022
Categoría: Criptografía Dificultad: EasyChallenge Autor: KNOXDEV Equipo: OsirisProtocol (https://ctftime.org/team/151343/#.

Categoría: Criptografía
Dificultad: Fácil
Desafío Autor: KNOXDEV
Equipo: OsirisProtocol (https://ctftime.org/team/151343/#.Ynh0zJJAj_s.link)

Aviso de desafío

¡Mi amigo me envió la bandera, pero está encriptada! Los escuché gritar algo sobre seis bocados... ¡pero no entiendo lo que quieren decir! ¿Puedes descifrar la bandera?

Texto cifrado: kwsbqhS} aYLH !WYg+kDIV0yp[k

Primeros pasos

Podría decirse que este desafío debería ser un paseo por el parque para un adicto a CTF y utiliza el tema común de los conocidos ataques de texto sin formato y xors. Para un novato, este desafío presenta un obstáculo único: cómo determinar qué cifrado se utilizó. Podemos utilizar la pista (y tal vez un poco de suerte) para comprender que los 6 bytes probablemente se usarán en una clave. Tener un conocimiento rudimentario de cifrados ayuda a resolver este desafío; sin embargo, podemos adivinar en función de una clave que usaremos alguna forma de cifrado de flujo en este caso XOR.

¿Qué es XOR?

OR EXclusivo (XOR), también conocido como disyunción exclusiva, es una forma de cifrado en la que se utiliza el operador xor bit a bit aplicado byte a byte entre una clave y el texto sin formato para crear el texto cifrado o entre el texto cifrado y la clave para producir el texto sin formato. texto.

La función XOR sigue las siguientes reglas que son útiles para comprender la lógica de este desafío:

A XOR A = 0 A XOR 0 = A
A XOR B = B XOR A (Propiedad conmutativa)
(A XOR B) XOR C = A XOR (B XOR C) (Propiedad asociativa)

Para nosotros, definamos: Ciphertext = PlainText XOR Key

La vulnerabilidad XOR

XOR en teoría es súper seguro si:

  1. Se utiliza una clave aleatoria desconocida
  2. No se conocen partes del texto.

Sabemos que Plaintext XOR CipherText = Key (ver prueba al final)

Aplicación de texto sin formato conocido

Recuerde que el formato de la bandera es sdctf{ (son 6 bytes que deberían actuar como otra pista).

Ahora apliquemos Plaintext XOR CipherText = Key para encontrar la bandera. Aquí hay un ejemplo de cómo funciona esto con nuestro primer valor:

Texto sin formato: s (Binario: 01110011)
Texto cifrado: k (Binario: 01101011)

01110011 XOR
01101011
— — — — — — —
00011000 (hexadecimal: 18)

Tenemos la primera parte de la llave. Podemos aplicar este mismo proceso a los siguientes 5 bytes o usar alguna herramienta más de alta tecnología.

Obtener la llave con algunas herramientas ordenadas

Cyberchef es una herramienta fenomenal si aún no la has usado antes. Configuremos nuestra receta para usar "XOR Brute Force". En el cuadro de entrada, pondremos el primer carácter (k). En XOR Brute Force, asegúrese de que la longitud de la clave esté configurada en 1 y que la cuna esté configurada en el texto sin formato conocido de s. La receta vuelve:

Clave = 18: s
Clave = 38: S

Seleccione 18 porque el formato de la bandera está en minúsculas. Repita este proceso con los siguientes 5 bytes para obtener la clave.

Clave = 18 13 10 16 17 13

Resolviendo el cifrado

Finalmente, tome la clave y el texto cifrado para obtener el texto sin formato. Usando CyberChef use XOR con la clave 18 13 10 16 17 13 y la entrada como el texto cifrado kwsbqhS} aYLH !WYg+kDIV0yp[k

Esto da: sdctf{KnOwN_PL1ANt3xT_A#acK} y problema resuelto.

Prueba de texto sin formato XOR CipherText = Clave

Recuperar texto sin formato XOR Key = CipherText
Sea texto sin formato = A Key = B y CipherText = C

Por lo tanto: A X O B = C

XOR A por ambos lados (Como ambos lados son iguales el resultado es el mismo): A XOR (A XOR B) = A XOR C

Aplicar propiedad asociativa: (A XOR A) XOR B = A XOR C

Aplicar A XOR A = 0: 0 XOR B = A XOR C

Simplifique 0 XOR B: B = A XOR C (Esto se debe a que 0 XOR 0 bit a bit es 0 y 0 XOR 1 es 1, por lo tanto, como 0 XOR B es B).

Finalmente, reemplace los valores: Key = Plaintext XOR CipherText.

© Copyright 2021 - 2022 | unogogo.com | All Rights Reserved