SITIS CTF: cómo el sello ayudó a CTF a ganar



El 27 de enero de 2019, se llevó a cabo el evento SITIS CTF, una competencia de seguridad de la información para estudiantes de escuelas y universidades. Alrededor de 80 jóvenes especialistas y un sello participaron en el torneo. El juego se realizó en la oficina de Jet Infosystems; el joven equipo de SITIS fue el organizador de las tareas y la plataforma técnica.


CTF


El formato del evento es CTF (peligro) basado en tareas, en el cual los jugadores resuelven tareas (tareas) de varios niveles de dificultad. La respuesta puede ser un conjunto de caracteres o una frase arbitraria. Por cada respuesta correcta (captura de bandera), los participantes reciben una cierta cantidad de puntos. El acceso a parte de las tareas se abre solo después de la decisión de las anteriores.


Los participantes del juego CTF lograron resolver casi todas las tareas, pero dos de ellos no se rindieron: muy probablemente, afectados por la fatiga: los jóvenes piratas informáticos y piratas informáticos "rompieron" la tarea y el cerebro de la mañana a la tarde.


Misiones


PPC


Cadena (200 puntos)
Los participantes recibieron un conjunto de píxeles, especialmente convertidos a hexadecimal, entre los cuales había una cadena de píxeles clave. Al traducir hexadecimal en una imagen, puede obtener una imagen con una bandera.


Pintura (200 puntos)
Se proporcionó a los participantes un archivo que contenía aproximadamente 1.600 imágenes monocromas que representaban números de 75 bytes de tamaño. La forma de obtener la bandera es agregar números en imágenes usando ceros como separadores y traducir la lista resultante en una representación de cadena.


Kotorova (250 puntos)
Vea la sección "Vraytapy".


Música (300 puntos)
Vea la sección "Vraytapy".


REVERSA


Razminka (75 puntos)
Los participantes necesitaban las habilidades iniciales de reversión, la contraseña se almacenaba como variables char en la clase principal.


Mi creacion (250 puntos)
Vea la sección "Vraytapy".


CRIPTO


Sueño extraño (100 puntos)
Vea la sección "Vraytapy".


Hmmmmmmm (150 puntos)
Vea la sección "Vraytapy".


Alegría


a (25 puntos)
Los participantes debían encontrar una bandera en letra pequeña en uno de los marcos en un gif con sellos.


Copos de nieve (75 puntos)
Los participantes recibieron un archivo html con código JavaScript ofuscado. Era necesario hacer una bandera con los símbolos que caían lentamente en la página.


Marcar entre nosotros (100 puntos)
Se adjuntó una foto a la tarea.





En primer lugar, todos se apresuraron a buscar una bandera en la imagen. Hurgando en él y asegurándose de que la bandera no esté allí, valió la pena volver a la descripción y el título de la tarea y leerlos cuidadosamente nuevamente. El hecho es que en la competencia en sí, en las puertas de las salas donde se celebró el evento, había pegatinas inusuales con códigos QR.





Después de haber reunido todas las partes, fue posible obtener la frase HRGRH {9I3371M95_7i4e3o3i}. La bandera obviamente se traza aquí, pero está encriptada. No se dieron muchos puntos para la tarea, por lo que sería lógico que el cifrado no sea complicado. Mediante una búsqueda de las principales opciones, se podría concluir que Atbash estaba aquí. Indicador SITIS {9R3371N95_7r4v3l3r}.


STEGO


¿Error o característica? (50 puntos)
Se adjuntó un documento de texto a la tarea, en el que, a primera vista, solo había 2 líneas. Sin embargo, al mirar más de cerca y resaltar el texto, se pueden ver muchos espacios y pestañas en 39 líneas. Aquellos que ya se han encontrado con esto no deberían haber tenido problemas para obtener una bandera.


Poesía (75 puntos)
Los participantes recibieron una foto de un cuadro de la película "El juego de la imitación". Era necesario encontrar la imagen original y compararla, y de los diferentes píxeles para hacer una nueva imagen con versos de Byron, cuyo apellido era la bandera.


