Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en...

58
Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho de no poder controlar una región, una región que parece estar fuera del alcance de los ciudadanos de a pie, donde la única ley son las pulsaciones de teclado, el simple hecho de tener el poder en tus manos, Santander, y dentro de esta pequeña región Sh3llc0n, una conferencia de ciberseguridad de la cual me es inevitable hablar en este diario, allí es, ese es el lugar, lugar donde el conocimiento te hará libre!!! Sigo pensando en como hacer que Sh3llc0n salga de la línea del underground y forme parte de ese ciberespacio en equilibrio, quiero pensar que los tripulantes de esta nave son capaces de infringir las normas, las leyes, deseo saber hasta dónde son capaces de llegar, mi única opción es seleccionar a los mejores, aquellos que pasen una serie de pruebas en tan solo 30h, sólo tenemos esa pequeña ventana de tiempo, desde el viernes 24 de Enero de 2020 a las 9:00AM hasta el Sábado 25 de Enero del 2020 a las 15:00PM, en el caso de no poder superar estos retos el equilibrio será destruido y sh3llc0n quedará en el underground más profundo. Los seleccionados deben demostrar ser válidos para emprender este viaje mas allá de lo terrenal, sólo podrán hacerlo aquellos que sus mentes sean libres!!! Diario de a bordo, día 24 de enero de 2020 RETO #1 RESP. MISION: YAGO RECOMPENSA: 1000 SPACECOINS Hoy es el día, primer día de forzar neuronas hasta el limite, la primera de las pruebas para mi tripulación, hoy tocamos tierra firme. Caminando junto a una embajada de un país remoto recibimos la extraña señal de una red Wi-Fi que parece solicitar auxilio. Decidí sentarme en un banco frente a la embajada para tratar de descifrar esa señal. Tomé mi portátil, mi adaptador Wi-Fi y un OS basado en UNIX, entre en modo monitor y comencé a capturar paquetes. Era una señal de socorro que transmitía a intervalos de 5 minutos un total de 10 mensajes ocultos en tramas Wi-Fi (IEEE802.11) que debía descifrar. Ahí es donde deje a mi tripulación tomar el mando, aquellas decisiones harían que pudiésemos rescatar a uno de nuestros agentes secuestrados y poder llevarlo a salvo a nuestra nave para seguir ese tan deseado viaje en busca del conocimiento. RECURSOS Tarjeta Wi-Fi en modo monitor con capacidad de inyección Ordenador con Kali Linux o cualquier otro Linux como root Aircrack-ng suite Wireshark Paquete iw instalado en el sistema SOLUCION

Transcript of Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en...

Page 1: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Diario de a bordo...

Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo

perturba el hecho de no poder controlar una región, una región que parece estar fuera

del alcance de los ciudadanos de a pie, donde la única ley son las pulsaciones de

teclado, el simple hecho de tener el poder en tus manos, Santander, y dentro de esta

pequeña región Sh3llc0n, una conferencia de ciberseguridad de la cual me es inevitable

hablar en este diario, allí es, ese es el lugar, lugar donde el conocimiento te hará libre!!!

Sigo pensando en como hacer que Sh3llc0n salga de la línea del underground y forme

parte de ese ciberespacio en equilibrio, quiero pensar que los tripulantes de esta nave

son capaces de infringir las normas, las leyes, deseo saber hasta dónde son capaces de

llegar, mi única opción es seleccionar a los mejores, aquellos que pasen una serie de

pruebas en tan solo 30h, sólo tenemos esa pequeña ventana de tiempo, desde el viernes

24 de Enero de 2020 a las 9:00AM hasta el Sábado 25 de Enero del 2020 a las

15:00PM, en el caso de no poder superar estos retos el equilibrio será destruido y

sh3llc0n quedará en el underground más profundo. Los seleccionados deben demostrar

ser válidos para emprender este viaje mas allá de lo terrenal, sólo podrán hacerlo

aquellos que sus mentes sean libres!!!

Diario de a bordo, día 24 de enero de 2020

RETO #1

RESP. MISION: YAGO

RECOMPENSA: 1000 SPACECOINS

Hoy es el día, primer día de forzar neuronas hasta el limite, la primera de las pruebas

para mi tripulación, hoy tocamos tierra firme. Caminando junto a una embajada de un

país remoto recibimos la extraña señal de una red Wi-Fi que parece solicitar auxilio.

Decidí sentarme en un banco frente a la embajada para tratar de descifrar esa señal.

Tomé mi portátil, mi adaptador Wi-Fi y un OS basado en UNIX, entre en modo monitor

y comencé a capturar paquetes. Era una señal de socorro que transmitía a intervalos de 5

minutos un total de 10 mensajes ocultos en tramas Wi-Fi (IEEE802.11) que debía

descifrar. Ahí es donde deje a mi tripulación tomar el mando, aquellas decisiones harían

que pudiésemos rescatar a uno de nuestros agentes secuestrados y poder llevarlo a salvo

a nuestra nave para seguir ese tan deseado viaje en busca del conocimiento.

RECURSOS

Tarjeta Wi-Fi en modo monitor con capacidad de inyección

Ordenador con Kali Linux o cualquier otro Linux como root

Aircrack-ng suite

Wireshark

Paquete iw instalado en el sistema

SOLUCION

Page 2: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Para comenzar, es posible que necesites ciertas herramientas y/o paquetes para tu Linux.

En aquellos Linux basados en estructura Debian, se podrán instalar de la siguiente

forma:

su root apt-get install wireshark apt-get install aircrack-ng apt-get install iw apt-get install wireless-tools apt-get install firmware-atheros

Para configurar el sistema y la tarjeta Wi-Fi en modo monitor se ejecutará:

export PATH="$PATH:/sbin" /sbin/iwconfig airmon-ng check kill airmon-ng check kill airmon-ng check kill airmon-ng start wlan1 ## wlan1,wlan0 u otra dependiendo del sistema

Cuando comience la prueba el participante deberá estar ya escaneando, monitorizando y

grabando los paquetes Wi-Fi del entorno mediante airodump-ng en la modalidad de

salto por canal en la banda de 2.4GHz:

airodump-ng wlan1mon -w ctf

La dirección MAC de origen en los paquetes transmitidos durante la prueba siempre

será la siguiente:

00:1a:01:2b:3c:44

El participante observará que el canal inicial de la prueba será el 11 en 2.4GHz y el

SSID será SH3LLCON-WIFI-CTF.

En ese momento comenzará a escanear mediante airodump-ng centrándose únicamente

en este canal y siempre grabando sus capturas.

airodump-ng wlan0mon -c 11 -w ctf

En este momento dará comienzo el CTF Wi-Fi que iniciará mediante la interacción de

@yadox con el dispositivo del CTF.

A partir de este punto, cada cinco minutos, el dispositivo emitirá unas ráfagas de 500

paquetes idénticos que irán nombrados en el campo SSID de las tramas 802.11 con los

siguientes valores:

WiFi-CTF-Packet-01!!!

Page 3: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

WiFi-CTF-Packet-02!!! WiFi-CTF-Packet-03!!! WiFi-CTF-Packet-04!!! WiFi-CTF-Packet-05!!! WiFi-CTF-Packet-06!!! WiFi-CTF-Packet-07!!! WiFi-CTF-Packet-08!!! WiFi-CTF-Packet-09!!! WiFi-CTF-Packet-10!!!

Ejemplo del paquete 4 de la prueba

Cada una de estas tramas incluye un payload en el campo IE 221 que aporta

información del fabricante. Mediante Wireshark, strings, tcpdump, etc. se debe

examinar, extraer y utilizar esta información como siguiente pista para el reto. Algunos

de esos payloads están codificados en base 64, por lo que habrá que extraerlos y

decodificarlos en Wireshark o strings. Hay que copiar el valor del mismo y usar el

típico método Linux.

echo UGlzdGEtLWxlbmZsYWc9MTA= | base64 -d Pista--lenflag=10

Algunos de estos paquetes se emiten como beacons (type management 0, subtype 8) y

otros como Probe Response, aunque se avisa en el anterior que el próximo será una

trama Probe Response (type management 0, subtype 4).

Los filtros que se pueden utilizar en todo momento en Wireshark serían:

