Aprovechando la información
Para la mayoría de nosotros, consumir información es una parte importante de nuestras vidas. La información nos ayuda a comprender el mundo que nos rodea, planificar nuestras próximas vacaciones e incluso elegir nuestro entretenimiento para la noche. Incluso se podría llegar a decir que no podemos vivir sin información. Pero si es tan importante, ¿cómo lo organizamos? ¿Cómo accedemos a las piezas que necesitamos para la tarea en cuestión? Como puede imaginar, existen numerosas formas, cada una desarrollada para aprovechar la naturaleza de la información, la tecnología disponible o ambas. Uno, en particular, es SQL.
¿Qué es SQL?
SQL o lenguaje de consulta estructurado es un lenguaje informático desarrollado por IBM en la década de 1970. Fue desarrollado para fomentar el uso de la información almacenada en una base de datos. Una base de datos es una colección de información ordenada de alguna manera, estructurada para un fácil acceso y orientada hacia un tema en particular. SQL almacena información en conjuntos de tablas que contienen categorías de datos en columnas y valores de datos específicos en las filas. El lenguaje consta de una serie de comandos, cada uno de los cuales realiza una función única en la base de datos. Algunos ejemplos incluyen:
- CREATE es un comando que le permite crear algún tipo de estructura dentro de una base de datos.
- INSERT es un comando que le permite agregar información a una base de datos.
- GRANT es un comando que le permite otorgar derechos de acceso a la información dentro de una base de datos.
- SELECT es un comando que le permite encontrar información dentro de una base de datos.
Ataques de inyección SQL
Un ataque de inyección SQL es una actividad maliciosa en la que el código que accede a la base de datos SQL se manipula por un medio distinto al previsto. Este ataque se aprovecha del mal diseño del programa. Por ejemplo, supongamos que tiene una aplicación que solicita al usuario un número de teléfono y pasa la entrada a la base de datos ‘tal cual’. La consulta que resulta podría ser algo como:
SELECT * FROM Customer_Table WHERE teléfono = 'blah';
Esto encontraría todos los registros con ‘blah’ como número de teléfono. Ahora, si el usuario supiera un poco sobre el código detrás de él, podría ingresar algo como ‘blah o 1 = 1’ en lugar de solo ‘blah’. Esto siempre sería cierto (porque 1 = 1 siempre es cierto) y coincidiría con cualquier registro en la base de datos. En este caso, es la palabra ‘WHERE’ la que provoca la vulnerabilidad. Esto no parece tan malo, pero ¿qué pasa si los registros de la base de datos contienen información confidencial como números de Seguro Social, números de Seguro Social o contraseñas? Los resultados podrían ser catastróficos.
Tipos de ataques de inyección SQL
Hay varios tipos diferentes de ataques de inyección SQL. Algunos notables incluyen:
¿Qué es un ataque de ransomware? – Definición y ejemplos
- Basado en errores : este tipo de ataque utiliza los mensajes de error que genera una base de datos cuando falla una operación. Esta información se puede utilizar para conocer la estructura de la base de datos. Por ejemplo, si desea determinar si existe un campo de contraseña, puede utilizar una consulta que busca un valor particular en ese campo y observar los mensajes de error generados.
- Basado en unión : este tipo de ataque utiliza el comando UNION para combinar los resultados de dos o más consultas y devolver los resultados compuestos. Por ejemplo, puede crear una consulta que explore una tabla en busca de un nombre, otra en busca de un número de cuenta y use una unión para obtener la combinación de los dos.
- Basado en booleanos : este tipo de ataque no recibe los datos reales. En su lugar, estructura la consulta para que devuelva verdadero o falso e infiere el contenido de ese resultado. Por ejemplo, puede crear una consulta que determine si existe una información específica en la base de datos en lugar de devolver la información en sí.
- Basado en el tiempo : este tipo de ataque es similar al booleano, excepto que usa el retraso de tiempo en lugar de verdadero y falso para hacer la inferencia. El ejemplo sería similar al anterior, pero usaría el tiempo necesario para la respuesta, en lugar del valor devuelto.
Resumen de la lección
En resumen, SQL es un lenguaje informático que fomenta el uso de la información almacenada en una base de datos. El lenguaje consta de una serie de comandos que incluyen CREATE, INSERT, GRANT y SELECT. Un ataque de inyección SQL es una actividad maliciosa que se aprovecha del diseño deficiente del programa y accede a una base de datos de una forma distinta a la prevista. Hay varios tipos diferentes de ataques de inyección SQL, incluidos los basados en errores, basados en unión, basados en booleanos y basados en tiempo.
Explora más sobre este tema
Selecciona un tema y sigue aprendiendo...
