Está en la página 1de 5

Practica SQL INJECTION

- Para esta práctica estaremos usando la plataforma dvwa dentro del apartado de SQL
Injection.

➔ Usuario: admin
➔ Contraseña: password

pág. 1
Teoría
La inyección SQL, o SQLi, es un tipo de ataque a una aplicación web que permite a un
atacante insertar sentencias SQL maliciosas en la aplicación web, obteniendo
potencialmente acceso a datos sensibles en la base de datos o destruyendo estos datos.

¿Qué es la base de datos information_schema?


information_schema es la base de datos donde se guarda la información sobre todas
las demás bases de datos, por ejemplo; nombres de una base de datos o una tabla, su
tipo de columna, privilegios de acceso, etc. Se trata de una base de datos virtual
integrada con el único propósito de proporcionar información sobre el propio sistema
de base de datos. El servidor MySQL ingresa los datos automáticamente en las tablas
de la base de datos information_schema.

Lo más importante que hay que recordar acerca de la base de


datos information_schema es que puedes realizar consultas, pero no puedes cambiar

su estructura ni modificar sus datos.

Delete: Permite eliminar registros de la base de datos.


Update: Modifica valores de campos previamente creados.
Select: Sirve para consultas registros en la base de datos.
Insert: Carga lotes de datos en una base de datos.

Order By: Ordena registros seleccionados


Group by: separa registros
Having: expresa una condición que debe satisfacer cada grupo
From: Sirve para especificar una tabla de la cual se quieren obtener registros
Where: Sirve para las condiciones que debe reunir un registro para ser seleccionado

Union: Sirve para combinar el resultado de dos consultas juntas.


Information_schema.tables: Devuelve información de una tabla determinada
Information_schema.columns: Devuelve información de una columna determinada
Concat: Concatena los resultados de varios campos diferentes
Group_concat: devuelve como resultado una cadena de concatenación de un grupo de

pág. 2
valores no nulos Char: se utiliza para insertar caracteres de control en cadenas de
caracteres.

¿Cómo me doy cuenta si es o no vulnerable?

Empieza la parte entretenida. Lo que provocar un error en la base de datos.

¿Y de qué forma podemos provocar un error?

Fácil… colocando caracteres no permitidos, por ejemplo, una comilla, un numero negativo, etc.
Colocare una ‘ y veremos cómo se comporta la web

Nos tira un error de la base de datos

SQL Injection

Columnas.

Ahora tendremos que averiguar el numero de columnas exactas que tiene la base de
datos. Para ello haremos usos de ORDER BY que nos permitirá ordenarlas. En este
ejercicio no hay 100 columnas por lo tanto el valor debe aumentar o disminuir

‘ORDER BY 100-- -

Etiquetas.

Ahora tendremos que “seleccionar esas columnas” a estas las llamaremos etiquetas para
ello usaremos UNION SELECT. En este caso no hay 10 columnas.

‘UNION SELECT 1,2,3,4,5,6,7,8,9,10-- -

Una vez encontrado el número exacto el error desaparecerá y se hará una consulta que
devolverá las etiquetas.

pág. 3
Ahora debemos escribir SQL en lugar del numero de la etiqueta. Por ejemplo sacaremos
la versión de MYSQl

Los ejemplos dados ahora necesitan modificaciones para el ejercicio.

Extraer bases de datos.

‘union select group_concat(schema_name),2,3 from information_schema.schemata-- -

Con esta sentencia podremos extraer las bases de datos que existen. Usaremos
group_concat para que nos de todas y ahorrarnos varias consultas.

schema_name → Hace referencia al nombre de la base de datos

information_schema.schemata → La base de datos de la que previamente hemos hablado


accediendo a la tabla schemata.

Extraer Tablas.

‘union select group_concat(table_name),2,3 from information_schema.tables where table


_schema=database()-- -

Con esta sentencia podremos extraer las tablas de la base de datos en uso, esto es
debido a la función database() y accediendo a la tabla tables de information_schema. Si
queremos ver las tablas de otra base de datos solo tendremos que cambiar database()
por el nombre de otra base de datos.

pág. 4
Extraer Columnas.

‘union select group_concat(column_name),2,3 from information_schema.columns where tab


le_schema=database()

Con esta sentencia podremos extraer las columnas de la base de datos en uso a través
de information_schema.columns

Extraer Datos.

‘union select group_concat(usuarios,contraseñas) from nombre-de-la-tabla-- -

Usuarios y contraseñas hacen referencia a las columnas extraídas anteriormente.

Ejercicios
1. ¿Cuántas columnas tiene la base de datos?
2. ¿Cómo se llama la base de datos utilizada?
3. ¿Qué usuario está ejecutando dicha base de datos?
4. ¿Qué bases de datos existen?
5. ¿Qué tablas tiene la base de datos en uso?
6. ¿Qué columnas tiene la base de datos en uso?
7. ¿Cuál es la contraseña y hash del administrador?

pág. 5

También podría gustarte