Todos hemos oído noticias sobre bases de datos filtradas, de organizaciones de todo tipo, hoy explicaremos como ocurren. Para poneros en situación, SQL es el famoso lenguaje de consulta de las bases de datos, el cual emplearemos para realizar estas inyecciones, y así, auditar entornos mal desarrollados (algo muy común).
SQL Injection (SQLI) es una técnica de ataque que hemos explorado para comprender cómo se explotan vulnerabilidades en entornos que no validan adecuadamente la entrada del usuario en las consultas SQL enviadas a la base de datos. He analizado cómo los atacantes pueden utilizar esta técnica para ejecutar consultas SQL maliciosas y acceder a información confidencial, como nombres de usuario, contraseñas y otros datos sensibles almacenados.
Si la aplicación no valida correctamente la entrada del usuario, la consulta maliciosa se ejecuta en la base de datos, lo que podría permitir el acceso no autorizado a información confidencial o incluso el control completo de la base de datos.
Identificamos varios tipos de inyecciones SQL comunes, incluyendo:
- Inyección SQL basada en errores:
Aprovecha errores en el código SQL para revelar información. Por ejemplo, mensajes específicos en errores pueden ser usados para extraer detalles adicionales del sistema. - Inyección SQL basada en tiempo:
Emplea consultas que introducen retrasos deliberados. Por ejemplo, los atacantes pueden observar los tiempos de respuesta para determinar detalles sobre la estructura de la base de datos. - Inyección SQL basada en booleanos:
Usa consultas con expresiones booleanas para identificar información adicional, como la existencia de un usuario en la base de datos. Por ejemplo, se puede utilizar una consulta con una expresión booleana para determinar si un usuario existe en una base de datos. - Inyección SQL basada en uniones:
Utiliza la cláusula “UNION” para combinar consultas y acceder a datos adicionales, como permisos de usuarios junto con su información básica. Por ejemplo, si se utiliza una consulta que devuelve información sobre los usuarios y se agrega una cláusula “UNION” con otra consulta que devuelve información sobre los permisos, se puede obtener información adicional sobre los permisos de los usuarios. - Inyección SQL basada en consultas apiladas:
Explota la capacidad de ejecutar múltiples consultas en una sola instrucción, permitiendo realizar múltiples operaciones en la base de datos de manera no autorizada. Por ejemplo, se puede utilizar una consulta que inserta un registro en una tabla y luego agregar una consulta adicional que devuelve información sobre la tabla.
Estas técnicas se aplican en diferentes tipos de bases de datos como, relacionales, NoSQL, de grafos o de objetos.
Es importante entender los diferentes tipos de inyecciones SQL y cómo pueden utilizarse para obtener información confidencial. Los desarrolladores deben asegurarse de validar adecuadamente la entrada del usuario y de utilizar técnicas de defensa, como la sanitización de entrada y la preparación de consultas SQL, para prevenir las inyecciones SQL en sus aplicaciones web. Igual que monitorizar los logs que se generan en al realizar estas peticiones, y poder detectar comportamientos anómalos.
Os muestro un ejemplo a grandes rasgos de como con la herramienta Burp Suite intercepto y modifico la petición POST para extraer información de una base de datos mediante una SQLI. Esto se realiza en un portal login donde nosotros insertamos un usuario y contraseña que válida contra una base de datos.
Iker Berbel
Consultor IT
