Como escribimos en uno de los artículos., SQL es un lenguaje de programación de consultas estructuradas. (SQL, lenguaje de consulta estructurado) que permite a los programadores comunicarse con grandes bases de datos en un inglés casi sencillo. También brinda la capacidad de acceder y manipular datos almacenados en tablas en el servidor.. En el caso de los sitios web, las tablas pueden almacenar datos confidenciales, como inicios de sesión, contraseñas, números de tarjetas de crédito, etc.. Y si no se toman las precauciones adecuadas, los sitios pueden ser engañados simplemente ejecutando consultas SQL maliciosas. Se llama inyección SQL, y hoy examinaremos en detalle qué tipos de esto hay.
inyección SQL tiene diferentes métodos de uso, y todos ellos pueden causar serios problemas. Por ejemplo, con inyección SQL, un atacante puede eludir la autenticación, acceder a bases de datos, y cambiar o eliminar su contenido. A veces inyección SQL se puede utilizar para ejecutar un comando en el sistema operativo. Esto permitirá al atacante causar un daño aún más colosal., incluso si la red está detrás de un firewall. Convencionalmente inyección SQL se puede dividir en tres categorías principales – SQLi en banda, SQLi inferencial, y SQLi fuera de banda.
SQLi en banda (SQLi clásico)
Inyección SQL en banda – El ataque de inyección SQL más común y simple. Ocurre cuando un atacante no puede utilizar el mismo canal de comunicación para lanzar el ataque y recoger los resultados.. Los tipos más populares de banda inyección SQL son SQLi basado en errores y SQLi basado en unión.
La exfiltración de datos mediante ataques dentro de banda se realiza a través de mensajes de error que aparecen en la aplicación web activados por el inyección SQL ataque o utilizando la declaración UNION, que permite al atacante insertar sus consultas SQL.
Inyección SQL basada en errores
SQLi basado en errores es un ataque, y se basa en mensajes de error que arroja el servidor de la base de datos para obtener información sobre la estructura de la base de datos.. A veces todo lo que se necesita es uno inyección SQL basado en errores, y un atacante puede enumerar toda la base de datos. Los errores suelen ser útiles en la etapa de desarrollo de una aplicación web., en un sitio en vivo, deben deshabilitarse o escribirse en un archivo restringido.
Inyección SQL basada en unión
Un SQLi basado en fusión es una técnica que utiliza la declaración UNION SQL para combinar los resultados de más de dos declaraciones SELECT en un solo resultado., que luego se devuelve como parte de la respuesta HTTP. La peculiaridad de este método es que funcionará solo si el número de columnas devueltas por la primera consulta es igual al número de columnas devueltas por la segunda consulta..
SQLi inferencial (SQLi ciego)
A diferencia de SQLi en banda, inferencial inyección SQL puede llevarle más tiempo al atacante, pero no es menos peligroso que cualquier otra inyección SQL. En un ataque SQLi inferencial, los datos no se pasan a través de la aplicación web, y el atacante no puede ver el resultado del ataque dentro de la banda (por eso estos ataques también se llaman «SQL ciego injection attacks«). En cambio, el atacante puede reconstruir la estructura de la base de datos enviando la carga útil, y observar la respuesta de la aplicación web y el comportamiento del servidor de base de datos.. SQLi basado en booleanos ciegos y SQLi basado en tiempo ciego son dos tipos de inyección SQL. Pero no sólo los sitios web muestran la datos devueltos por la base de datos, que es vulnerable.
Basado en booleanos (basado en contenido) SQLi ciego
Basado en booleanos inyección SQL es un método SQLi inferencial que se basa en enviar una consulta SQL a una base de datos, lo que hace que la aplicación devuelva un resultado diferente dependiendo de si la consulta devuelve un resultado VERDADERO o FALSO.
El contenido de la respuesta HTTP cambia o permanece igual según el resultado., permitir a un intruso inferir si la carga útil utilizada es verdadera o falsa, incluso si no se devuelven datos de la base de datos. Este ataque suele ser lento. (especialmente para bases de datos grandes) porque el atacante tendría que enumerar la base de datos carácter por carácter.
SQLi ciego basado en tiempo
Temporario inyección SQL es un método SQLi inferencial, que se basa en enviar una consulta SQL a la base de datos que hace que la base de datos espere una cierta cantidad de tiempo (en segundos) antes de responder. Es el tiempo de respuesta el que le dice al atacante si el resultado de la consulta es VERDADERO o FALSO.
La respuesta HTTP se devolverá con retraso o inmediatamente., dependiendo del resultado, y permitirá al atacante inferir si la carga útil utilizada es verdadera o falsa, incluso si no se devuelven datos de la base de datos. Este ataque también suele ser lento. (especialmente para bases de datos grandes) porque el hacker debe enumerar la base de datos carácter por carácter.
Inyección SQL fuera de banda
Fuera de banda inyección SQL Es relativamente raro porque depende de las funciones habilitadas en el servidor de base de datos utilizado por la aplicación web.. Fuera de banda inyección SQL Ocurre cuando un atacante no puede utilizar el mismo canal para realizar un ataque y recopilar los resultados.. Los métodos fuera de banda para el hacker son una alternativa a los métodos basados en el tiempo, especialmente si las respuestas del servidor no son muy estables (lo que reduce la efectividad de un ataque basado en el tiempo).
Los métodos SQLi fuera de banda se basan en la capacidad de un servidor de base de datos para realizar consultas DNS o HTTP para entregar datos a un atacante.. Esto se refiere al comando xp_dirtree de Microsoft SQL Server., que se puede utilizar para realizar consultas DNS a un servidor controlado por un atacante, y el paquete UTL_HTTP Oracle Database, que se puede utilizar para enviar consultas HTTP desde SQL y PL/SQL a un servidor controlado por un atacante.