wlan.fc.type_subtype == 0x08 (para los beacons) wlan.fc.type_subtype == 0x04 (para los probe request) wlan.sa == 00:1a:01:2b:3c:44 (para filtrar por MAC)

Page 4: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Ejemplo de un paquete diseccionado en Wireshark mostrando el payload en el campo IE 221 (Vendor data)

Al finalizar el último paquete (el número 10) incluye un mensaje con la flag válida YadoxFlag

Se indica que el flag deberá ser enviado como campo SSID al sistema en un paquete de

tipo Probe Request (type 0 subtype 5).

Para lograrlo hay múltiples formas de hacerlo:

1. Mediante un smartphone (Android o iphone) o mediante el ordenador laptop.

Solicitando que se conecte a un AP oculto con SSID YadoxFlag. Esto generará una

ráfaga de solicitudes Probe Request al aire. El sistema captará la primera que envíe el

flag y se mostrará un mensaje en el bot de Telegram con la MAC del ganador.

2. Mediante scapy Dot11. scapy

Welcome to Scapy (2.4.0)

>>> mymac="mi dirección MAC del adaptador Wi-Fi"

>>>

packet=RadioTap()/Dot11(addr1="ff:ff:ff:ff:ff:ff",addr2=mymac,ad

dr3="ff:ff:ff:ff:ff:ff")/Dot11ProbeReq()/Dot11Elt(ID="YadoxFlag"

, info="")

>>> sendp(packet, iface="wlan1mon",count=50,inter=0.1,verbose=1)

PISTAS (2)

Primera pista: La dirección MAC de origen en los paquetes transmitidos durante la

prueba siempre será la siguiente: 00:1a:01:2b:3c:44

Segunda pista: El canal inicial de la prueba será el 11 en 2.4GHz y el SSID será:

SH3LLCON-WIFI-CTF.

FLAG: YadoxFlag

Page 5: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

ESTA PRUEBA FUE INSITU, SE HA MODIFICADO PARA

PODER JUGARLA ONLINE

PRUEBA ORIGINAL:

RETO #2

RESP. MISION: C4T_13 (Organización Sh3llc0n)

RECOMPENSA: 3000 SPACECOINS 100 x IMAGEN

(30 IMÁGENES EN TOTAL)

Sentado en el banco me di cuenta que algo interfería en el espectro radioeléctrico

cercano, no podía creer lo que estaba viendo en la pantalla de mi equipo... ISS?

La estación espacial internacional parecía saber de nuestra existencia, multitud de

imágenes SSTV estaban pasando delante de mis ojos con la misma rapidez que el sol

iba cayendo y dejando entrar la oscuridad de la noche, además de una forma irracional,

sin ninguna clase de metodología, sin tiempo ni horarios lógicos, intentaban decirnos

algo, la primera de las imágenes me desconcertó...

POC: Imagen derecha decoder MMSTV, imagen Izquierda decoder APK Robot36.

(Todas las recepciones de los participantes serán validas al margen de su calidad)

Para resolver esta prueba deberán, además de obtener el flag correcta, enviar un correo a

[email protected] adjuntando la imagen correspondiente y una captura de pantalla

completa con fecha y hora donde se vea el programa que se está usando y el decoder

Era hora de informar a mi tripulación para que ellos mismos decodificaran esas

imágenes y las clasificaran. En esta prueba deberán estar durante 30h a la escucha según

nos informa Pedro Duque desde ISS, la emisión comenzará el viernes a las 9:00AM y

finalizará el sábado a las 15:00PM.

Que intentaban decirnos?...

SOLUCION

En la banda de FM (le emisión en esa banda no es legal por lo cual se limitará a un

alcance de 15/20metros aprox, zona 0 recepción de Santemar), se irá emitiendo cada

Page 6: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

hora aprox (para que no puedan automatizarlo), 10 primeras imágenes SSTV

codificadas en Robot36, estas imágenes estarán en bucle hasta el final del CTF para que

así todos tengan la oportunidad de decodificarlas, pero… una vez se hayan emitido las

diez imágenes por primera vez la codificación cambiará a Scootie1 y por ultimo a

Martin2. (Pendiente ver si cambiamos de frecuencia junto con el cambio de decoder)

Frecuencia 107.1

Horarios de emisión:

Robot36

Imagen1 Hora en audio: 00:00:00 Hora emisión: 09:00:00

Imagen2 Hora en audio: 00:51:45 Hora emisión: 09:51:45

Imagen3 Hora en audio: 01:53:40 Hora emisión: 10:53:40

Imagen4 Hora en audio: 02:55:36 Hora emisión: 11:55:36

Imagen5 Hora en audio: 03:57:29 Hora emisión: 12:57:29

Imagen6 Hora en audio: 04:59:26 Hora emisión: 13:59:26

Imagen7 Hora en audio: 06:01:25 Hora emisión: 15:01:25

Imagen8 Hora en audio: 07:03:24 Hora emisión: 16:03:24

Imagen9 Hora en audio: 08:05:23 Hora emisión: 16:05:23

Imagen10 Hora en audio: 09:07:26 Hora emisión: 18:07:26

Scottie1

Imagen1 Hora en audio: 09:59:13 Hora emisión: 18:59:13

Imagen2 Hora en audio: 11:02:23 Hora emisión: 20:02:23

Imagen3 Hora en audio: 12:05:33 Hora emisión: 21:05:33

Imagen4 Hora en audio: 13:08:42 Hora emisión: 22:08:42

Imagen5 Hora en audio: 14:11:53 Hora emisión: 23:11:53

Imagen6 Hora en audio: 15:15:03 Hora emisión: 24:15:03

Imagen7 Hora en audio: 16:18:16 Hora emisión: 01:18:16

Imagen8 Hora en audio: 17:21:30 Hora emisión: 02:21:30

Imagen9 Hora en audio: 18:24:42 Hora emisión: 03:24:42

Imagen10 Hora en audio: 19:27:55 Hora emisión: 04:27:55

Martin2

Imagen1 Hora en audio: 20:00:31 Hora emisión: 05:00:31

Imagen2 Hora en audio: 21:02:49 Hora emisión: 06:02:49

Imagen3 Hora en audio: 22:05:07 Hora emisión: 07:05:07

Imagen4 Hora en audio: 23:07:25 Hora emisión: 08:07:25

Imagen5 Hora en audio: 24:09:43 Hora emisión: 09:09:43

Imagen6 Hora en audio: 25:12:04 Hora emisión: 10:12:04

Imagen7 Hora en audio: 26:14:26 Hora emisión: 11:14:26

Imagen8 Hora en audio: 27:16:46 Hora emisión: 12:16:46

Imagen9 Hora en audio: 28:19:10 Hora emisión: 13:19:10

Imagen10 Hora en audio: 29:21:31 Hora emisión: 14:21:31

Page 7: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

PISTAS

Se les facilitaran los encoders usados en las imágenes:

Primera pista: Robot36

Segunda Pista: Scottie1

Tercera Pista: Martin2

En este caso el valor de cada una de las imágenes será 50 puntos en vez de 100.

FLAG: Decodificar las 30 imágenes que se transmitirán

Page 8: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

PRUEBA MODIFICADA PARA

FLU PROJECT - ONLINE

Crear imágenes SSTV sh3llc0n 2020

Primero redimensionar las imágenes a 320x256. Añadimos las imágenes a MMSSTV

Emitimos en TX y grabamos desde File/Record soun to the file/ nos creara un archivo

con extensión .mmv

Hay infinidad de tools para resolver esta prueba, aquí explicaremos solo algunas de

ellas….

Instalaremos MMV2WAV

https://hamsoft.ca/pages/extras-add-on/mmv2wav.php

Esta tool nos pasa de extensión mmv a wav

Page 9: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Después abrimos con Audicity el .wav con parámetros 16bits 11025

En nuestro caso hemos creado el .wav para testear que las imágenes son correctas,

a los participantes solo se les dará el .mmv

Estos son los archivos finales que se le aportaran a los participantes

Page 10: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

RETO #3

RESP. MISION: LORENZO

RECOMPENSA: 1000 SPACECOINS

Informé por la emisora ya que no era necesario que las pruebas fueran secuenciales

y todos los miembros de la tripulación eran libres de ejecutar dichas pruebas sin orden

