Saludos a todos los habrachitateli. Han pasado tres semanas desde que
propuse a aquellos que desean resolver mi CTF y, creo, es hora de publicar el análisis de tareas. Según mi propia experiencia, sé que es una pena estar en una situación en la que pasé mucho tiempo en una tarea, pero no encontré una solución, así que publico el análisis de las tareas. Las soluciones se dividen en pasos y se ocultan debajo de un spoiler para que después de cada paso pueda intentar resolver el problema usted mismo, superando un momento difícil.
XT_CTF_01XT_TASK_101Paso 1Abra el archivo y vea los nombres largos de las carpetas. La última carpeta contiene archivos, pero sin una contraseña, su contenido no está disponible.
Escribimos los nombres de las carpetas:
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
2346ad27d7568ba9896f1b7da6b5991251debdf2
e3cbba8883fe746c6e35783c9404b4bc0c7ee9eb
bef21e9bfcf9fab0a5aebd46a735efe5434da96b
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
Conducimos las secuencias a Google y descubrimos rápidamente que esto es sha1 de las palabras:
password
hash
1000
letters
a
Poniendo todo junto, asumimos que la contraseña es un hash de 1000 letras 'a'. Si se usó sha1 para palabras, entonces lo intentaremos aquí: 291e9a6c66994949b57ba5e650361e98fc36b1ba. Extraemos los archivos, asegurándonos de que la contraseña sea correcta.
Paso 2El examen de los archivos muestra que todos están compuestos de acuerdo con un principio más o menos general: el nombre del formato xt + número, el contenido de un par de líneas, donde el primero son algunas letras y el segundo es una secuencia de caracteres hexadecimales. Es bastante poco interesante considerar las secuencias hexadecimales, ya que contienen 79 caracteres cada una (a excepción del archivo xt121785230414240585522142219912, donde hay 58 de ellas): definitivamente no son hashes y no están codificados.
Como es igual en todas partes y hay menos en un solo archivo, se puede suponer que todas las secuencias hexadecimales deben combinarse, y la parte que es más pequeña es solo la última parte. Queda por entender el orden. Era posible jugar con los nombres, pero no obtener nada interesante, pero si presta atención a las primeras líneas de los archivos, también puede encontrar un patrón utilizando la mirada.
Aquí, indicaré algunas líneas: he, li, n, o, ne, mg, si, ca, cu, zn, br, kr, ag ...
Cuando están cerca, es mucho más fácil reconocer la designación de elementos químicos en ellos. Abrimos la tabla periódica y recopilamos la secuencia hexadecimal en un archivo (hay 53 archivos en total, este es el número de la última parte con el símbolo i, que corresponde a Yod, 53 elementos).
El resultado es un archivo PNG con un rectángulo verde.
Paso 3Es poco probable que los metadatos estén contenidos en el archivo en forma clara, ya que vemos todos los bytes en la representación hexadecimal. Por lo tanto, trabajaremos con la imagen misma. Puede notar (no con el ojo, por supuesto, sino con herramientas) que realmente se usa más de un color. Usaremos el relleno y veremos la guía del siguiente paso.

