Práctica 2
Inyección SQL
¿Qué es SQL inyección? Inyección de
Código SQL es una vulnerabilidad presente por lo general en aplicaciones web
que permite a un atacante enviar particiones modificadas para interactuar con
la base de datos que usa la aplicación.
Listado
de comandos básicos en SQL:
·
Grant Utilizado para otorgar privilegios
·
Revoke Utilizado para eliminar privilegios
·
Create Utilizado para crear nuevos elementos (tablas,idices…)
·
Drop Utilizado para eliminar elementos
·
Alter Utilizado para alterar campos de las tablas
·
Select Utilizado para consultar registros de una tabla y comprobar que
satisfagan una condición determinada
·
Insert Utilizado para cargar lotes de datos en la base de datos
·
Update Utilizado para cambiar
valores de registros y campos
·
Delete Elimina registros de una tabla de la base de datos
Lista
de cláusulas básicas en SQL:
·
From Selecciona la tabla sobre la cual se va a operar (o sobre sus
registros)
·
Where Especifica las condiciones que se deben cumplir los registros que
se seleccionan
·
Group by Utilizado para separar registros en grupos
·
Having Especifica las condiciones que cumple cada grupo
·
Order by Ordena registros seleccionados
Ejecutar
insertarHorariosTrabajadores.exe y se verá el programa de inicio.
Base
de datos para probar SQL inyección:
Veamos
primero si la web en cuestión tiene este tipo de sentencias en su url:
“celebraciones.asp?ID=”, “libros.php?view=”, o cualquier otro tipo parecido. En
muchas ocasiones, introduciendo ahí nuestro código inyectado empieza el ataque,
pero esto lo explicaremos más adelante.
Nota1:
no siempre que tenga este tipo de sentencias es vulnerable
Nota2:
si ves ASP, ASPX, etc., piensa en que en un elevado tanto por ciento de los
casos, la base de datos será SQL.
Nota3:
Para comenzar el ataque, también podemos buscar formularios ligados a una
consulta a una base de datos SQL.
Si,
con SQL inyección podemos “saltarnos” algunos logueos pero el SQL Inyección es
mucho más, como se explicó al comienzo: podemos borrar una base de datos,
cambiarle el nombre a las tablas o hacer mil maldades. Imaginad por ejemplo una
página de venta de teléfonos móviles, podemos hacer que la persona que se nos
ocurra de la BD compre 1000 teléfonos, por ejemplo.
1.-
Ataque blind SQL Inyección.
El
BLIND SQL Inyección se considera un ataque a ciegas, es decir, sin conocer nada
sobre el server (Versión de SQL, nombre de las tablas, numero de tablas, etc,
que deberemos saber para concluir el ataque y para saber defendernos.)
2.-
Sacando el número de columnas de la BD
Bien
para sacar el número de columnas de la base de datos (BD, DB), vamos a inyectar
un código que cause un conflicto al llegar a un numero de columna, el cual no
se encuentra en la base de datos.
En
este caso, tenemos ya que la sentencia SQL que realiza la consulta el del tipo:
“SELECT
* FROM TRABAJADOR WHERE [clave personal]='” & pass & “‘ AND
TRABAJADOR='” & usuario & “‘”
Conclusiones
Lo
más sensato que debemos tener en cuenta al prevenir estos ataques es filtrar el
carácter ‘ (comilla simple), si hablamos a nivel de web, hacerlo siempre en
cliente y servidor, si hablamos en un entorno de red local, filtrar la entrada
del campo en el programa.
A
nivel de web, si sólo se filtra en el cliente, es fácil saltarse la validación
y provocar un fallo del estilo de los que hemos visto, para extraer
información, de ahí la necesidad de hacerlo en el cliente.
No hay comentarios:
Publicar un comentario