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