Historia


Bienvenido (50 puntos)
Droides en todas partes (100 puntos)
Es hora de ventilar (105 puntos)
La ayuda nunca es superflua (125 puntos)
Necesitas jugar un ciervo (150 puntos)
Primera prueba de campo (175 puntos)
La diversión comienza p1 (200 puntos)
La diversión comienza p2 (205 puntos)
Jefe final (300 puntos)


Dentro del bloque, los participantes tuvieron que desentrañar varias tareas relacionadas.


El objetivo era proporcionar a los participantes un archivo con varios archivos, pero necesitaban encontrar las coordenadas en la metainformación. La sugerencia dice que el autor tiene cretinismo topográfico, por lo que debe cambiar la latitud y la longitud y obtener una bandera en forma del nombre del lago.


En la segunda tarea, fue necesario encontrar un archivo con una bandera en el sistema de archivos. También hubo un enlace que abrió el acceso a 3 tareas. Luego, la bandera tenía que encontrarse en la página guardada en el archivo web. En las siguientes tareas, los participantes tuvieron que encontrar un pirata informático popular a partir de un video en Youtube (su nombre y apellido eran la bandera), buscar su cuenta en algún foro de "piratas informáticos", donde había una bandera y una pista para hackear el sitio. Luego fue necesario llevar a cabo un ataque en el sitio web de CTfOS (encuentre la contraseña hash en la cookie md5 y use el servicio para obtener la contraseña original, la bandera era el par admin + contraseña).


Luego, tenía que conectarse a través de ssh, ver el archivo, descargarlo a través de sftp, elegir una contraseña, descubrir que en lugar de la imagen dentro había un archivo y obtener una bandera. Al final, el número de puerto era "65530", era necesario seleccionar una contraseña (diccionario rockyou), luego formatear el sistema y proporcionar evidencia a los organizadores.


Sitis


  1. INSTA (100 puntos)
    Para tener éxito, tenía que hacer una publicación de Instagram con una foto CTF y hashtags temáticos.
  2. MINI-POLL (125 puntos)
    Como parte de la tarea, los participantes aprobaron una mini encuesta.

Vraytapy


Aquí hay algunos análisis de tareas interesantes de los participantes de CTF.




Kotorova




Kotorova, énfasis en la tercera "o". Tarea para 250 puntos de 300 posibles. El jugador recibe una imagen (ver arriba) y un texto extraño que consiste en las palabras "Miu", "Miau", "FRR" y "Cara".



Por análisis visual de la imagen (y curiosidad en el pasado), entendemos que el texto fuente no es más que el lenguaje COW con operadores reemplazados. Después de hacer los siguientes reemplazos, puede obtener un mensaje de "vaca": Miu => MOo, Meow => MoO, RDF => OOO, Lik => Moo. Ejecute el código resultante a través del intérprete en línea y obtenga el codiciado token:






Un sueño extraño ...


Curiosamente, pero la idea de esta tarea realmente vino a la mente de uno de los organizadores después de despertarse una fría mañana de enero. Descripción de la tarea:


Soñé con una tarea aquí, verificar la solvencia pzh: 3

Por el nombre y la descripción, es fácil adivinar que la referencia va a Dmitry Ivanovich, es decir, Mendeleev. Ahora veamos qué tenemos en el archivo:


0x53 0x49 0x54 0x49 0x53 0x7b 0x6d 0x65 Mx3c 0x65 0x6c 0x65 0x65 Mx17 0x5f 0x65 Mx21 Mx27 0x5f Mx4b Mxf Mx39 Mx3a 0x6d 0x65 Mx7 Mx75 0x7d 

Hex, pero con extraños prefijos "M" en algunos lugares.
Traducimos HEX a ASCII e inmediatamente, a primera vista, aparece una bandera rota:




Habiendo traducido solo Hex con el prefijo "M" al sistema decimal, obtenemos la siguiente secuencia:


 60 23 33 39 75 15 57 58 7 117 

Recordamos la descripción.




Combina ASCIInut HEX con Mendeleev y obtén la bandera.