Paso 4Hash has1 sha1 todos los nombres de archivo y los organizamos según el orden del paso anterior.
696e7400b8a8c7da1c52e63550ddfdf8ae03be73
206d6100f4eb7c768890e8502db2bdeb81718301
696e2800f1c5c0df7676667ffca16856e808f9dd
297b69008e0d05b67df33c751da3c6f17a3fdb9d
6e742000bf96cea16e609731aa7397ac2b9f7b15
613d3400d2fedbf43ad7c43d678382d2ef83dde8
36303900b909f396c69c6d47ccb623cc83d5e2ea
313132007f6fdde9d3abad5545f44b2d2661b0be
3b696e0002582f22cab7aeaf730680b87780279a
74206200267e505a621cf264e303d3df63222fa7
3d343600ac031f166103b5319a273a867d5247ae
36393700d9e521b0e0d488b47fde51e5f5f9650d
37323b00bdf3caa241b2936f0355ad89e420389c
696e7400a1f9f8e62cd64c8e25d852e433bda80c
20633d009932d3b69b7a74296c7b75894bcddbc1
373639000ca31548a80fe28adf263bbe89f03069
33393400f56920f247d4d66798bb2c54e3db668c
373b6900222283ee79a5e7e3e79d55d4b159ffb1
6e742000fac60ac1f78aa90201e98b30a9c4adbc
643d3700b55bc0dda8bd748983716018b29fbd6f
38323300176db95a8aa4aaf1770346c353fd4753
32313400644e234a3899bd84e9f7d61a12bfecab
3b696e00654b4b7d8fb3b022777c6346342eba91
742065009720d2693f833788e69a6641e8de22f6
3d363800b1e40956ec8ca6a64013c8a651eff0f7
3435340008b5419f5139553c85b605009e3fb343
38393b004e5d66b6980c7cf14dc9bf0acf09e444
696e7400e648ffad4cde46b4d845f1ffad075da5
20663d00b9bdab8cb8721581f5aa8a2c2522d9de
3334330054fb4abaf144e818ec1199b7b4ffec47
34353900378490c3ba53a356327af1bbb2d2c8b0
313b69008803024e711baf3695402d3a13e0c905
6e7420006434f491ab51a923995a3daf56a65f5e
673d3800c5198ae1565cc5744d23ac492f6d2506
3231380000217a2c380bf9c9a6e122b1c01e90ea
373339003ef4f423f0d9c54ea5d8fbe4d8bf518c
3b70720073caad02c9cba60debf81f72c0ac23ad
696e7400d9ddb857a7608947aae60ed6d054c039
6628220061a3a81dcc20ce43903a18cea28b77db
2573250065285f647ed3e22a9233974ac24509a1
73257300678138427cc07ee072c987583db2fc5e
25732500d183d5303ed6bda0606eb5e4ccc1e7c8
73257300c5e9d7bfdb76b5fee122fe57bc8aa81a
25735c003675c4f732d95ae6a0d9bcc6769f94ca
6e222c0088503423d1f56148bbf2573a6e2e0518
26612c007c8d1d6b90d252fa7b2084bd8695a8f9
26622c00ec96a4edbdeb286484af38395a3fc928
26632c004a1db36cdef743283e6bc853b6995555
26642c00dd66db502138413e272deb2da78d4f57
26652c00bb1785b4e41444da4230b602f1860557
26662c00e739c24f55c0899b8eae2a948622c7d7
26672900f4b4843d0056571d293bec879cd1968f
3b7d20006750ebb44ffd784dc8afdd5b0f76816a
Si hace todo con bolígrafos, notará rápidamente que 4 bytes son siempre cero, y a la izquierda hay algunos caracteres impresos. Los dejamos solo, los recogemos en una línea.
Obtenemos la siguiente línea:
int main(){int a=4609112;int b=4669772;int c=7693947;int d=7823214;int e=6845489;int f=3434591;int g=8218739;printf("%s%s%s%s%s%s%s\n",&a,&b,&c,&d,&e,&f,&g);}
Ejecutamos este código en C , como resultado obtenemos una bandera. Verificamos el hash para asegurarnos una vez más: sí, esta es la bandera deseada.
XT_TASK_102Paso 1Abra el archivo e inmediatamente vea los nombres de los archivos en el hexadecimal. El contenido del archivo no está disponible porque se requiere contraseña. Comencemos torciendo los nombres.
Todos los nombres tienen la misma longitud, excepto un archivo con la extensión 64F00000 (es más corto). En general, las extensiones son extrañas, atípicas. Pero es bastante fácil notar que todos los archivos tienen diferentes longitudes de extensión, y es de 1 a 7. El nombre con la extensión más larga es el más corto. Es lógico suponer que necesita combinar todas las secuencias hexadecimales de acuerdo con las longitudes de las extensiones de archivo.
Guardamos la secuencia de bytes por separado, entendiendo que este es un archivo 7z, desde los primeros dos bytes (0x37 0x7a - 7z).
Paso 2El segundo archivo está nuevamente protegido por contraseña, pero esta vez tenemos nombres de archivo cortos y contenido de archivos pequeños. Es bueno que el visor de archivos muestre metadatos de archivos, es decir, sumas de verificación.
A pesar del hecho de que crc está mal buscado en Google, aún puede verificar todas las secuencias y descubrir que, a pedido de crc 90c1667d, todavía hay un prototipo de "cuatro". O simplemente cree una secuencia de tres bytes para los archivos más cortos. Cualquiera de los métodos condujo al hecho de que el contenido de los archivos se instalaba fácilmente: estos eran los números en inglés "uno", "dos", "tres", "cuatro", "cinco" y "seis". No tenemos más opciones que unir los nombres de archivo en este orden. Obtenemos VVNFIENSQzMy. Verificamos como la contraseña del primer archivo, se ajusta.
Paso 3Los solucionadores de observadores, incluso antes de la contraseña, podrían notar que crc32 de los archivos de almacenamiento tiene una forma bastante específica, a saber, 0xC0DExxxx. No existen tales coincidencias en los CTF.
Los archivos en sí mismos son imágenes PNG con texto. Como en cada paso consideramos crc32, vale la pena continuar haciendo esto. Después de verificar el primer texto de la imagen (por ejemplo, qnGyaQBc), queda claro que estamos en el camino correcto, porque crc32 es 0xc0de0831. Consideramos crc de todo lo que queda y recolectamos en un montón.
CRC de imágenes:
0xc0de094e
0xc0de054e
0xc0de0d7d
0xc0de0343
0xc0de0b52
0xc0de0734
0xc0de0154
CRC del texto:
0xc0de0831
0xc0de0430
0xc0de0c35
0xc0de027b
0xc0de0a33
0xc0de0654
0xc0de0058
Desechamos la parte común, vemos que desde el valor del primer byte de las dos carreras de 0x00 a 0x0d. Parece que es un número de serie. Recolectamos, recibimos una bandera. Verificamos sha1 y adicionalmente nos aseguramos de que todo sea correcto.
XT_QUEST_103lista1Dada una secuencia de números. Simplemente tomamos los caracteres con los números indicados de la tarjeta, numeración desde cero y saltos de línea. Tiene sentido escribir esta acción: será necesaria más de una vez.
Respuesta: awEs0me_sTart
lista2Muchos números El nombre del archivo sugiere que necesita saber la cantidad de dígitos 5. Contamos la cantidad no solo de cinco, sino también de todos los dígitos del 0 al 7. Obtenemos la secuencia: 135, 95, 61, 27, 58, 57, 85, 190. Ponemos en la tarjeta, Obtenemos la respuesta.
Respuesta: b1g_sTEp
lista3Vemos una imagen con un polinomio. Sustituimos n de cero a 9, ya que aconsejamos el nombre del archivo, obtenemos una secuencia que, cuando se superpone en la tarjeta, da una respuesta.
Respuesta: coOl2math!
lista4Nombre de archivo extraño y contenido extraño. Si buscas en google fdhvdu, entonces, entre los resultados irrelevantes, puedes encontrar una indicación de que esta palabra césar codificada por el cifrado de César es un cambio alfabético de 3 caracteres. Habiendo decodificado los contenidos, vemos números romanos. Creo que está claro qué hacer con una secuencia de números.
Respuesta: dOinG_w3ll
lista5El contenido de la tarea literalmente dice lo que hay que hacer. Hash el archivo, obtenemos 20 bytes, que se pueden interpretar como una secuencia de números para la tarjeta.
Respuesta: exceLlenT_impECc4ble
visual1Superponemos el texto de la tarea en el texto del mapa, además, lo "superponemos" literalmente.
Respuesta: fa5t! One
visual2Hay 840 ceros y unos en el texto del problema. Como el tema es visual, estamos tratando de obtener alguna representación visual. Si el texto se divide en 5 líneas de 168 caracteres cada una, puede ver la secuencia que conduce a la respuesta.

