how to hack a h4ckc0nt3st

Hace unas horas acabo de volver de A Coruña, donde pasé unos excelentes días entre charlas y talleres de excelente nivel técnico y amigos en las Jornadas de Seguridad Informáticas organizadas por GSIC.

Pero este post tiene otro objetivo que contar lo lindo que fue. Así que si esperabas algo blando, puedes dejar de leer acá :P (las fotos estarán online en breve). Lo que sigue es la respuesta larga a la pregunta que me realizaron varias veces en los últimos días: ¿Estas jugando al h4ckc0nt3st?. La respuesta corta era sí, lo estoy haciendo en este exacto momento, aunque no de la forma tradicional.

El contexto

Durante la conferencia, Miguel organizó un muy divertido hack contest. El objetivo era llegar a una respuesta a través de la resolución de diferentes desafíos. Dicha respuesta se metía en un formulario web (que escuchaba en http://10.20.63.1:666) y de esta forma se acumulaban puntos.

El hack

Dado que la red sobre la que se hacía el concurso era una wifi abierta y que el servidor recibía las respuestas de los participantes en texto plano (no usaba SSL), pensé que sería divertido escuchar las respuestas de los demás concursantes. El paso siguiente de enviar dichas respuestas a mi nombre resultó inevitable. De esta forma, cada vez que alguien enviaba una posible respuesta a un desafío, yo también respondía lo mismo. Logré automatizar ello con las siguientes líneas:

tshark -T fields -e data -i mon0 -R 'ip.dst == 10.20.63.1 and tcp.dstport == 666 and ip.src != mi.propia.ip ' | ./loro.py

Donde loro.py este archivo:

loro.py   

La explicación

Tshark es la versión de consola de wireshark. Este toma los paquetes de una interfaz en modo monitor (lee esto para aprender cómo). El modificador -f es el encargado de darme solo aquellos paquetes que vayan al servidor. Excluir del filtro a mi propia IP evita que el sniffer vea mis replayes y entre en loop (tardé en darme cuenta de esto, perdona Miguel por floodear tus logs). El script loro.py recibe el campo data de los por stdin (línea (#) 5), lo decodifica en ascii (#7), y chequea si es una respuesta (#8). Después lo divide y busca la cookie (# 9 a 11). Al encontrarla, la reemplaza por mi propia cookie (#12, fue una suerte práctica que no caducara). Luego vuelve a juntar todo (#13), lo imprime en stderr (#14, con fines de logging, nada más) y lo envía de nuevo al server (# 15 a 18).

Como dicen por acá, ¡a que mola!

7 thoughts on “how to hack a h4ckc0nt3st”

  1. ¡GRANDE Luciano!

    Siempre he esperado que alguien hackeara mi concurso pero desde luego, te llevas la palma por lo simple y efectivo del método (y por ser el primero también).

    Aún así, no era perfecto:
    - había varios puntos de acceso distintos con lo que no cubrías a todos los participantes (la red no era propia, sino de la Universidad).
    - los logs del sistema estaban llenos de "[luciano]". No eras precisamente "sutil"
    - para que el ataque fuera completo, hubieras necesitado algo tipo ARP-Spoofing, y eso sería detectabale desde el servidor

    Aún quedan otros vectores por los que atacar al sistema... ¿lo intentará alguien más?

    Cómo dije más arriba: ¡GRANDE Luciano! Tienes mi admiración y respeto (bueno, ya los tenías)

    Un abrazo!

  2. @Juanjo: no, no ganó! aunque lo hubiera hecho si le dejo y además, salvo protesta en contra, de forma legítima. Es "otra manera" de ganar: the hacker's way.

    al final acabé por poner SSL y ya no funcionó más!

    PD: chrome y otros navegadores protestaban por un puerto https inválido (6666). FireFox no. Curioso.

  3. Grande luciano! yo estaba en segunda fila justo detras de ti la primera jornada, y enseguida supe lo que estabas haciendo...
    Legítimo su uso, elegante su implementación... pero menos divertido que romperse los cuernos con la solución (especialmente con el reto 6 )

    :)

  4. Lo cierto es que subía puestos y acababa retos ¡¡¡¡estando sentado cruzado de brazos!!!
    Según parece ser, había que entregar el como se llegó a la solución, así que no hubiese colado ;-)

Comments are closed.