«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_