Respuesta:
go_fUrth6r visual3El nombre del archivo nos dice directamente sobre el dominó. Intentamos conectar los nudillos hexagonales y obtener dos cadenas. Uno es circular y no interesante, el segundo puede considerarse como una secuencia de números para una tarjeta. El resultado es una respuesta o una respuesta en orden inverso.
Respuesta: heRoic_effOr7s
visual4Se nos dan dieciséis números hexadecimales en los que claramente hay muchas unidades de bits. Traducimos los números con una calculadora y nuevamente, literalmente, "imponer". Los ceros de bit marcan los caracteres deseados. Leemos los símbolos de arriba a abajo, de izquierda a derecha.
Respuesta: ih8BiTs!
visual5El nombre del archivo nuevamente da una pista. "B3s23" es la designación de la configuración para la vida del juego. Tomamos un simulador en línea, ingresamos la ubicación inicial, esperamos cinco movimientos y leemos el número de células vivas en las filas (lo que debe hacer solo indica el nombre del archivo).
Respuesta: jUsT_9ood
prog1En el texto de la tarea vemos algo así como una máquina de Turing bidimensional, que solo debe hacerse.
Respuesta: k1l0_Byte
prog2La tarea proporciona explícitamente el código para brainfuck, pero si lo ejecuta en el emulador, el programa mostrará un mensaje de que la tarea no se trata de brainfuck. Sí, solo necesita calcular el número de caracteres en cada línea y aplicarlo al mapa.
Respuesta: l1kEl1On!
prog3Brainfuck nuevamente, pero esta vez la conclusión está de acuerdo con nosotros. La secuencia deseada para la tarjeta se encuentra en la memoria.
Respuesta: moRe_1nfO2me
prog4Y luego a la mierda. Comenzamos y el programa nos muestra un mensaje de que no hay contraseña. Nada interesante en la memoria tampoco. Tengo que entender el código.
El código consta de tres líneas. El primero establece algunos valores, el segundo también, el tercero muestra el estado de la memoria en la pantalla.
Eliminamos la segunda línea, corremos y obtenemos la secuencia de la tarjeta.
Respuesta: nO_baRr13rs
prog5La ultima tarea. Código Brainfuck de nuevo. Vemos una indicación de que necesitamos calcular alguna función de alguna línea del mapa y código. Ejecutamos el código que deja una pista en la memoria de que la función que estamos buscando es decodificar base64. Verificamos las líneas del mapa para saber qué sucederá si se decodifican desde base64. De repente, la cadena KysrWz4rPis8PC1d se decodifica en +++ [> +> + << -]. Ejecutamos el código con esta adición y vemos las instrucciones para incluir todos los caracteres en cada una de las líneas del mapa. El resultado será la última contraseña.
Respuesta: ofF1ci4l!
Eso es todo A todos los que participaron, gracias, si tienen alguna pregunta, háganla en los comentarios.