viernes, 23 de febrero de 2018

SQL Injection para dummies (Tercera y última parte)

Buenas de nuevo.

En este tercer y último post sobre SQL Injection (por ahora) vamos a sacarle todo el jugo al asunto, y a la base de datos.

Una vez hemos hecho el reconocimiento sobre el sistema objetivo, vamos a intentar obtener los datos de más campos de la base de datos, no solamente los nombres y apellidos como obtuvimos con el “ ‘ or ‘1’=’1 “.


Para empezar, intentemos averiguar qué bases de datos se encuentran actualmente en el sistema objetivo. Para ello ejecutaremos “ ‘ union select distinct(table_schema), null from information_schema.tables # “.



Vamos a desglosar también esta consulta. “distinct()” nos muestra resultados omitiendo repeticiones. “table_schema” es el campo que guarda la estructura de las bases de datos que hay. “information_schema” es la base de datos donde se guarda la información sobre todas las bases de datos almacenadas y gestionadas. Dentro de ella, hemos querido acceder a las tablas(".tables"), para obtener el nombre de cada una con el “table_schema”.
Observamos que tenemos cuatro bases de datos distintas, pero solo nos vamos a centrar en “dvwa” que es la que hemos visto antes al hacer el reconocimiento del objetivo. Como ya estamos ejecutando las consultas sobre ella, no es necesario que la especifiquemos en ningún momento, pero si quisiéramos obtener datos de otra base de datos sí que nos vendría bien saber cuáles existen.

Para ver ahora el nombre de todas las tablas que contiene la base de datos “dvwa” ejecutaremos “ ' union select distinct(table_name), null from information_schema.tables # ”.
Dentro del enorme listado de nombres que obtenemos, si vamos leyendo una a una descubrimos una que nos puede interesar: “users”. Tenemos también una que se llama “user” pero esa no nos interesa ahora mismo, así que vamos a centrarnos en la primera.
Vamos pues a extraer información de esta tabla. Para ello ejecutaremos “ ' union select column_name, null from information_schema.columns where table_name = 'users' # “. Aquí estamos seleccionando el nombre de la columna de la tabla que contiene las columnas dentro de information_schema, y filtrando por el nombre de la tabla que deseamos ver.



Una vez que hemos visto qué columnas tiene esta tabla, observamos dos bastante jugosas: “user” y “password”. Veamos qué contienen. Para ello emplearemos la consulta “ ' union select concat(user, 0x3a, password), null from users # “. Aquí usamos el concat() que mencionamos anteriormente, que recibe las columnas a mostrar, y entre medias un valor hexadecimal para emplear como separador. En este caso hemos empleado 0x3a que es la representación hexadecimal de dos puntos ( : ).

Y aquí ya tendríamos los usuarios y claves hasheadas de la base de datos.



Hasta aquí estos posts introductorios sobre SQL Injection. Espero que os hayan gustado, que hayáis aprendido algo nuevo, o que al menos os haya sido una lectura amena.

Un saludo y hasta la próxima

AlDr0id

0 comentarios:

Publicar un comentario