SQL Injection.
Universidad
Tecnológica de Santiago
(UTESA)
Facultad de Arquitectura e Ingeniería
Carrera de Informática
Seguridad
Informática
Sección: 002
PRESENTADO POR:
JORGE CUEVAS Q. 1-12-3716
KIRMAN RAMIREZ
3-13-4610
ALEXIS LEDESMA 2-12-6629
HENDER GARCIA 2-10-5657
MAIKEL A. MONTES DE OCA 1-10-3697
Asesor:
Ing.: Juan
José Díaz Nerio
Santo domingo,
República dominicana
Abril, 2017
SQL Injection.
La
inyección de SQL no es más que la
infiltración de código intruso para
vulnerar la seguridad de un sistema y exponer información atreves de errores en
la validación de la data.
El
siguiente articulo se muestra el uso de la inyección de SQL para obtener
información de las credenciales de un
usuario en un sistema.
Para
lograr exponer un ejemplo de este tipo necesitamos crear el ambiente al cual
atacaremos para tratar de obtener información, en esta ocasión usamos virtual
box para crear una maquina virtual y emular un sistema al cual atacaremos con
la Inyección de SQL.
Descargar
Virtual Box.
Por
cuestiones prácticas a continuación dejo el link de donde pueden descargar un
archivo de configuración de un maquina virtual con virtual box.
·
https://www.dropbox.com/s/1km8n8v5gzd6mxq/dvwa.7z?dl=0.
·
Al
descomprimir el archivo se creara una
creara una carpeta con tres archivos de extensión .vbox, con el nombre del sistema operativo que estés usando.
Ejecutamos Virtual Box e importamos el
archivo de la maquina virtual seguido a
esto iniciamos la maquina virtual. Luego de la maquina haber iniciado
satisfactoriamente nos muestra la
termina en una interfaz de login que tiene en su cabecera datos para poder
conectarnos a la aplicación (IP) que penetraremos a través del protocolo HTTP y
un navegador de internet.
Al acceder por el navegador con la dirección http://192.168.56.101/login.php
nos aparecerá una pantalla de login la
cual suministraremos las credenciales de Username:
admin , Password: password.
Para hacer nuestra prueba de inyección de SQL
necesitamos configurar el nivel de seguridad de nuestro admin , para estos
vamos a la parte de DVWA Segurity y cambiamos el nivel de seguridad a "Low".
Para hacer nuestra primera prueba de
inyección SQL vamos a nuestro menú y elegimos la opción SQL Inyección, para
probar que tenemos acceso a la datas insertamos en los parámetros :
Con esto lo que estamos haciendo es una
consulta SQL a la base de datos donde seleccionamos el usuario cuyo número id
es igual a una , la instrucción SQL sería la siguiente :
SELECT first_name, last_name FROM users WHERE user_id
= id
Luego
vamos hacer la primera inyección para exponer data aprovechando una debilidad
de validación insertando en el campo de entrada ( %' or 0=0) esto creara la siguiente sentencia SQL:
SELECT first_name,
last_name FROM users WHERE user_id = '%' or '0'='0';
Esto nos
devolverá una lista de los usuarios de la base de datos pues estamos engañado
el motor de base de datos de manera que
nos muestras todo los datos verdaderos y los datos falso que cumplen con la
sentencia SQL para todos estos usuario en la tabla usuarios de la base datos.
La próxima inyección es la siguiente (%' or 0=0 union select null, user() #), Esto nos mostrara todos los usuarios y el nombre de el usuario
root de la base de datos a la que estamos aplicando la inyección SQL.
Luego
obtendremos el nombre de la base datos , inyectando la siguiente instrucción (%' or 0=0
union select null, database() #).
Para ir más a fondo vamos a obtener información
sobre las tablas de la base de datos para esto vamos a modificar la inyección
anterior de la siguiente manera:
(%' and 1=0 union select null, table_name
from information_schema.tables)
Estos nos mostrara todas
las tablas de la base de datos en la que estamos trabajando incluyendo las de
el motor de la base de datos:
Pero en esta ocasión
nuestro objetivo es obtener información de los usuarios del sistema para de
esta manera
obtener información de el
administrador y tener control sobre el sistema. Con la siguiente instrucción
vamos a mostrar todas las tablas que tengan relación con la palabra user:
%' and 1=0 union select null, table_name from information_schema.tables where table_name like 'user%'#.
Queremos exponer los datos
de los usuarios pero no sabemos como estan compuestas las columnas de la tabla
de usuarios para obtener información, como el nombre y user name , Para
descubir como esta compuesta la tabla users insertamos la siguiente
instrucción.
(%'
and 1=0 union select null, concat(table_name,0x0a,column_name) from
information_schema.columns where table_name = 'users' #
)
La imagen nos muestra que la tabla
esta compuesta por campos como user_id, fitst_name, last_name, user y password.
Con esta información ya
podemos obtener las credenciales de los usuarios de esta base de datos para
ello necesitamos inyectar la base de datos de la siguiente manera:
(%' and 1=0 union select null,
concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users #)
En la imagen podemos ver
el nombre de el usuario con su respetiva contraseña esto nos da la oportunidad
de
autenticarnos en el sistema con cualquiera de las credenciales de los usuarios.
En esta práctica aprendimos que es la
inyección de SQL , que esta le permite a los usuarios cuando hace el uso inadecuado de el mismo , por otro
lado nos da la oportunidad de aprender que precauciones debemos tomar a la hora
de desarrollar algún software en cuanto a validación para garantizar la seguridad de los usuarios
que intervienen en el mismo.
Comentarios
Publicar un comentario