CyberCamp-USAL Inyección SQL
CyberCamp-USAL Inyección SQL
Antes de analizar las amenazas y peligros de los ataques de inyección SQL necesitamos tener nociones
básicas acerca de las bases de datos y el lenguaje SQL. Una base de datos no es más que una colección de
información que está organizada de manera que se pueda acceder, administrar y actualizar fácilmente.
Normalmente, se almacenan de forma electrónica en un sistema informático.
La propia base de datos y el sistema gestor de base de datos o SGBD (también llamado DBMS, del inglés
database management system) conforman lo que se denomina el sistema de base de datos. En términos
generales, un SGBD es un software que sigue un modelo de sistema de base de datos y, por lo tanto, resulta
decisivo a la hora de configurarla, administrarla y utilizarla.
Solo cuando el sistema gestor de base de datos está instalado y configurado, los usuarios pueden introducir y
consultar los datos. Los permisos de lectura y escritura, así como las funciones de administración generales,
se establecen mediante las interfaces específicas de la aplicación y el lenguaje de definición de datos
correspondiente. El más conocido de estos lenguajes es SQL (Structured Query Language, lenguaje de
consulta estructurada), el cual veremos en la siguiente diapositiva.
www.cybercamp.usal.es
¿Qué es el lenguaje SQL?
SQL (en inglés Structured Query Language) es un lenguaje gestor para el manejo de la información en las
bases de datos relacionales. Este tipo de lenguaje de programación permite comunicarse con una base de
datos y realizar operaciones de acceso y manipulación de la información almacenada.
En concreto, se llevarán a cabo 4 acciones que en conjunto se conocen como CRUD, cada una de las letras
de esta sigla corresponden a una acción en particular: Create (crear), Read (leer), Update (actualizar) y Delete
(eliminar). El objetivo de realizar cada una de estas acciones es la de almacenar, organizar y clasificar los
datos. Pero también funcionan para corregir los errores en la manipulación de información.
Las bases de datos SQL son las más utilizadas en la actualidad. Consisten en bases de datos relacionales
que utilizan el lenguaje SQL. Estas bases de datos están formadas por tablas con filas y columnas. En las
filas figuran los diferentes registros de la tabla, mientras que las columnas corresponden a los campos.
www.cybercamp.usal.es
Ejemplo de una base de datos SQL
www.cybercamp.usal.es
¿Qué es la inyección SQL?
La inyección de SQL es un tipo de ciberataque encubierto en el cual un hacker inserta su propio código en un
sitio web con la intención de quebrantar las medidas de seguridad y acceder a datos protegidos. Una vez
dentro, puede controlar la base de datos del sitio web y apoderarse de información de los usuarios.
Si un desarrollador web no es meticuloso, al crear un sitio podría dejar un resquicio que alguien con malas
intenciones podría usar para provocar efectos inesperados en su base de datos. Las inyecciones de SQL (o
SQLI) se producen cuando el hacker introduce o inyecta en el sitio web código SQL malicioso, un tipo de
malware que se conoce como la carga útil, y consigue que envíe ese código a su base de datos como si de
una consulta legítima se tratara.
www.cybercamp.usal.es
¿Cómo funciona la vulnerabilidad de inyección SQL?
Una vulnerabilidad de inyección SQL proporciona a un atacante un acceso completo a la base de datos de su
aplicación mediante el uso de sentencias SQL maliciosas.
Veamos un ejemplo sacado de <https://kinsta.com/es/blog/inyeccion-sql/> de cómo se ve una aplicación
vulnerable.
Imagine el flujo de trabajo de una típica aplicación web que implica solicitudes de bases de datos a través de
las entradas del usuario. La entrada del usuario se realiza a través de un formulario, por ejemplo, un
formulario de acceso. A continuación, se consulta la base de datos con los campos enviados por el usuario
para autentificarlos.
La estructura de la consulta a su base de datos es algo así:
www.cybercamp.usal.es
¿Cómo funciona la vulnerabilidad de inyección SQL?
Para simplificar, supongamos que está almacenando sus contraseñas como texto claro. Sin embargo, es una
buena práctica cifrar sus contraseñas y luego convertirlas en hash. A continuación, si ha recibido el nombre de
usuario y la contraseña del formulario, puede definir la consulta en PHP de la siguiente manera:
Si alguien introduce el valor «admin’;-» en el campo de nombre de usuario, la consulta SQL resultante que
genera la variable $db_query será la siguiente:
www.cybercamp.usal.es
¿Cómo funciona la vulnerabilidad de inyección SQL?
En este caso, incluso si su contraseña es incorrecta, usted se autenticará en la aplicación. Si su página web
muestra los resultados de la consulta de la base de datos, un atacante puede utilizar el comando show tables,
comando para mostrar las tablas en la base de datos, y luego selectivamente dejar caer las tablas si así lo
desea.
www.cybercamp.usal.es
¿Qué tipos de inyección SQL existen?
Los ataques que se producen por inyección SQL se pueden clasificar en tres tipos principales:
- Inyección SQL en banda: el hacker utiliza el mismo medio que tiene la aplicación o página web para
inyectar su propio código SQL infectado, así como también para recuperar los resultados. Podemos
dividirlo en ataques basados en el error, en el que se inyecta el código infectado para que la página web
arroje un mensaje de error, en el que se pueda visualizar información de algunas de sus tablas, lo que
permite mejorar los futuros ataques; también podemos encontrar los ataques basados en la unión, en el
que el atacante se une al código para mostrar los resultados de una tabla distinta.
- Inyección SQL inferencial: cuando el ataque anterior no obtiene la información suficiente como para dañar
la página web, el hacker, a través de este ataque, inyecta el código realizando diversas consultas al portal
para conocer cómo se comporta y analizar sus resultados. También es conocido como inyección SQL a
ciegas
- Inyección fuera de banda: cuando el hacker no puede utilizar el mismo canal de la página web, solo tiene
la opción de inyectar fuera de esta, enviando la base de datos a una ubicación maliciosa externa.
www.cybercamp.usal.es
¿Qué efectos tienen estos ataques?
Los hackers recurren a los ataques de inyección de SQL con el fin de introducirse en la base de datos de un
sitio web, como hemos comentado. A veces solo quieren eliminar datos para provocar el caos y, en otras
ocasiones, lo que buscan es editar la base de datos, especialmente en el caso de sitios web financieros. En el
momento en que el hacker ha logrado el control de la base de datos, ya es fácil interferir en los saldos de las
cuentas de los clientes y mandarse dinero a su propia cuenta.
Sin embargo, a menudo lo que el ciberdelincuente quiere son los datos de usuario guardados en el sitio web,
como las credenciales de inicio de sesión. Estos datos de inicio de sesión robados pueden emplearlos para
realizar acciones en nombre de los usuarios afectados o reunirlos en una gran lista que luego venderá a otros
ciberdelincuentes en la red oscura. Las personas que compran información robada lo hacen, frecuentemente,
con la finalidad de robar identidades y cometer fraudes.
Con el fin de analizar en mayor profundidad el impacto de estos ataques, haremos una distinción entre
personas y empresas.
www.cybercamp.usal.es
Efectos de las SQLI en personas
Aunque los blancos principales de una SQLI (SQL injection) no son las personas, si usted utiliza un sitio web
donde se haya perpetrado un ataque de este tipo, el impacto podría ser considerable. Tener una cuenta en un
sitio web que sufra un ataque o enviar datos personales a este sitio permitiría a los hackers hacer muchas
cosas, no solo conseguir sus datos personales.
Los ataques de inyección de SQL pueden tener consecuencias graves para las personas, a saber:
- Pérdida de dinero: un hacker puede usar una SQLI en la página de una entidad bancaria u otra institución
financiera a fin de transferir dinero desde la cuenta de un usuario.
- Robo de identidad: cuando un hacker controla una base de datos, puede hacerse con la información que
contiene y venderla en la red oscura. Otros ciberdelincuentes pueden comprar estos datos y utilizarlos
para robar identidades.
www.cybercamp.usal.es
Efecto de las SQLI en empresas
Como los verdaderos blancos de los ataques de SQLI son las empresas, estas se enfrentan a una serie de
amenazas mucho más diversas. Cuando un hacker se introduce en una base de datos, puede realizar varias
acciones y, una vez que el suceso se divulga, la empresa afectada se ha de preparar para hacer frente a los
perjuicios a su imagen pública y minimizarlos.
A continuación, detallamos algunos de los daños que pueden sufrir las empresas en un ataque de SQLI:
· Sabotaje: un hacker puede sembrar el caos fácilmente en una empresa, borrando su base de datos o
destrozando el sitio web.
· Robo de datos: muchos ataques de SQLI tienen por objeto robar datos confidenciales tales como secretos
comerciales, información privilegiada, propiedad intelectual protegida y, a menudo, información de los usuarios
o clientes.
· Filtraciones de seguridad: un hacker podría usar el contenido de una base de datos quebrantada para
acceder a otras partes de la red interna de una empresa. Al final, toda la red puede estar en riesgo.
· Pérdida de reputación: tras sufrir los efectos de un ataque de SQLI, puede resultar difícil que una empresa
recupere la confianza de sus clientes y del público en general.
www.cybercamp.usal.es
Ejemplo real de un ataque SQLI
www.cybercamp.usal.es
¿Qué hacer para prevenir estos ataques?
La inyección SQL es un tipo de ataque bastante conocido y se puede prevenir con relativa facilidad siguiendo
una serie de medidas de seguridad:
· Frameworks: existen algunos entornos que permiten realizar consultas seguras y que, debido a la forma de
acceder a los datos, evita que exista peligro de que se ejecute una inyección SQL.
· Cortafuegos: la aplicación de cortafuegos puede ayudar a mejorar la seguridad y a evitar la inyección SQL.
La vulnerabilidad puede seguir existiendo, pero será más desafiante para los atacantes el poder encontrarla.
· Declaraciones parametrizadas: se pueden establecer parámetros y declaraciones válidas para el acceso o la
modificación del código. Esto hace que, si se intenta hacer una inyección SQL, el sistema la detecte como no
válida, lo que evita que se produzca.
· Permisos de acceso a la base de datos: limitar los permisos de inicio de sesión en la base de datos ayuda a
reducir la efectividad de la inyección SQL. No obstante, a pesar de ello, esta aún se puede producir.
Existen otras medidas que se pueden implementar y que dependen de profesionales de la ciberseguridad o
hacking ético.
www.cybercamp.usal.es
Relacionado - Brecha de datos
Una brecha de datos personales es un incidente de seguridad que ocasiona la destrucción, pérdida o
alteración accidental o ilícita de los datos personales tratados por un responsable, o bien la comunicación o
acceso no autorizados a los mismos.
Una brecha de datos personales puede desencadenar una serie de efectos adversos considerables en las
personas, susceptibles de ocasionar daños y perjuicios físicos, materiales o inmateriales; por lo que hay que
intentar evitarlas y en caso de que sucedan gestionarlas adecuadamente, especialmente cuando puedan
poner en riesgo los derechos y libertades de las personas físicas.
En relación con SQLI, una brecha de datos puede ser el incentivo perfecto para posteriormente realizar un
ataque de este tipo.
www.cybercamp.usal.es
Ejemplo - Have I been pwned?
Have I Been Pwned? es un sitio web que permite a los usuarios de Internet comprobar si sus datos personales
se han visto comprometidos por violaciones de datos. Podemos decir que este sitio web funciona como una
base de datos donde los usuarios pueden comprobar si sus datos personales han podido filtrarse en la red. No
solo actúa para ver si nuestras claves de acceso han sido robadas, sino también direcciones de correo,
nombres, números de teléfono…
Hoy en día nuestros datos personales pueden ser utilizados para fines muy diversos. Podrían incluirse en
campañas de Spam, enviar ataques Phishing personalizados y muchos métodos que requieren de conocer
cierta información de la víctima para tener mayor probabilidad de éxito.
Este servicio se encarga de mostrar filtraciones que ha podido haber en la red. Por ejemplo pongamos que
una base de datos de una plataforma de vídeos en Streaming ha sufrido un ataque o vulnerabilidad y todo eso
ha quedado de forma pública en Internet. Cualquiera podría acceder a las contraseñas de los usuarios, al
correo electrónico, etc. Lo que hace Have I Been Pwned ? es indicar a ese usuario, a través de la base de
datos, que su e-mail o contraseña han podido quedar expuestas.
Por tanto podemos decir que desde los inicios este servicio de Internet se creó con la intención de que los
usuarios puedan ver si su información se ha filtrado. Cuando aparece un problema en una red social o
cualquier servicio que usemos, podremos saber si hemos sido uno de los usuarios que se han visto afectados.
www.cybercamp.usal.es
¿Cómo usar Have I been pwned?
https://www.avast.com/es-es/c-sql-
injection#:~:text=La%20inyecci%C3%B3n%20de%20SQL%20es,y%20acceder%20a%20datos%20protegidos
https://www.ionos.es/digitalguide/hosting/cuestiones-tecnicas/sistema-gestor-de-base-de-datos-sgbd/
https://www.incibe.es/protege-tu-empresa/blog/ataques-inyeccion-sql-amenaza-tu-web
https://kinsta.com/es/blog/inyeccion-sql/
https://keepcoding.io/blog/como-hacer-un-ataque-de-inyeccion-sql/
https://www.redeszone.net/tutoriales/seguridad/uso-have-i-been-pwned/
https://www.vozpopuli.com/economia_y_finanzas/generalitat-ciberseguridad-contrasenas-correos_0_1412858747.html
www.cybercamp.usal.es
GRACIAS