Ikasten.IO
Learning, Aprendiendo

HackIt! 2014 : epílogo 28 Septiembre, 2014

Tras mi insistencia a @ramonechavarri y @abeaumont de w0pr para que nos echara un cable con el writeup de alguno de los dos levels del HackIt! 2014 que se nos quedaron en el tintero, nos pasaron hace unos días un extenso y completo texto que explica paso a paso en qué consiste y cómo superar el último nivel, la marcanada del año (TM) 🙂

Captura de pantalla 2014-09-28 a la(s) 18.55.05

¡Disfrutadlo!

2 comentarios en HackIt! 2014 : epílogo

HackIt! 2014: final 26 Agosto, 2014

Hubo otra prueba que nos tuvo a todos los participantes danzando al lado de la “caseta” de redes y sistemas. @marcan42 puso una Raspberry Pi enviando pings extraños vía wifi. El título del level era “Raspberry Pi(ng)” y el enunciado decía:

“Hemos montado una Raspberry Pi de router wifi (¡no se lo digas a Iban!), pero le ha poseído algo raro al kernel y nos hace cosas muy raras. ¿Podéis mirar a ver qué pasa? La contraseña es 0hvoit6e y el SSID lo he puesto yo”.

Una vez encontrado el SSID (como digo, cerca de “control”), tuvimos algunos problemas porque de vez en cuando la señal desaparecía. Cuando conseguimos encontrarla de forma estable (por el camino desvirtualizamos a la gente de amnesia, como @L0ngin0s y @thePoPe, ¡kudos! y hablamos con @tatai, que lógicamente no soltó prenda – tenían la prueba pasada – entre otras cosas porque había 2 equipos justo detrás de NavarParty a un level) lanzamos Wireshark para esnifar y analizar el tráfico. Lo primero que nos sorprendió fue el ver paquetes IPv4 con contenido IPv6 (¿WTF?) como éstos:

eth1_wireshark_scapy

La IP 192.168.42.1 estaba emitiendo en broadcast mensajes de ping con el texto “I’m so lonely here :-(” La idea era responderle a esos pings (con empaquetamiento travestido). Había que afinar con el id de respuesta y el id de secuencia. El checksum… por ahora mejor no ponerlo, y si luego lo pide, ya nos estrujaremos un poco más el bolo 🙂

Bien, ¿y cómo demonios generamos un paquete ping con esas características tan “al detalle”? Con Scapy, una potente herramienta de manipulación de paquetes desarrollada en Python.

Construimos un paquete como el siguiente:

scapy_2
(UPDATE: añadir data=”I’m so lonely here :-(” como opción a ICMPv6EchoReply)

y vimos que se enviaba, pero no a la dirección MAC correcta sino en broadcast… Mmmh… momento para sacar la MAC de la Raspi de Wireshark y fijarla a manivela:

Ahora debería funcionar… lanzamos de nuevo el paquete Scapy y… no vemos respuesta en Wireshark. ¿Qué demonios? Aquí es cuando @marcan42 nos comunicó que quedaban 3 minutos… 2 minutos… 1 minuto… Ya sabéis, con calma 🙂
@ochoto fue a quien se le ocurrió: igual es que el filtro de Wireshark no era correcto y estábamos “escondiendo” la respuesta de la Raspi… ¿por qué no filtrar por la MAC en lugar de por el protocolo? Veamos…

scapy_3

¡Bingo! (PD: hay que ser maléfico para devolver la respuesta justo con un empaquetamiento inverso al que se nos presentó originalmente, IPv6 sobre IPv4). “Pero… ¿qué hora es? Las 14:01… oh, ¡shit! perdimos por 1 minuto…”

Acabada la prueba nos fuimos a hablar con la gente de @w0pr y @tatai que andaban por allí. @abeaumont y su equipo estuvo luchando con el último level, “la marcanada del año”, durante muchas horas y -también sobre la campana de las 14:00- parece ser que lo resolvieron. Hubo algún revuelo porque llamaron a @marcan para que revisara la prueba… No sé si finalmente entró su solución o no, pero lo que sí sé es que terminaron todos los niveles y eso, señoras y señores, es para quitarse el sombrero.

1 comentario en HackIt! 2014: final

HackIt! 2014 _ Level 6 14 Agosto, 2014

¿Level 6? ¿Y qué ha pasado con el level 5? El nivel 5 está cocinándose en el server de @marcan42 (prepararlo sobre un server con arquitectura Big Endian requiere su tiempo ;-). Así que vamos a por el level 6. No pudimos superarlo en la competición. Tras la Euskal, con ayuda de Timosoft, supimos por dónde tirar. El título del reto es “A null is a null” y reza así: ‘Hemos recibido una imagen forense de una tarjeta SD, pero no encontramos nada interesante…’. La imagen es un fichero llamado image:

Intentamos montarlo en modo lectura:

El directorio lost+found está vacío. El fichero data.bin está compuesto de 0’s.

Pues qué bien… aquí nos quedamos clavados. @acuartango le dedicó unas cuantas horas a salir del atolladero, pero no conseguimos ver la solución.

La cuestión es que el fichero image es un fichero disperso (sparse). Algunos bloques están ocupados – con 0’s – y otros no. Podemos verlo con este comando:

A null is a null… Si no hay bloque ocupado, tendremos un 0. Si está ocupado, tendremos un 1. Así,

Si agrupamos esa ristra de bits (0’s y 1’s) de 8 en 8, y los interpretamos como caracteres ASCII, tendremos la solución 😉

Un script quick&dirty en Python que lo hace por nosotros:

No hay comentarios en HackIt! 2014 _ Level 6

HackIt! 2014 _ Level 4 13 Agosto, 2014

“Bitcode. Esta vez te toca investigar lo profundo de Python.” Para ello, nos pasan un fichero tar.gz que contiene un archivo main.py (texto plano) y otro routines.pyc (binario).

Así que lo que queda por hacer es entender la función chk_serial… que está en el binario. Hay que descompilar el routines.pyc y analizar… Vamos allá. Lo primero es bajarse e instalar la aplicación uncompyle:

descompilar:

y analizar:

Bueno, no parece difícil 🙂

Done!

1 comentario en HackIt! 2014 _ Level 4

HackIt! 2014 _ Level 3 11 Agosto, 2014

poor_mans_stego_ nyan0verflow, “No siempre todo es lo que parece. Y lo que aparece no es siempre el todo”. Con la foto de un gato (no es nyan cat 😉 y el texto anterior empieza el tercer reto del HackIt! Atendiendo al nombre de la imagen, a simple vista parece que han usado algún algoritmo de esteganografía (¿simple?). Probando con outguess y steghide, no parece que saquemos nada en claro.

Aquí Joserra sacó un truco de su chistera. Si abres el jpg en un editor (vim, por ejemplo) y eliminas al azar algunas líneas (entre 3 y 5), grabas y abres el jpg, verás que el gráfico esconde unas líneas más de las que se muestran sin hacer ningún cambio (poor man’s stegano 😉 Si sigues eliminando, verás el mensaje oculto:

poor_mans_stego

Dos cosas: primera, como veis, la resolución fue de chiripa. Segunda: realmente lo que está ocurriendo es que el jpg que nos pasan tiene codificada en las cabeceras una altura distinta a la que realmente ocupa la imagen. Modificando con un editor hexadecimal la altura de la imagen (0xc9 = 201) y añadiéndole algunos pixels más (por ejemplo, cambiando el 0xc9 por un 0xf0), obtendremos una forma más ortodoxa de pasarse el nivel 🙂

7 comentarios en HackIt! 2014 _ Level 3