SQLi basado en errores

Las inyecciones SQL basadas en errores, son una forma de ataque informático en la cual un atacante inserta código SQL malicioso en una consulta enviada a una aplicación web o a una base de datos, con el objetivo de obtener información confidencial o modificar los datos almacenados en la base de datos.

Este tipo de ataque explota una vulnerabilidad común en las aplicaciones web que no validan adecuadamente los datos de entrada proporcionados por los usuarios antes de incluirlos en una consulta SQL. Al no realizar una validación adecuada, la aplicación puede procesar el código SQL malicioso como si fuera una instrucción válida y ejecutarla en la base de datos.

La inyección SQL basada en errores aprovecha los mensajes de error generados por la base de datos en respuesta a una consulta SQL incorrecta. El atacante intenta insertar código malicioso en la consulta de manera que genere un error y revele información útil en el mensaje de error devuelto por la base de datos. A través de estos mensajes de error, el atacante puede obtener detalles sobre la estructura de la base de datos, nombres de tablas y columnas, y en algunos casos, incluso extraer datos confidenciales.

Veamos un ejemplo.

Imaginemos que intentamos encontrar alguna falla en el sitio web “www.elraptor.com”, por lo cual buscaremos cualquier forma de provocar algún error en el sitio web que me permita verificar si el sitio es vulnerable a inyecciones SQL.

De referencia tengo un sito donde veo un campo el cual me permite ingresar datos “nombre de usuario”, y tenemos otro campo donde solo me permite escoger un país el cual tengo que seleccionar. 

después de introducir alguna palabra, detecto que mi input se ver reflejado en la pagina web.

pero al realizar algunas inyecciones SQL, no  logro obtener algo que me permita a mi como tester asegurar que es vulnerable, por lo cual intentare ocasionar algún error pero en el siguiente campo, esto lo realizare con “Burpsuite” para tener acceso a ese recurso.

Interceptamos la data con BurpSuite

Como pueden ver en la imagen, pondré una comilla en la palabra Brazil intentando ocasionar un error cerrando la consulta SQL.

¡BINGO!

Tenemos el error que buscamos, a partir de aquí puedo realizar un ordenamiento de datos basándome en X numero de columnas y en base al numero de columnas realizar un “UNION attack”, en este caso el sitio solo me arroja 1, por lo cual puedo iniciar con la recopilación de datos a mi favor.

Nombre de la base de datos actual

username=test&country=Brazil’ union select database()– –

Version de la base de datos

username=test&country=Brazil’ union select version()– –

Lectura de archivos confidenciales de la maquina victima

username=test&country=Brazil’ union select load_file()– –

Cabe destacar que estos solo son algunos ejemplos de lo que puede realizar un ciber atacante si la web es vulnerable a SQLi.

El atacante pueden generar consultas mucho mas sofisticadas para obtener información valiosa de la base de dato o incluso ganar acceso al sitio, cargando algún archivo malicioso el cual posterior mente se pueda solicitar.

Sanitización

Para prevenir las inyecciones SQL basadas en errores, es fundamental utilizar técnicas de codificación seguras, como la parametrización de consultas SQL, el uso de consultas preparadas o el uso de un ORM (Object-Relational Mapping) que realice la sanitización de los datos de entrada de forma automática. También es importante validar y filtrar adecuadamente los datos de entrada para evitar la inclusión de código malicioso en las consultas SQL.

Share

Scroll to Top