ni horarios, aunque si liberábamos a nuestro agente secreto tendríamos la opción de

saber si, tanto nuestra nave como nosotros mismos, corríamos alguna clase de peligro,

los raptores se comunican mediante un ordenador compartido en el que dejaban un

fichero de texto en el escritorio. Necesitamos saber la longitud/latitud de dónde se

reunían para sabotear la misión Sh3llc0n2020, me consta que sólo él tiene esa

información…

SOLUCION

1.-) Convertir la memoria de vmem a raw con plugin imagecopy -> Indicar que es el

último Win10 [el profile es Win10x64_18362]

2.-) con un pslist se ve que hay un notepad.exe [hay que indicar que algo estaba leyendo

y es donde se iban a reunir]

3.-) memdump -p 5320

4.-) strings al 5320.dmp y generar un 5320.txt

5.-) mirar el strings y encontrar que es el Burgerheim de Víctor Pradera de Logroño a

las 23:50

6.-) Buscar dirección exacta de Burgerheim en google maps -> Calle Víctor Pradera, 5,

26001 Logroño, La Rioja

6.-) https://www.coordenadas-gps.com/convertidor-de-coordenadas-gps -> Devuelve

Latitud 42.4646656 y Long -2.4475692 Esta será la flag

Page 11: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

PISTAS

0.-) Sé que la máquina era virtual

1.-) sé que es a las 23:50

2.-) que les gustan las hamburguesas

FLAG: 42.4646656/-2.4475692

RETO #4

RESP. MISION: DAVID MARUGAN

RECOMPENSA: 1000 SPACECOINS

Unos días atrás, antes de que nuestro agente fuese capturado, me hizo llegar un archivo

de audio, no sé muy bien de qué quería alertarme, el caso es que estoy sin tiempo,

pensándolo bien, qué mejor si quiero entrenar a mi tripulación final que sean ellos

mismos los que me den ese archivo decodificado?

SOLUCION

1. Se debe reproducir el archivo .wav en un reproductor cualquiera: VLC por ejemplo.

2. Se debe usar un cable virtual de audio como el gratuito Virtual Audio Cable para

Windows.

https://www.vb-audio.com/Cable/

Page 12: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

3. Se debe descargar el sofware WSJT-X

https://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html

4. Con todo el software instalado debemos reproducir el archivo en VLC por ejemplo

dando la salida de audio al VIRTUAL CABLE que instalamos anteriormente.

Page 13: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

5. Ahora arrancamos el software de decodificación WSJT-X y le damos los

parámetros de entrada CABLE VIRTUAL, y en MODE el JT65. Activamos

MONITOR. Debemos observar una barra verde que sube de nivel y no

escucharemos nada.

Page 14: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

6. Ahora veremos que la barra verde de la izquierda comienza a subir hasta 80 más

o menos y nos entrará una señal en el waterfall de señal del sofware:

7. Lo más IMPORTANTE de todo es que aun sabiendo que está codificado en

JT65, debemos saber que este modo es muy especial por motivos técnicos y

físicos, y la reproducción del archivo debe comenzar JUSTO cuando la barra

del decodificador está el segundo 60/60 de la ventana de un minuto, si no será

imposible decodificar el mensaje. Cada línea del mensaje tiene una o varias

palabras que conforman el mensaje completo.

Page 15: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

PISTAS

Primera pista: para los que están muy perdidos se dirá que es un protocolo muy usado

por radioaficionados

Segunda pista: si no se aclaran todavía, se comenta lo del cable virtual y que busquen

un decodificador.

Tercera pista: Indicar que es un modo muy exigente con la sincronización del reloj.

FLAG:

Page 16: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

NOTA: Según se vea la dificultad que han tenido los participantes, se puede dar

por válido aunque falte una de las 6 líneas que componen el mensaje en

JT65.

La red Avispa fue real, y fue desmantelada por el FBI en USA, estaba compuesta

por agentes ilegales durmientes del la inteligencia cubana… :)

RETO #5

RESP. MISION: PEDRO CABRERA

RECOMPENSA: 1000 SPACECOINS

No solo depende de tener conocimientos en Hacking, tengo que forzarles a que

demuestren su pensamiento lateral, si queremos salir al espacio exterior debemos tener

unos conocimientos mínimos de geoposicionamiento, sí, debo forzarles a ello, deben

darse cuenta de que no todo es hacking, las matemáticas son necesarias y una ciencia

exacta, ciencia que con este pequeño manual no deben tardar en resolver:

1. Partiendo de las coordenadas GPS publicadas en la web del hotel donde estamos

