La inyección SQL, a menudo conocida como SQLI, es un vector de ataque típico que emplea código SQL malicioso para manipular las bases de datos backend con el fin de obtener información que no estaba destinada a mostrarse. Esta información puede contener datos corporativos confidenciales, listas de usuarios o información confidencial del consumidor.
Tipos de inyección SQL:
1. SQLi basado en errores: SQLI basado en errores obtiene información sobre la estructura de la base de datos a partir de mensajes de error emitidos por el servidor de la base de datos. En raras circunstancias, un atacante puede enumerar una base de datos completa usando solo una inyección SQL basada en errores .
2. SQLi basado en unión: SQLI basado en unión utiliza el operador UNION SQL para agregar los resultados de dos o más consultas SELECT en un solo resultado, que posteriormente se devuelve como parte de la respuesta HTTP.
3. SQLi ciego basado en booleanos: la inyección de SQL basada en booleanos funciona enviando una consulta SQL a la base de datos y obligando a la aplicación a producir una respuesta diferente dependiendo de si la consulta devuelve VERDADERO o FALSO.
4. SQLi ciego basado en el tiempo: la inyección de SQL basada en el tiempo funciona enviando una consulta SQL a la base de datos y obligándola a esperar un período de tiempo predeterminado (en segundos) antes de responder. El tiempo de respuesta le dirá al atacante si el resultado de la consulta es VERDADERO o FALSO.
Ejemplo:
Veamos cómo usar la herramienta de prueba de penetración SQLMAP para determinar si un sitio web es seguro contra la inyección SQL. Para fines de demostración, utilizaremos un sitio web creado con vulnerabilidades en este artículo:
http://testphp.vulnweb.com/listproducts.php?cat=1
Paso 1: Compilar la lista de bases de datos existentes.
Entonces, inicialmente, debemos proporcionar la URL de la web para verificarla junto con el argumento -u . Si queremos probar el sitio web usando proxies, podemos usar el argumento -tor. Por lo general, nos gustaría probar si podemos adquirir acceso a una base de datos. Así que utilizamos la opción –dbs para hacer esto. –dbs muestra una lista de todas las bases de datos accesibles.
sqlmap.py -u http://testphp.vulnweb.com/ listproducts.php?cat=1 --dbs
Factor de impacto de la criogenia. Descubrimos dos bases de datos, acuart y esquema de información .
Paso 2: haga una lista de todas las tablas en una determinada base de datos.
Debemos cambiar ligeramente nuestro comando para intentar acceder a cualquiera de las bases de datos. Ahora usamos -D para indicar el nombre de la base de datos a la que queremos acceder, y una vez allí, queremos probar si podemos acceder a las tablas. Usaremos la consulta –tables para esto. Permítanos buscar en la base de datos de acuart .
sqlmap.py -u http://testphp.vulnweb.com/ listproducts.php?cat=1 -D acuart --tables
Prevención SQLI:
Los desarrolladores pueden evitar la inyección SQL con la ayuda de las siguientes técnicas.
1. Use una gran cantidad de datos Saneamiento: todas las entradas de los usuarios deben filtrarse por sitios web. Idealmente, los datos del usuario deben filtrarse por contexto. Las direcciones de correo electrónico, por ejemplo, deben filtrarse para permitir solo los caracteres permitidos en una dirección de correo electrónico, los números de teléfono deben filtrarse para permitir solo los caracteres permitidos en un número de teléfono, etc.
2. Utilice un firewall de aplicaciones web: Mod Security, un módulo gratuito y de código abierto para servidores web Apache, Microsoft IIS y Nginx, es un ejemplo destacado. Mod Security ofrece una colección de reglas compleja y en constante cambio para filtrar requests en línea potencialmente peligrosas. La mayoría de los intentos de pasar de contrabando SQL a través de los canales web quedan atrapados por sus protecciones de inyección de SQL.
3. Parche el software con regularidad: debido a que las vulnerabilidades de inyección SQL se descubren con frecuencia en el software comercial, es fundamental mantenerse al día con las actualizaciones.
4. Limite contextualmente los derechos de la base de datos: cree numerosas cuentas de usuario de la base de datos con la menor cantidad de permisos necesarios para su escenario de uso. Por ejemplo, el código que activa una página de inicio de sesión debe consultar la base de datos utilizando una cuenta restringida que solo tiene acceso a la tabla de credenciales adecuada.
5. Supervise las declaraciones SQL de las aplicaciones conectadas a la base de datos en tiempo real: esto ayudará a detectar las declaraciones SQL no autorizadas y las vulnerabilidades. Las tecnologías de monitoreo de aprendizaje automático y/o análisis de comportamiento pueden ser extremadamente efectivas.
Publicación traducida automáticamente
Artículo escrito por vishalkumar98765432 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA