Nivel 2: Is anybody there?

«Hello 123.123.123.123? Is anybody there?» Así reza la primera línea de texto de la prueba 3 (nivel 2). Parece que el servidor quiere comunicarse con nosotros. Si analizamos las cabeceras HTTP con algún programa (por ejemplo, con el plugin LiveHTTPHeaders), podremos ver lo siguiente:


HTTP/1.x 200 OK
Date: Fri, 08 May 2009 22:16:08 GMT
Server: Apache/2.0.52 (CentOS)
X-Powered-By: PHP/4.3.9
YouWillNeedThis: theplanet
Set-Cookie: toctoctoc=3306
Content-Length: 232
Connection: close
Content-Type: text/html

«YouWillNeedThis: theplanet»… curiosa cabecera 😉 Esa pista la necesitaremos en el futuro.
Y el nombre de la cookie es auto-explicativa: el servidor nos está llamando. ¿A dónde? Al puerto 3306. Ese puerto es conocido, ahí suele estar a la escucha el servidor MySQL. No hay que pensar mucho más… aunque a algunos grupos esta prueba se les hizo cuesta arriba, jejeje…

Con Wireshark es posible capturar la trama que nos confirma ese intento de conexión. ¿Abrimos el puerto 3306 a ver qué pasa?

$ nc -l 3306

Recargamos la página y… nada, no conecta. La conexión se resetea. Parece que tiene que haber un servidor MySQL de verdad escuchando en el 3306 (no vale con netcat). Ponemos en marcha MySQL, recargamos la página y… nada. Mmmh…

Aquí hay que pensar un poco (más). Por seguridad, MySQL sólo se queda a la escucha a las peticiones que lleguen de localhost (127.0.0.1). Esto se define así en /etc/my.cnf :

bind-address = 127.0.0.1

Si queremos que escuche las peticiones de nuestra IP pública, sólo tenemos que ponerlo.

bind-address = nuestra_IP_publica

Ponemos en marcha de nuevo el servidor:
$ sudo /etc/init.d/mysql start

y el Wireshark a la escucha. Bingo.

Sabemos que el login es «hack». ¿Y el password? Bueno, aquí es donde la pista que nos llegó al principio nos ilumina el camino: theplanet. La forma más fácil de proceder ahora sería crear el usuario hack/theplanet y volver a recargar la página. Analizando el tráfico con Wireshark veremos que intenta usar la base de datos hackit. A continuación lanza la query:

insert into pereza
set ID=», hackme=’%5f%61%63%69%64%69%61%5f’

¡Ajá! ¿y para traducir de Hexa a ASCII?

$ echo -e «%5f%61%63%69%64%69%61%5f» | sed -e ‘s/%//g’ | xxd -r -p
_acidia_

Nivel 1: hidden message

Esta prueba 2 (nivel 1) ha resultado ser la que más fácilmente han superado los participantes. Al entrar, lo primero que vemos es un enlace a un fichero de texto con el título «Hidden Message». El contenido a primera vista es vacío… pero si realizamos una selección con el ratón veremos que está lleno de espacios en blanco. Cada línea tiene un número distinto de espacios en blanco (entre 65 y 120) Esos números nos deben de hacer sospechar que representan caracteres ASCII. Basta por tanto con contar los espacios en blanco de cada línea, codificarlos a los caracteres correspondientes y leer el mensaje: «The Seven Deadly Sins and the Four Last Things: Pass: CAVE CAVE DEUS VIDET»

Por ejemplo, este método Java descodificaría el mensaje de blancos que le llega como parámetro:

public static String descodificar(String mensaje){
String res = «»;
Scanner s = new Scanner(mensaje);
s.useDelimiter(«n»);
while (s.hasNext()){
String espaciosLinea = s.next();
char c = (char) espaciosLinea.length();
res = res + «» + c;
}

return res;
}

Nivel 0: dc