Musica


Pensamos en cómo traducir el texto en notas durante mucho tiempo, y finalmente se realizó la idea:




En primer lugar, se decidió traducir el texto en una representación numérica usando ord ()
"awsm_msic"
Al principio se deja un espacio intencionalmente para que los últimos bits no estropeen el último carácter.


 ord(): [97, 119, 115, 109, 95, 109, 115, 105, 99, 32] 

Luego traducirlo a bytes:


 >>bin(): ['01100001', '01110111', '01110011', '01101101', '01011111', '01101101', '01110011', '01101001', '01100011', '00100000'] 

Concatenar:


 concatenate:01100001011101110111001101101101010111110110110101110011011010010110001100100000 

Divide el texto resultante en caracteres de tres (trillizos). Dado que se pueden codificar 8 números en el rango de 000 a 111, utilizaremos un conjunto de notas de las octavas C5 y C6, que consta de 8 notas:


 ['011', '000', '010', '111', '011', …] ["C5","D5","E5","F5","G5","A5","B5","C6"] 

Solo queda un poco, traducimos los trillizos nuevamente al sistema de números decimales y componimos una nueva lista, basada en los índices de las notas:


 ['F5', 'C5', 'E5', 'C6', 'F5', 'A5', 'B5', 'F5', 'F5', 'F5', 'E5', 'A5', 'C6', 'A5', 'A5', 'A5', 'F5', 'G5', 'B5', 'B5', 'G5', 'A5', 'G5', 'F5', 'D5', 'C5'] 

Escribimos un archivo MIDI, si lo desea, puede usar cualquier instrumento para dar un sonido a las notas.






Reverse 250


En primer lugar, desarmamos el programa (usando la IDA), lo convertimos a C y buscamos líneas sospechosas:




Podemos concluir que v39 es una bandera que en el estado falso nos dará la cadena que estamos buscando.
Observamos dónde cambia la bandera:




Mirando este código, es difícil determinar con qué variables debemos hacer cambios para que se disminuya la bandera. Al hacer doble clic en la variable Buffer, llegamos a la ventana para ver la pila de programas. Debemos entender que Buffer es una cadena (ya que podemos ingresar cualquier cosa en el programa), lo que significa que estableceremos este tamaño para que todas las variables var_xxx estén en él:




Leer el código se ha vuelto mucho más fácil:




Ahora considere el bloque cambiando los caracteres de nuestra cadena.




Analizamos:


  1. v38 es la suma de los valores de las variables simbólicas (por la condición 1231).
  2. El elemento de 7 líneas (Buffer_6) se desplaza 7 bits, es decir es imposible revertir la conversión (no importa qué número se convierta aquí, el resultado será 0).
  3. El bucle con las variables v35, v41, v34 se usa para desviar la atención (copia el valor de una línea a otra para guardar la traducción correcta de binario a hexadecimal, ya que cambiamos la línea original).
  4. El ciclo con los primeros tres caracteres es una simple multiplicación por 2.
  5. Del cuarto al sexto es un poco más difícil. Es necesario resolver la ecuación (para el cuarto carácter se verá así: (x * 2) ^ 57 = 95). Aunque XOR es una operación irreversible, es bastante posible seleccionar un valor utilizando la enumeración, e incluso con habilidades iniciales, esto se puede completar en unos segundos.
  6. Los cambios han terminado, volvemos al bloque de condiciones y elaboramos ecuaciones simples para los elementos restantes.

Tenemos (x - desconocido, 0 - conocido): 000000x00000x. La suma de los valores = 1231. Resta los números conocidos de este número y obtén que la suma de los números desconocidos = 164. Por lo tanto, tomamos cualquiera de los dos caracteres cuya suma será 164. Según el significado de la primera palabra, deja que sea 'R' y 'R'.




Después de ingresar la clave, obtendremos nuestra frase deseada.




Hmmmmm


Al abrir la tarea, obtenemos dos archivos: data.txt y Hmmmm.png:






Obviamente, la primera línea en el archivo de texto es algo de codificación. De hecho, esta es una Base64 ordinaria, aunque sin el signo "=" peculiar al final.


Habiendo decodificado, vemos números sospechosamente similares a los grados:




Ya en este punto, uno puede adivinar que estamos hablando de una red y su ángulo de inclinación. Pero, ¿dónde está la plantilla en sí? Por supuesto, todavía tenemos un conjunto binario de números en el que el número abrumador es 1 y solo 8 ceros.


Probar una hipótesis es muy simple. El átomo dice que tenemos 256 caracteres. Tanto como en la tabla de la foto, y de esto también podemos adivinar que el enrejado es cuadrado.




Probablemente la mejor manera es usar Excel para delinear la cuadrícula. Entonces hagámoslo.


En realidad, aquí está:




Supongamos, y no en vano, que esta es la posición dada de la red en relación con 0 grados. Luego, usando las manipulaciones en Excel o Photoshop, escriba los números desde las ventanas:




¿Qué tipo de números pueden ser estos? Hexadecimal ... ¡Hex, por supuesto!




Hurra, estamos en el camino correcto, queda por girar la cuadrícula y escribir los números restantes:


Resulta que la secuencia deseada está en celdas azules, es decir:


 53 49 54 49 53 7b 43 61 72 64 61 6e 6f 5f 69 73 5f 70 72 6f 75 64 5f 6f 66 5f 79 6f 75 5f 21 7d 



El resultado es: SITIS {Cardano_is_proud_of you !}


Sí, sí, esto es solo una red de Cardano, propuesta por él en el siglo XVI. Uno de los algoritmos criptográficos más simples.


Sin embargo, a pesar de la aparente simplicidad y evidencia de la tarea, solo un equipo fue capaz de resolverla: "10x", incluso a pesar de tales sugerencias:





Miembros


Los competidores eran experimentados CTF'ers y principiantes.


1er lugar, MLPWN:


A mi equipo le gustó. En cuanto a las tareas, no fue muy difícil para nosotros, como un equipo bastante experimentado, resolverlas, fue notable que las tareas fueron diseñadas para principiantes, no conocieron tanto la idea de una tarea cruel difícil, cuánto mensaje interesar, lo cual es muy bueno. En cuanto a la organización, todo estaba al más alto nivel, que, para ser sincero, no siempre se encuentra en los centros escolares. ¡Buena suerte al equipo de SITIS en la organización del siguiente SITIS CTF!

2 lugar, 10x


3er lugar, Inview:


Esta fue mi primera visita a CTF, ya que antes solo participaba en CTF en San Petersburgo. Las tareas eran bastante interesantes y difíciles, pero el único problema por el que a menudo era simple fue la caída de Internet. Me encantaría venir el año que viene y espero que SITIS CTF solo mejore. Les deseo éxito a los organizadores tanto en las competiciones como en la organización de tales eventos.



El ganador fue el equipo de MLPWN: My Little Pony (Pwnie).




Entre los participantes había bastantes chicas =)




La pelea fue seria, a veces se requirió la ayuda de los organizadores:




Organizadores


El evento está organizado por el joven equipo SITIS . Los socios de CTF fueron Jet Infosystems (socio general de SITIS CTF ), Group-IB, Elefus, BCS y FSBI Research Institute Voskhod.






Para aquellos que vinieron por un sello. Fue visto en el equipo ganador. Creo que fue una señal.


LV: diga algunas palabras sobre su mascota - seal =)

litio: de hecho, esta no es exactamente nuestra mascota c: reunimos este equipo hace relativamente poco tiempo, antes de eso (bueno, casi todos) estaban en equipos diferentes o no tenían un equipo en absoluto. Theodore estaba en el equipo SEAL, cuya mascota es el sello. Theodore lo arrastró. De hecho, esperábamos que trajera su pony, que ganó en Sirius como premio Pwnie)



Sello dice: no seas un sello, juega CTF, ¡aumenta tus habilidades!


La publicación conserva la puntuación y la ortografía de los miembros del CTF.

Source: https://habr.com/ru/post/437996/


All Articles