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.
·              https://www.virtualbox.org/wiki/Downloads.
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