Como dice la Wikipedia, dc es una calculadora de escritorio, en modo comando, multi-plataforma, que sigue una notación polaca-inversa, con soporte de precisión aritmética ilimitada. Es una de las utilidades Unix más antiguas que existen, más aún que el propio lenguaje C (o sea, de la época de los dinosaurios, más o menos 😉 Como muchas otras utilidades de esa añada, posee un extraordinario conjunto de funcionalidades pero su sintáxis es críptica como ella sola. Bien, ¿a qué viene todo esto? A que la primera prueba del HackIt Tolosa’09 (la prueba 0) hace uso de un truco para codificar cadenas de caracteres usando dc. Si abrimos la página del nivel 0, veremos que se nos muestra esta secuencia de comandos dc:

[q]sa[ln0=aln256%Pln256/snlbx]sb3135071790101768542287578439snlbxq

Al ejecutarla :
echo ‘[q]sa[ln0=aln256%Pln256/snlbx]sb3135071790101768542287578439snlbxq ‘ | dc

Nos muestra la cadena:
GET A LIFE!

Alguno de los participantes se tiró un buen rato probando esta cadena de caracteres como clave (en todas su posibles modalidades, ¿a que sí, ochoto? 🙂 Incluso analizando paso a paso lo que hace (un buen ejercicio que os recomiendo y que incluso xabi nos podrá mostrar).

El caso es que esa no era la solución. Si nos fijamos en el código fuente HTML de esa misma página, y nos desplazamos hacia la derecha (scroll), veremos que como comentario, aparece esta otra cadena:

16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlb xq

Siguiendo el mismo procedimiento que antes, obtenemos la clave para el siguiente nivel: «RTFM», o sea, Read The … er… FINE ? .. Manual 🙂

¿Que quieres escribir tus propias frases codificándolas con dc? No hay problema.

HackIt! Tolosa Encounter 2009 online

Como ayer mismo indicaba, he generado un subdominio en DiarioLinux para poder jugar al HackIt! de la Tolosa Encounter 2009 desde la comodidad de nuestras casas. Varias cosas al respecto:

* Comentaremos día a día todas las pruebas, dándoos al menos 24 horas para intentar resolver cada ejercicio por vuestra cuenta. Si necesitáis más, no problem, pero no leáis los comentarios/spoiler 🙂

* El nivel de dificultad es inferior al del HackIt! de la Euskal (recordad que tenéis un par de ellos online, gracias al gran trabajo de txipi… por cierto, que acaban de video-entrevistarle, a ver qué nos cuenta :-).

* Como me dijo Sabino, «la web es muy accesible, eso sí, porque no tiene nada más que texto», ni un sólo «colorín». Dani/ITSAS diría «muy soviética» 🙂

Que ustedes lo disfruten.

HackIt! Gipuzkoa Encounter 2009

De viernes a domingo se celebró la GipuzkoaEncounter-3 en Tolosa. Aparte de estar con amigos a los que sólo veo 2 veces al año (en Tolosa y en la Euskal, en Barakaldo), este año, junto con Jon de MoreNops y el soporte de Proyelia, nos liamos la manta a la cabeza y preparamos 7 pruebas para el primer HackIt! de la Gipuzkoa Encounter 🙂

Zorionak a todos los participantes y especialmente a Timosoft, Ochoto y Willix, que coparon los primeros puestos de la clasificación, con muy buena participación . A partir de mañana publicaré las pruebas para que el resto del mundo pueda jugar y comenzaré a comentarlas, todas ellas, gracias a que los dos primeros clasificados las completaron todas (y ya no es posible su reutilización).

Aprenderemos nuevas técnicas (algunas de ellas sorprendentes de verdad, dado que no formaban parte del camino más sencillo, pero en mi opinión fueron más brillantes que las que yo mismo proponía O:-) y veremos cómo pasar la prueba fatídica del nivel 3 (empezando desde cero, prueba 2), que fue un cuello de botella (cerca de la mitad de los participantes se atascaron en esa prueba) y la del penúltimo nivel (en la que Willix se clavó durante más de 12 horas).