celebrando la Sh3llC0N (https://www.hotelsantemar.com/situacion/) debes encontrar

las coordenadas resultantes al aplicar un desplazamiento en metros de: [-261.515,

233.654, 0] -vector de desplazamiento os ha sido entregado en formato ENU

(East/North/Up).

2. Para facilitar las cosas, debéis suponer la altitud correspondiente a las coordenadas del

hotel de 30 metros.

3. Usar las coordenadas del hotel como coordenadas base (formato geodésico).

4. Aplicar el vector ENU para obtener las coordenadas geodésicas resultantes.

SOLUCION

La prueba consiste en un ejercicio de manipulación de coordenadas terrestres, en el que los participantes deberán realizar operaciones básicas de cambio de sistemas de coordenadas entre los modelos más habituales: Geodésicas, Cartesianas ECEF y ENU (East/North/Up) Referencia: https://en.wikipedia.org/wiki/Geographic_coordinate_conversion La operación básica que realizar es la suma de un desplazamiento a las coordenadas base de partida, para obtener un punto de destino, donde encontraran la bandera para la continuar con la siguiente prueba o para obtener la puntuación de la prueba. De esta manera, se propuso utilizar las coordenadas del hotel donde se realizará el evento como base. Podemos ver las coordenadas tal y como están publicadas en su página web:

Page 17: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Se pueden leer las coordenadas: “Lat:43.470087º Lon:-3.782958º” A partir de estas se debe aplicar un desplazamiento de 261,515 metros en dirección Oeste y 233,654 metros en dirección Norte, que son las coordenadas del vector desplazamiento ENU del enunciado: “[-261.515, 233.654, 0]” (El valor negativo de la componente Este indica que el desplazamiento se realiza en dirección opuesta, Oeste) Para aplicar este desplazamiento necesitamos que las coordenadas de origen y las del desplazamiento estén referenciadas a un mismo sistema de coordenadas, poder realizar la “suma” de estas, obteniendo así las coordenadas del destino. El sistema de coordenadas que conocemos en el día a día utilizadas por los sistemas de navegación GPS se denominan coordenadas geodésicas y siguen un modelo de la tierra llamado “esferoide” (esferoide de referencia WGS84). Manualmente se podrían aproximar las coordenadas geodésicas a coordenadas cartesianas centradas en la tierra, denominadas ECEF, que se expresan en un vector de 3 coordenadas:

(x,y,z) siendo la magnitud de cada una de las coordenadas de este vector metros, medidos desde el centro de la tierra. Existen varios métodos para realizar esta aproximación, aunque conllevan muchas operaciones matemáticas, como se puede leer en el enlace de Wikipedia de referencia. Debemos tener en cuenta que tras aplicar el desplazamiento a las nuevas coordenadas, se deben volver a convertir las coordenadas resultantes a coordenadas geodésicas. Todas estas operaciones pueden ser realizadas con la ayuda de bibliotecas existentes en Matlab, Octave y lenguajes de programación como Python: https://www.mathworks.com/help/map/3-d-coordinate-and-vector-transformations.html https://scivision.github.io/matmap3d/ https://pypi.org/project/pymap3d/ Implementar las operaciones necesarias utilizando una de estas bilbiotecas es un programa de apenas 10 línea de código, de las cuales una línea realiza la transformación de las coordenadas con el desplazamiento ENU:

Page 18: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Si a las coordenas de referencia del hotel aplicamos el vector desplazamiento, obtenemos las siguientes nuevas coordenadas: python calc_enu2geo_shell.py -261.515 233.654 0.00 43.4721900044;-3.786190005;30.0096409157 Latitud: 43.4721900044 (Norte) Longitud: -3.786190005 (Oeste) Se comprueba en Google Maps las nuevas coordenadas respecto a la ubicación de partida:

Comprobamos con la utilidad de medir distancias que desde el punto de partida al punto de destino (Parroquia San Roque) hay 350 metros en línea recta, como se puede ver en la siguiente imagen:

Page 19: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

En la imagen se puede ver como el desplazamiento es hacia arriba (Dirección norte) y hacia la izquierda (Dirección oeste). Si calculamos la raíz cuadrada de la suma de los cuadrados de los desplazamientos (261,515 y 233,654), comprobamos que la hipotenusa del triangulo mide 350 metros.

FLAG: Calcula la coordenada destino donde encontrarás

el material para poder realizar el reto #6.

Page 20: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

RETO #6

RESP. MISION: ZEROLYNX (MrSquid)

RECOMPENSA: 1000 SPACECOINS

Debo tener en cuenta el proceso de selección del líder de esta expedición. Me he

centrado demasiado en cómo elegir a los mejores y ponerlos a prueba, pero... ¿quién

será el que tenga la mayor responsabilidad, ¿quién será mi sucesor? No es fácil

gestionar tantos egos bajo presión, necesito una luz que los guíe... Tras noches

deliberando, en este caso, me centraré en la imaginación y el sentido común entre los

seleccionados, pero, sobre todo, buscaré aquella persona que mejor mecanismo de

comunicación posea. Esa cualidad es imprescindible en esta misión, porque…

“El ser humano se está convirtiendo en la única especie que es capaz

involucionar creyendo que evoluciona, esto nos llevará a la extinción,

nunca descartéis volver atrás en el tiempo para poder avanzar.” Junto con el CD se les entregará una nota que dirá:

SOLUCION

En este caso, se le facilitará al participante un fichero .ad1. Si montamos ese fichero con

FTK Imager, podremos observar que es una imagen del contenido de un USB.

Contenido del fichero folder.ad1

De ahí podremos extraer tanto el dump del Paint como el PCAP.

El PCAP contendrá muchos paquetes ICMP que representan una exfiltración de

información. La información exfiltrada va en base64 y mediante un pequeño script (o a

manija) se podrá obtener un texto en el que localizaremos una contraseña.

Page 21: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Contenido del pcap.

Con este pequeño script, podrán obtener el contenido de manera sencilla:

from scapy.all import *

import base64

capture = rdpcap('sniff.pcap')

ping_data = ""

for packet in capture:

if packet[ICMP].type == 8: # Echo request

ping_data += packet[ICMP].load[16::] #El 16 es el byte desde el que cogemos la

info (mira en tcpdump donde empieza la chicha buena)

print base64.b64decode(ping_data)

Contenido del texto (los datos que he usado para simular una exfiltración son

definiciones sobre seres mitológicos cántabros):

root@kali:~/Desktop/sh3llcon/Prueba pcap# python exfiltration.py

WARNING: No route found for IPv6 destination :: (no default route?)

Según cuenta la tradición popular, desde hace mucho tiempo las tierras cántabras han

sido habitadas por infinidad de seres fantásticos a los que la gente temía o adoraba y

en torno a los cuales surgieron numerosas historias y leyendas.

Personificando a la maldad nos encontramos con una pareja formada por el Ojáncanu

y su esposa, conocida como Ojáncana o Juáncana.

Él, gigante de fuerzas sobrehumanas, tiene un solo ojo, largas barbas y melenas de un

tono rojizo, lucha contra osos y toros tudancos y siempre sale vencedor. Sólo se

acobarda ante las Anjanas, pues es bien sabido por él que si éstas lllegasen a

arrancarle un pelo cano de su barba, moriría sin remedio alguno.

Ella posee colmillos de jabalí, alas muy grandes y unos pechos tan grandes y

deformes que se los echa a la espalda. Es infinitamente más maligna y sanguinaria

que él puesto que devora todo aquello cuanto encuentra a su paso, incluyendo a los

niños entre sus víctimas, una vez los haya cazado los lleva volando hasta una cumbre

y allí los devora. A pesar de ser tan terrible siente un inmenso pavor ante la minúscula

monuca galana o comadreja.

Page 22: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

La Anjana es de los personajes más conocidos de la mitología de Cantabria. Es

considerada como la antítesis de la pareja anterior. Se trata de un hada buena y

generosa de pequeño tamaño, dotada de una graciosa y extraordinaria belleza. Viste

un manto chispeante de estrellas y se corona con lirios y rosas, dispone de una florida

vara que brilla con una luz diferente cada día de la semana. Vive en las fuentes y

manantiales de donde sale para bendecir aguas, árboles y ganado. Protectora de gente

honrada, de los enamorados y de todo aquel que se extravíe en los bosques y caminos.

Los Trasgus son pequeños duendes de cara negra y ojos verdes que habitan en los

bosques. Se burlan de la gente haciendo gamberradas, siendo sus víctimas habituales

las muchachas mientras realizan alguna tarea. Su vestimenta, formada por hojas de

árboles y musgo, les sirve de camuflaje para poder esconderse de los humanos.

Los Trastolillus se asemejan a los trasgus, son protectores del hogar, revoltosos y

juguetones. Sus facciones son pícaras y de un color más negro que el hollín, tienen el

pelo largo y del mismo color, poseen unos ojillos verdes, colmillos retorcidos, rabillo

prácticamente inapreciable y someros cuernecillos. Se viste con un manto rojo hecho

con cortezas de árbol cosidas con hiedra, lleva un gorro blanco y se asiste de un

bastoncillo de madera. Se entretienen tirando la harina, bebiendo la leche,

escondiendo las albarcas, corriendo las aldabas de las ventanas para que el viento las

haga chirriar durante la noche o requemar los guisos, entre otras cosas, pero siempre

acompañado de estridentes risas y fingidos lloriqueos.

Los Trentis son duendecillos traviesos de los bosques. Se visten con hojas, musgo y

raíces. Se esconden en los bardales para tirar de las sayas y pellizcar las pantorrillas a

las muchachas, escapando después entre los zarzales. Suelen ser bromistas pero

también ayudan al hombre pero sin que ellos lo sepan, tienen especial predilección

por los niños, auxilian al pastor cuando su ganado se pierde tras la tormenta, les

protegen de las maldades del Ojáncano, ayudan a las ancianas que no pueden valerse

por si mismas. Durante el invierno duerme al abrigo de las torcas y en verano bajo la

frescura de los árboles. Se alimenta de panojas y endrinas pero jamás bebe agua pues

es ponzoña para él.

Los Tentirujus son diablillos tentadores de orejas puntiagudas, ropajes encarnados y

boina en la cabeza. Se aprovechan de la invisibilidad que les producen los brotes

tiernos de mandrágora que siempre llevan para acariciar a las mozas y volverlas

descaradas.

Los Ventolines son geniecillos que tienen unas alas grandes y verdes, sus ojos son del

mismo color, viven sobre el mar en las nubes rojizas de poniente. Ayudan a los viejos

pescadores a recoger las redes, abrigándoles con sus alas cuando hace frío o mientras

sopla la suave brisa en la vela de la barca.

Los Caballucos del Diablo aparecen en la mágica noche de San Juan atravesando los

espacios entre las nubes de azufre emitiendo escalofriantes bramidos. Se dedican

principalmente a destruir los tréboles de cuatro hojas nacidos esa noche. Vuelan al

resplandor de las hogueras lo cual es señal de grandes desgracias. Ni siquiera las

Anjanas tienen poder suficiente ante sus galopadas ya que sólo podrá conjurarlas la

Page 23: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

planta llamada verbena o yerbuca de San Juan, que es una planta sagrada que

ahuyenta los males.

Los Nuberos son geniecillos tan malignos como diminutos, de cara maliciosa y

ligeramente obsesos. Habitan en las nubes, controlando el tiempo a su voluntad, se

suelen divertir provocando tormentas y tempestades, obviamente, con pretensiones

malvadas, tanto para arruinar las cosechas con el granizo como para perjudicar a los

pescadores que salen y entran a la mar, además lanzan centellas a los animales. Si se

ven amenazados o molestados usan como arma los rayos que no dudan ni un

momento en utilizar en su propia defensa. La gente les atribuye las terribles noches de

aguaceros y tempestades, los lugareños, para ahuyentarlos durante las horas de

oscuridad, encienden cirios y hacen tañer las campanas. Los pescadores les culpan de

las galernas que les hacen regresar apresuradamente a puerto.

El Musgosu es un hombre alto, sombrío y con cierto aire cansado, se pasea por las

brañas vestido con una zamarra de musgo, sombrero de hojas y escarpines de piel de

lobo mientras toca una triste melodía con su flauta para guiar a los pastores que se

encuentran en apuros. Por las noches silba desde las cumbres cuando algún peligro se

cierne sobre ellos. Es compasivo y un trabajador infatigable, repara las chozas de los

vaqueros derribadas por el temporal.

La información que necesitas se encuentra aquí -->

d?3JhFCm1X5P6MXS"33)QFUo123

El Culebre es un ser legendario de la mitología cántabra, con forma de dragón o

serpiente alada. Tiene una gran boca de afilados dientes por la que escupe azufre y

fuego, sus ojos son ascuas incandescentes, todo su cuerpo está recubierto de escamas

y de su espalda nacen unas alas de murciélago. Vive en cuevas donde guarda tesoros.

El Ramidreju, animal legendario que nace cada cien años de las comadrejas o de las

rámilas. De cuerpo delgado y muy largo, piel rayada y verde, ojos amarillos y hocico

de jabalí que usa para excavar profundos agujeros en la tierra. Muy buscado en

Cantabria porque dicen que su piel cura todas las enfermedades y sirve para encontrar

tesoros escondidos.

En torno a estos personajes y a muchos más han surgido infinidad de leyendas y

relatos. Todos ellos son prueba de la mentalidad mística de una época que respondió a

la necesidad de los cántabros de expresar sus miedos a internarse en un bello entorno

natural a la vez que abrupto, hostil y peligroso. Lanzándose a la búsqueda de

respuestas que les diesen convencimiento y la conjugación de los poderes para velar

por su seguridad.

No obstante quedan cántabros que aún no han sustituido a las mitológicas Anjanas

por santos y vírgenes ya que le siguen atribuyendo ciertas buenaventuras a esta hada

buena de la Montaña. Hoy día aún se sigue amedrentando a los más pequeños de la

casa con el Ojáncano. Pero este fantástico mundo de significaciones y de valores se

ha ido diluyendo poco a poco con la modernidad y el paso del tiempo, sustituyendo

los antiguos mitos por otros más modernos y urbanos.

Page 24: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

El .DMP es un volcado de memoria del proceso Paint.exe con una imagen abierta (el

fichero se llamará Paint.dmp para dar una pequeña pista o dentro del dmp meto una

string que ponga Paint para que no sea tan “fácil”). En dicha imagen habrá un texto

escrito. El volcado de memoria estará modificado en hexadecimal para que

herramientas de carving no puedan obtener ningún fichero (binwalk, foremost...). La

idea es que el participante descubra (buscando en Google lo encontrará espero) que si

abrimos el fichero en GIMP cambiando lo extensión a .DATA, podremos ver la imagen

que había en Paint abierta en el momento del volcado. También vera el siguiente texto

(véase captura) que le indicará cuál será el siguiente paso que tiene que hacer.

Hay que modificar el ancho y el alto para que se vea, si no, no verán nada.

Del CD obtendrán la siguiente imagen:

Page 25: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Imagen con estego

Esta imagen contiene esteganografía (eso lo tienen que suponer) y, también, contiene la

cadena de texto “L1nC3s_C4nT4Br0S” (con un strings sale). Para obtener el contenido

de la imagen, usamos steghide con la contraseña obtenida del pcap. De ahí,

obtendremos un keepass del año de la polka (.kdb, no kdbx), por lo que tendrán que

bajarse una versión antigua de keepass (la v 1.37). La contraseña maestra es

“L1nC3s_C4nT4Br0S”. Y ya habrán acabado.

Obtenemos el contenido con la pass del texto del PCAP.

Page 26: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Contraseña del Keepass obtenido.

Keepass con la FLag.

RECURSOS

Page 27: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

• https://w00tsec.blogspot.com/2015/02/extracting-raw-pictures-from-memory.html

(Para ver la imagen, ver la parte del mspaint)

• https://keepass.info/news/n190102_1.37.html

• Necesitaran instalar GIMP y la extensión UFO Raw para poder cargar las imágenes en

formato .data.

PISTAS

Hay que hacer especial hincapié en que usen GIMP o algo por el estilo y que jueguen

con el ancho y el largo para que vean el contenido de la imagen.

Primera pista: Indicarles que el pcap contiene información

Segunda pista: Indicar que el fichero .dmp puede contener imágenes en memoria (que

usen algún manipulador de imágenes con licencia GNU)

Tercera pista: Indicar lo del ancho y el alto para que jueguen con ello.

FLAG: flag{C0nGr4tS_mY_n3w_l34d3r}

RETO #7

RESP. MISION: PABLO GONZALEZ

RECOMPENSA: 1000 SPACECOINS

Revisando visualmente la parte exterior de las instalaciones donde tenían retenido a

nuestro agente… pude observar una especie de código marcado con algo punzante en lo

que parecía ser una especie de ventana, o más bien un respiradero (debido a su pequeño

tamaño), fijando la vista en uno de los laterales reconocí al instante que él estaba allí,

era él, sólo mi gran amigo podría, junto a ese código, firmar con un Glider, siempre

decía que se demostró que el juego de la vida de John H. Conway es equivalente a

una maquina de Turing lo que le permitía, teóricamente, realizar cualquier

computación posible.

Una (Smart Lock) cerradura BLE era lo único que nos separaba de nuestro agente, solo

si interactuábamos con ella nos permitiría ponerlo a salvo. A esta cerradura le gustan las

# y los números en UTF-8 de interés. Eso sí, no nos daría paso, así como así. Debemos

jugar con la Smart Lock si queremos volver a ver a nuestro agente…

SOLUCION

En primer lugar, debemos encontrar la Micro:Bit en este estado. Luz naranja activa.

Page 28: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

El display central estará apagado, como se puede ver en la imagen. No parece estar

activo, pero hay que ver que la luz naranja esté activa.

Page 29: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Se pueden utilizar diversas herramientas: gatttool, bettercap, homepwn. Incluso, se

puede hacer con un dispositivo móvil a través de herramientas como nRF Connect.

Si miramos con cualquier herramienta que permita escanear dispositivos Bluetooth (y

en este caso BLE) podemos encontrar una placa llamada Micro:Bit (coincide con lo que

vemos).

Podemos conectarnos directamente con ella sin ningún tipo de pairing ni autenticación.

Page 30: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Se puede ver la calidad de la señal, pero lo que más va a interesar es ver las

características del dispositivo BLE y los permisos que tiene cada característica

Page 31: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Habrá que fijarse en las de lectura directa (se puede obtener nombre del dispositivo y

otros valores informativos). Se pueden ver diferentes características de escritura. Se

probarán varias cosas y hay que ver cómo interactuar con la placa para que nos diga

algo, ya sea a través del display o a través de alguna característica de lectura o

notificación.

Cuando nos fijemos en UART TX char. Entendemos que podemos comunicarnos con la

placa y enviarle “algo”. Podemos probar diferentes configuraciones: bytes, números,

strings… Podemos probar a enviarles comandos o “requests”. Esto es probar y probar

para ver qué puede hacer la placa, tanto desde el punto de vista del display y desde los

valores que puede devolvernos a través de las características dónde la placa nos puede

devolver valores.

En este caso, nos devolverá información a través de UART RX char. Entonces,

escribiremos en UART TX y recibiremos valores en UART RX, siempre y cuando nos

hayamos subscrito (se ve más adelante).

Page 32: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Le mandamos un 0. En BLE debemos enviarle un delimitador (en este caso una #). En

el enunciado se decía que le gustaban las #, cuando se desarrolla se puede elegir el

delimitador. Esto es probar diferentes tipos de cadenas, números, etc y diferentes

delimitadores. Hasta que ocurre algo diferente.

Vemos que estamos subscritos a UART RX Char. Y cuando se envía el 0# a través de

UART TX char. Ocurre algo como esto. Recibimos “algo” en hexadecimal.

Si pasamos el hexadecimal por un hex to ASCII online obtenemos lo siguiente: “Zero?

Serious?” (Este paso puede que no se dé nunca, que alguien en vez de un 0 meta

cualquier número (más adelante, veremos qué pasa).

Page 33: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Si el usuario envía un 1# se obtiene un hexadecimal muy diferente al anterior. Al

convertirlo a ASCII se obtiene un número 78399491. ¿Qué es?

¿Y si se mete un -1#? Se obtiene un 78399493, ¿Qué quiere decir?

¿Y si se mete un 2#?

Se obtiene un 78399490. Parece que hay relación… Con un 3# se obtiene un

78399489. Ya está se va restando a un número. La placa propone un sencillo juego de

adivinar el número exacto programado. Quizá nos de algo más interesante si acertamos

el número.

Cuando introducimos el número 78399492# (es el número exacto) se nos devolverá el

siguiente valor.

Page 34: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho
Page 35: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Este valor en hexadecimal al pasarlo por el conversor nos devuelve el mensaje: “Flag:

ff00aa2387de” Aquí tenemos el flag

RECURSOS

La placa microbit será aportada por Pablo, se le devolverá a la finalización del CFT.

PISTAS

Pista 1: Para los que están muy perdidos: nRF Connect + mensajes con # como

delimitador o final de línea

Pista 2: Revisa los permisos de BLE (escritura, lectura, notificación). Mira cómo recibir

respuestas de dispositivos BLE a través de características

Pista 3: La fuerza bruta nunca fue un buen método. Utiliza la mente y piensa en los

números. Ellos te darán la solución (recuerda la # al final de tus apuestas…)

FLAG: ff00aa2387de

Page 36: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Diario de a bordo, día 25 de enero de 2020

RETO #8

RESP. MISION: N4xh4ch5

RECOMPENSA: 1500 SPACECOINS

Una vez tuviésemos a nuestro agente a salvo debíamos volver a nuestra nave, pero la

sorpresa sería inmensa para toda la tripulación cuando en la pantalla central viesen

correr una máquina virtual que debían explotar, otra prueba más de su valía, quería ver

hasta que punto eran capaces de explotar un OS y con qué clase de Tools estaban

familiarizados cada uno de ellos.

SOLUCION

Máquina 1: Resurection: https://fwhibbit.es/sh3llcon-ctf-write-up-resurrection

Máquina 2: F3nix : https://fwhibbit.es/sh3llcon-ctf-write-up-f3nix

¿Realmente está mi tripulación preparada para seguir adelante?

No paraba de rondarme esa incógnita por mi mente…

RETO #9 OFFLINE

RESP. MISION: GANZUANDO.ES

RECOMPENSA: 1000 SPACECOINS

Tanto el pensamiento lateral como la precisión son imprescindibles en la tripulación

final de esta aventura, deberán ganzuar todo aquello que esté a su alcance, quiero que

sus instintos, sensibilidad y tacto me muestren su paciencia y precisión, nunca

sabremos, una vez despeguemos, qué nos vamos a encontrar ahí fuera.

Page 37: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

RECURSOS

Ganzúas facilitadas por la organización.

FLAG: Puntuación:

- 500 para las esposas

- 200 para cada candado de llave (2)

- 100 para candado numérico

RETO #10 OFFLINE

RESP. MISION: Kike y J (Organización Sh3llCON)

RECOMPENSA: 500 SPACECOINS

Mi única intención en esta prueba es ver hasta que punto son capaces de ayudarse unos

a otros ya que la lealtad es una virtud que no todos tienen, para ello serán encerrados en

una Scape The Room, sólo los mas nobles y aquellos que aprendan a compartir sus

conocimientos serán capaces de escapar para seguir con las siguientes pruebas.

RETO #11

RESP. MISION: ZEROLYNX (MrSquid)

RECOMPENSA: 1000 SPACECOINS

Mi cabeza no paraba de pensar en un sin fin de posibilidades… ¿Y qué pasaría si la

tripulación entrase en territorio hostil? Los seleccionados deben tener capacidades de

reconocimiento y adaptación vertiginosas para camuflarse en el ecosistema en el menor

tiempo posible. Quiero ponerles al límite y comprobar hasta donde llegan sus

habilidades de OSINT e Inteligencia para la misión que les espera. Un binario para mi

futura tripulación, su contenido en un “extraño” idioma.. Se requiere de técnicas de

debugging y desensamblado medias para resolverlo

SOLUCION

Reto de osint que lleva a un binario ELF.

Parte OSINT --> Los usuarios recibirán un repositorio descargado de Gitea (ver como

se lo facilitamos, o se hace una pequeña web para realizar fuerza bruta y que sea la

única carpeta accesible o se les proporciona el repositorio de manera manual. A

unas malas, puede facilitarse la URL y que ellos mismos intuyan que hay que

descargarselo (tendría que hacer público el repositorio).

Page 38: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Dentro del repositorio viene un fichero README.md. con un texto en chino.

Contenido repositorio Gitea (Aquí no tienen acceso)

Este readme lo que viene a decir es lo siguiente:

Como hemos sido excluidos de GitHub, publicaremos nuevos archivos aquí

de ahora en adelante.

Será mejor que no escriba lo que podría ser inseguro aquí.

Afortunadamente, está encriptado y súper seguro.

Si tiran de logs del commit, podrán ver que ha habido modificaciones en el fichero y

que en una versión anterior se podía ver una especie de contraseña (aparte de poder ver

el autor CorocottaMaster, que es el nombre de usuario).

Page 39: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Log del commit donde se ve la contraseña

Aquí se ve que se actualizo GitLab por GitHub (ha sido una pequeña ñapa, pero lia un poco más).

La contraseña pertenece al usuario CorocottaMaster y permite el acceso al repositorio al

que hace referencia en GitLab. La idea del comentario “está encriptado y super seguro”,

es para intentar liar a los participantes y que intenten conectarse con la contraseña en

Page 40: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

texto plano (es el sha256 de c4s1_ac13rt4s). Una vez estén dentro del GitHub, podrán

descargarse el binario.

GitLab con el binario: Aquí tendrán usuario y contraseña para acceder.

El binario viene en un 7z con contraseña, que como se indica en el readme.md, es la

misma que el nombre del fichero (jeopardy).

Nota: Si veis que hay que cambiar algo o hacerlo más difícil, comentadme. Visto lo

que viene después, se haría muy largo entonces.

El binario (se llama Jeopardy, pero le podéis poner el nombre que queráis para adaptarlo

a la historia) viene empaquetado con UPX, por lo que primero debemos

desempaquetarlo.

Tirando un strings vemos que viene empaquetado con UPX

Lo desempaquetamos:

Page 41: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Con la opción upx -d se desempaqueta y ya en IDA se ve el flujo entero.

Una vez desempaquetado, si lo abrimos con IDA ya podremos ver cadenas de texto y

cosas interesantes:

Algunas de las strings que pueden ayudar a parchear

Page 42: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

El binario en si es bastante estúpido. Os dejo un diagrama con todos los caminos y todas

las soluciones antes de continuar:

Diagrama con todas las opciones.

Como podéis observar, al ejecutar

el binario sin parchearlo, solo

tendremos acceso a las opciones 1

a 3 (y a todas sus combinaciones

posibles). Para obtener acceso a la

opción 4 y a la 5, habrá que

parchear el binario. Una vez

parcheado, en la opción 4 habra

que hacer debugging del binario

para obtener el valor aleatorio para

la opción 4.1. Si lo adivinamos,

nos dará la ultima parte de la flag

falsa.

Ejecución básica del binario

Page 43: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Si ejecutamos la opción 5, solo podremos acceder a las opciones 1 y 2, la opción 3 y la

4 son inaccesibles sin parchear también. AL parchear, podremos acceder a la opción 5.4

que nos meterá en la función final que nos devolverá la flag real.

Si parchearamos bien, podríamos saltar a la opción 4 y sus características

O a la 5 y sus opciones también.

Además de estos entresijos en ejecución, si miramos con detenimiento las strings del

binario tras desempaquetarlo, veremos algunas pistas (dos mensajes en rot13 que te

pueden apuntar hacia la opción 5 y algunos otros valores que simulan ser flags falsas y

otros que son cachos de la flag real. Es imposible reensamblar la flag sin parchear y solo

con un strings (creo/espero xD).

Page 44: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Seguimos con el binario. Una vez desempaquetado, imaginemos que nos hemos pegado

ya un rato y sabemos que hay que parchear. Empezamos.

Vamos al inicio del programa (función main en IDA). Es la primera caja de la imagen

(la grande). A partir de ahí. Vamos a ir modificando los jmp que hay para que el binario

vaya por donde nosotros queramos, metamos el valor que metamos.

Diagrama de flujo del binario sin parchear

Diagrama de flujo parcheado (las coloreadas).

Una vez tengamos el flujo identificado, al tratarse de condicionales (jumps), nos bastará

con modificar en ensamblador la última línea de cada caja (es decir, el jmp). Para ello,

primero nombraremos todas las cajas (desde la 2 a la 16. La 17 y 18 no hace falta pues

ya viene con un jmp simple) con el nombre que queramos para crear un puntero al que

apuntar el jmp. Luego, lo que haremos será modificar el jmp que haya en cada caja por

jmp “Nombre asignado a la siguiente caja”. Veamos un ejemplo.

Observacion: Esta sería la manera “guarra”. La solución elegante sería modificar

exactamente las cajas donde se realiza la comparación de las opciones y hacer que

permita meter todos los valores existentes. (Queremos la flag, no un premio al reverser

del mes).

Page 45: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Queremos que la caja 2 apunte a la caja3, hemos llamado a la caja 3 “Caja3”. Por ello,

cambiamos el jmp short loc_4021BF por jmp Caja3 y entonces, cuando parcheemos,

metamos lo que metamos, el flujo del binario irá hacia esa caja.

Caja 2 debe ir a Caja 3. Para cambiar el nombre pulsamos en la cajita que tiene el lápiz.

Ahora Caja2 va a ir siempre a Caja3. Para cambiar los valores en ensamblador, hay que ir al botón assemble (edit/patch program/assemble en IDA).

Page 46: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Si hacemos esto en todas las cajas del flujo, nos quedará el siguiente diagrama.

Diagrama final

Si ahora ensamblamos el binario y lo ejecutamos, llegamos a la opción 5.4 y se ejecuta

la función que nos devolverá la flag.

Aplicar parches al binario una vez modificado todo.

Page 47: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Tras pulsar varias veces control+C nos va devolviendo la flag a cachos. Con ctrl+z paramos el binario.

Como se puede ver en la imagen, metiendo cualquier valor, nos va a dirigir a la opción

5 y, a su vez, a la opción 4, que es la que ejecuta la fucnion con la flag. La flag esta

dada a cachos y hasheada en varios cifrados. Si el usuario hubiera obtenido la pista,

sabría que tiene que juntarla. De todas formas, si usamos cualquier página de cracking,

obtendremos su texto claro de manera sencilla.

Yo he usado esta: https://md5hashing.net/hash

Habilitando la opción mass decrypt nos devuelve todo de golpe y sin pensar.

Page 48: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Solución

PISTAS

OSINT: Pendiente / Binario: 3 pistas

Primera pista: para los que están muy perdidos y no han visto que hay que abrirlo con

un desensamblador.

Segunda pista: si no han visto que está empaquetado con UPX.

Tercera pista: para indicar que hay que parchear para obtener el camino correcto

FLAG: flag{T1m31sG0lD}

Page 49: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

RETO #12 OFFLINE

RESP. MISION: a3n3rys_d

RECOMPENSA: 1000 SPACECOINS

Nuestro satélite secundario LossASat-1 estaba empezando a dar fallos inexplicables, lo

habíamos perdido… Como esta misma situación ya la había vivido en otras misiones,

aprendí que siempre hay que dejar una puerta trasera para reiniciarlo en casos de

emergencia, pero… estoy sin tiempo… demasiado en mi mente…ver cómo salir al

espacio exterior sin perder a ninguno de los miembros de la tripulación, asegurarme de

que nuestro agente está en perfecto estado, preparar la nave para la huida…

De nuevo serán ellos los que deberán encargarse de enviar un mensaje de reinicio al

satélite desde la estación de tierra.

SOLUCION La prueba tiene dos partes:

- OSINT/SIGINT: Los participantes tendrán que decodificar la información que está

enviando nuestro “satélite secundario” (un esp32). Para ello, deberán recabar datos

sobre el satélite “LossASat-1”. Lamentablemente, en Internet no se encuentra nada de

información sobre el mismo, pero sí de un satélite con un nombre similar, el “FossaSat-

1”.

Si por ejemplo miran en la guía de comunicación de Fossasat, verán que se hace alusión

al protocolo RTTY:

https://github.com/FOSSASystems/FOSSASAT-

1/blob/master/FOSSA%20Documents/FOSSASAT-1%20Comms%20Guide.pdf

Aunque existen distintos métodos para capturar y decodificar la señal, si capturan la

señal utilizando cualquier software de SDR durante un tiempo razonable y la almacenan

en un fichero de audio wav:

Page 50: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Y luego la traducen con un software como fldigi (o similar):

podrán conseguir los siguientes mensajes:

rtty.println("LOSSASAT-1_hardware_status");

rtty.println("LOSSASAT-1: batteryChargingVoltage error, batteryChargingCurrent

error, batteryVoltage error, solarCellAVoltage error, solarCellCVoltage error,

boardTemperature error, powerConfig malamente}");

rtty.println("LOSSASAT-1_backdoor_status");

rtty.println("LOSSASAT-1: Status:OK flag{1_w");

rtty.println("LOSSASAT-1_backdoor_system_status");

rtty.println("LOSSASAT-1: System Status:Failure");

En ellos viene la primera parte de la flag y dos llamadas a la backdoor:

LOSSASAT-1_backdoor_status

LOSSASAT-1_backdoor_system_status

Deberán hacer suposiciones para averiguar que la llamada correcta que deberán

escribir en la estación de tierra es “LOSSASAT-1_backdoor_system_reboot”.

- Hardware: Ahora llega la tarea fácil: escribir el mensaje en la estación de tierra para

que llegue el mensaje el satélite. El problema es que no tenemos teclado:

Page 51: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Pero en compensación, tenemos un ATTiny85 que puede emular un teclado sin

problemas. Para ello, creamos tiramos de tutorial:

https://fwhibbit.es/hackers-garage-box-3-conejizando-al-pato

Y una vez programado, lo enchufamos a la estación de tierra, reiniciamos el satélite y

nos dará la segunda parte de la flag:

Page 52: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

RECURSOS

Gracias a la ponente a cada participante se le proporcionará un attiny85 ya que será

necesario para ejecutar la prueba.

PISTAS

Primera pista: Nuestro LossASat-1 ha sido diseñado por el primo segundo de Julián

Fernández utilizando protocolos similares a los de su satélite. ¿Has probado a analizar la

señal con un decodificador específico para este protocolo?

Segunda pista: Alguien se ha llevado el teclado…qué oportuno. Tal vez es hora de usar

algo que te dieron al inicio de esta aventura. ¡Esperemos que no lo hayas perdido por el

camino!

Tercera pista: Manda un mensaje de ‘reinicio’ utilizando la ‘backdoor’ que has

encontrado.

FLAG: flag{1_w4nt_to_b3l13v3}

RETO #13

RESP. MISION: GIBDEON

RECOMPENSA: 1000 SPACECOINS

Confío en ellos plenamente…

Sé que conseguirán salvar a nuestro agente, pero… en el hipotético caso de que no fuese

así… mi maldita cabeza no para de pensar en la gran cantidad de posibilidades de no

volver a ver a mi amigo y mentor, eso me aterraba, sin su ayuda seria complicado,

pero…

Aún tenemos una posibilidad de escapar con éxito…

Recuerdo que antes de partir entre risas mencionó algo que me dejó un poco inquieto:

“En caso de que la misión no salga como esperamos y no volvamos a

vernos… recuerda que en las entrañas de esta nave hay la suficiente

potencia y sabiduría para salir al espacio exterior, sólo el

conocimiento os hará libres“

Page 53: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Algo me dice que así es, hombre solitario, se relacionaba mejor con las máquinas que

con los humanos, amaba el reversing, su cerebro trabajaba siempre a bajo nivel, donde

el kernel era su mejor amigo y hablaban el mismo lenguaje, con su inteligencia sería

capaz de ver mas allá, no sería capaz de dejar esta misión sin un plan “B”, ¿porque

mencionaría las entrañas de la nave, porque haría referencia a la ejecución de un binario

en una fecha y un intervalo de horario concreto?

De nuevo sus palabras resonaban en mi mente…

Recordad siempre…

Si queremos que sh3llc0n forme parte de ese ciberespacio en

equilibro, solo un binario ejecutado el día 24 de Enero de 2020 entre

las 20:00:00 y las 23:59:59 podrá mostraros las entrañas de la nave,

recordad, solo el conocimiento os hará libres!!!

SOLUCION

gcc -o nave nave.c -lgmp -lcrypto

#include <stdio.h> #include <time.h> #include <gmp.h> #include <stdlib.h> #include <string.h> #include <openssl/aes.h> #include "arrays.h" void print_data(const char *tittle, const void* data, int len); int main() { unsigned char aes_key[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; //unsigned char aes_input[]={0x66,0x6c,0x61,0x67,0x7b,0x53,0x70,0x34,0x63,0x33,0x78,0x48,0x33,0x6c,0x6c,0x7d}; unsigned char aes_input[]={0x4f,0x1c,0x94,0x2c,0x69,0xd6,0x23,0x0b,0x0e,0xc2,0x78,0x37,0xbc,0xe7,0x15,0x60}; mpz_t total, suma; mpz_init(total); mpz_init_set_ui (suma, 0); unsigned long long int temp1; time_t t; struct tm *tm; char fechayhora[100]; //fecha de salida es 23:13:37 de 24 de enero de 2020 t=time(NULL); tm=localtime(&t); printf ("Fecha Estelar: Son las %d:%d:%d\n", tm->tm_hour, tm->tm_min, tm->tm_sec); for(int i=0;i<tm->tm_year + 1900;i++){ for(int j=0;j<tm->tm_mon+12;j++){ for(int k=0;k<tm->tm_mday;k++){ //mpz_out_str(stdout,10,suma); for(int l=0;l<=tm->tm_hour;l++){ for(int m=0;m<=tm->tm_min;m++){ for(int n=0;n<=tm->tm_sec;n++){ temp1 = struct1[n*m] * struct2[l*m] * struct2[n]; mpz_add_ui(suma,suma,temp1); //mpz_out_str(stdout,10,suma);

Page 54: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

//mpz_add(total,suma,total); } } } } } } //mpz_out_str(stdout,10,suma); //printf("El total es %Zd",suma); /* Init vector */ unsigned char iv[AES_BLOCK_SIZE]; memset(iv, 0x00, AES_BLOCK_SIZE); /* Buffers for Encryption and Decryption */ //unsigned char enc_out[sizeof(aes_input)]; unsigned char dec_out[sizeof(aes_input)]; mpz_export(aes_key, NULL, 1, sizeof(char), 0, 0, suma); /* AES-128 bit CBC Encryption */ AES_KEY enc_key, dec_key; //AES_set_encrypt_key(aes_key, sizeof(aes_key)*8, &enc_key); //AES_cbc_encrypt(aes_input, enc_out, sizeof(aes_input), &enc_key, iv, AES_ENCRYPT); /* AES-128 bit CBC Decryption */ memset(iv, 0x00, AES_BLOCK_SIZE); // don't forget to set iv vector again, else you can't decrypt data properly AES_set_decrypt_key(aes_key, sizeof(aes_key)*8, &dec_key); // Size of key is in bits AES_cbc_encrypt(aes_input, dec_out, sizeof(aes_input), &dec_key, iv, AES_DECRYPT); /* Printing and Verifying */ //print_data("\n Original ",aes_input, sizeof(aes_input)); // you can not print data as a string, because after Encryption its not ASCII //print_data("\n Encrypted",enc_out, sizeof(enc_out)); print_data("\n Tu mensaje a esta hora del dia es",dec_out, sizeof(dec_out)); return 0; } void print_data(const char *tittle, const void* data, int len) { printf("%s : ",tittle); const unsigned char * p = (const unsigned char*)data; int i = 0; for (; i<len; ++i) printf("%c", *p++); printf("\n"); }

Ejecutamos el proceso y vemos que tarda un buen rato en procesar:

Abrimos IDA y vemos la clave con FF y los datos que luego pasa por AES como

entrada

Se ve claramente que necesitamos descifrar esos datos

Page 55: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Luego se ve un bucle que juega con el año, el mes, el día, la hora, los minutos y los

segundos

Page 56: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

Suma los datos que busca en las estructuras de datos de la db

Estas estructuras la 1 y la 2 se pueden exportar con un editor hexadecimal o con IDA en

edit export data, las necesitaremos para resolver, las meteremos en un fichero llamado

arrays.h

Volviendo al blucle vemos que la ejecución del reto tarda unos segundos en realizar

todos los bucles pero si nos fijamos solo juega con los arrays de horas minutos y

segundos

total = struct1[n*m] * struct2[l*m] * struct2[n];

Por lo tanto podremos hacer fuerza bruta para sacar todas las posibles keys de AES y

forzar la extracción de la flag

Codigo de Write up

#include <stdio.h> #include <time.h> #include <gmp.h> #include <stdlib.h> #include <string.h> #include <openssl/aes.h> #include "arrays.h" void print_data(const char *tittle, const void* data, int len); void main() { unsigned long long int total; mpz_t suma; mpz_init_set_ui (suma, 1); unsigned char aes_key[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};

Page 57: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

unsigned char aes_input[]={0x4f,0x1c,0x94,0x2c,0x69,0xd6,0x23,0x0b,0x0e,0xc2,0x78,0x37,0xbc,0xe7,0x15,0x60}; /* Init vector */ unsigned char iv[AES_BLOCK_SIZE]; memset(iv, 0x00, AES_BLOCK_SIZE); AES_KEY enc_key, dec_key; /* Buffers for Encryption and Decryption */ unsigned char enc_out[sizeof(aes_input)]; unsigned char dec_out[sizeof(aes_input)]; for (int dia=79200;dia<=86400;dia++){ int hora = dia / 3600; int min = (dia - (3600*hora)) /60; int sec = (dia - (3600*hora)) - (min*60); mpz_mul_ui(suma,suma,2020*24*12); unsigned char dec_out[sizeof(aes_input)]; unsigned char aes_key[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; mpz_export(aes_key, NULL, 1, sizeof(char), 0, 0, suma); memset(iv, 0x00, AES_BLOCK_SIZE); // don't forget to set iv vector again, else you can't decrypt data properly AES_set_decrypt_key(aes_key, sizeof(aes_key)*8, &dec_key); // Size of key is in bits AES_cbc_encrypt(aes_input, dec_out, sizeof(aes_input), &dec_key, iv, AES_DECRYPT); print_data("\n Tu mensaje a esta hora del dia es",dec_out, sizeof(dec_out)); mpz_init_set_ui (suma, 0); for(int l=0;l<=hora;l++){ for(int m=0;m<=min;m++){ for(int n=0;n<=sec;n++){ total = struct1[n*m] * struct2[l*m] * struct2[n]; mpz_add_ui(suma,suma,total); } } } } } void print_data(const char *tittle, const void* data, int len) { printf("%s : ",tittle); const unsigned char * p = (const unsigned char*)data; int i = 0; for (; i<len; ++i) printf("%c", *p++); printf("\n"); }

Para compilar gcc -o write write.c -lgmp –lcrypto

He usado C por comodidad pero se puede realizar en cualquier lenguaje lo más lógico

seria sacar las estructuras de datos a Python y usar las librerías de Crypto AES 128

Page 58: Diario de a bordo, día 24 de enero de 2020 - Zerolynx · Diario de a bordo... Año 2020, todo en el ciberespacio parece funcionar según lo establecido, tan solo perturba el hecho

RECURSOS

Nave.OS será subida al server

PISTAS No hay pistas

FLAG: flag{Sp4c3xH3ll}

==============================================================

NOTA IMPORTATE!!!

TODOS AQUELLOS PARTICIPANTES QUE SOLICITEN PISTAS SE LES

RESTARAN 100 PUNTOS DE LA PUNTUACION FINAL DE AQUELLA

PRUEBA DONDE SE HAYA SOLICITADO LA PISTA