En la última unidad de SQLi, exploramos los fundamentos de SQLi, entendiendo cómom los atacantes explotan vulnerabilidades en las aplicaciones web para manipular queries SQL y acceder a información no autorizada. Cubrimos técnicas esenciales como la SQLi basada en error o en unión, métodos de blind SQLi como la basada en booleanos o en tiempo. Aquí un repaso rápido de lo que ya sabemos:

Quick Recap


In-band SQL Injection

Esta técnica está considerada una de las más comunes y directas de inyección SQL. En esta técnica el atacante usa el mismo canal de comunicación para tanto la inyección y recuperación de información. Hay dos tipos principales de inyección SQL in-band.

  • Error-Based SQL Injection: El atacante manipula la query SQL para producir mensajes de error de la base de datos. Estos mensajes de error suelen contener información sobre la estructura de la base de datos, lo que puede usarse para explotar la base de datos. Ejemplo: SELECT * FROM users WHERE id = 1 AND 1=CONVERT(int, (SELECT @@version)). Si la versión de la base de datos es devuelta en el mensaje de error, revela información sobre esta.
  • Union-Based SQL Injection: El atacante usa el operador SQL UNION para combinar los resultados de dos o más statements SELECT en un solo resultado, recuperando así información de otras tablas. Ejemplo: SELECT name, email FROM users WHERE id = 1 UNION ALL SELECT username, password FROM admin.

Inferential (Blind) SQL Injection

La inyección SQL inferencial no transfiere la información directamente a través de la aplicación web, haciendo explotarla más difícil. En su lugar, el atacante manda payloads y observa el comportamiento de la aplicación y tiempos de respuesta para inferir información sobre la base de datos. Hay dos tipos principales de inyección SQL inferencial:

  • Boolean-Based Blind SQL Injection: El atacante manda una query SQL a la base de datos, forzando la aplicación a que devuelva un resultado diferente basado en una condición true o false. Analizando la respuesta de la aplicación, el atacante puede inferir si el payload era cierto o no. Ejemplo: SELECT * FROM users WHERE id = 1 AND 1=1 (true condition) versus SELECT * FROM users WHERE id = 1 AND 1=2 (false condition).
  • Time-Based Blind SQL Injection: El atacante manda una query SQL a la base de datos que retrasa la respuesta por un periodo de tiempo específico si la condición es cierta. Midiendo el tiempo de respuesta, el atacante puede inferir si la condición es cierta o no. Ejemplo: SELECT * FROM users WHERE id = 1; IF (1=1) WAITFOR DELAY '00:00:05'--.

Out-of-band SQL Injection

Out-of-band SQL Injection es usada cuando el atacante no puede usar el mismo canal para lanzar el ataque y reunir resultados o cuando las respuestas del servidor son inestables. Esta técnica se basa en que el servidor de base de datos haga una petición out-of-band para mandar los resultados de la query al atacante. HTTP es normalmente usado en la inyección SQL out-of-band para mandar el resultado de la query al servidor del atacante.

Cada tipo de técnica de inyección SQL tiene sus ventajas y retos.Entender estas técnicas es crucial para identificar y mitigar vulnerabilidades de injección SQL en las aplicaciones web. La inyección SQL in-band, es fácil de explotar y detectar pero ruidosa y fácilmente monitorizable. La inyección SQL inferencial es más difícil de explotar y requiere múltiples peticiones pero puede ser usada cuando los mensajes detallados de error no están disponibles. La inyección SQL out-of-band es menos común y altamente efectiva, requiere un servidor de control externo y se basa en la habilidad de la base de datos de hacer peticiones out-of-band. Controlando estas técnicas, los pentesters pueden identificar eficientemente vulnerabilidades de inyección SQL, ayudando a las organizaciones a securizar sus aplicaciones web contra amenazas.