¿Qué es SQL injection y Cómo afecta los SQL Query?

La inyección SQL es una vulnerabilidad de seguridad web que permite que un atacante interfiera con las consultas que una aplicación realiza en su base de datos. En general, permite a un atacante ver datos que normalmente no pueden recuperar. Esto puede incluir datos que pertenecen a otros usuarios o cualquier otro dato al que la aplicación pueda acceder. En muchos casos, un atacante puede modificar o eliminar estos datos, causando cambios persistentes en el contenido o el comportamiento de la aplicación.
En algunas situaciones, un atacante puede escalar un ataque de inyección SQL para comprometer el servidor subyacente u otra infraestructura de fondo, o realizar un ataque de denegación de servicio.
SQL Injection (SQLi) o Inyección SQL se refiere a un ataque de inyección en el que un atacante puede ejecutar sentencias SQL maliciosas (también comúnmente denominadas como carga maliciosa) que controlan el servidor de bases de datos de una aplicación web (también conocido como Sistema de administración de bases de datos relacionales RDBMS).
Dado que una vulnerabilidad de SQL Injection podría afectar a cualquier sitio web o aplicación web que utilice una base de datos basada en SQL, esta vulnerabilidad es una de las más antiguas, más prevalentes y más peligrosas de las vulnerabilidades de las aplicaciones web.
Temas que te ayudaran:
- Cómo obtener las filas de una tabla que no están en otra tabla SQL Server
- Cómo eliminar filas duplicadas en SQL Server, MySql y Oracle
- Cómo eliminar los espacios en blanco en SQL
- ¿Cómo insertar varios registros en un solo INSERT?
- ¿Cómo agregar una columna a una tabla en SQL?
Un atacante que aprovecha las vulnerabilidades con SQL Injection, con las circunstancias correctas puede eludir los mecanismos de autenticación y autorización de una aplicación web y recuperar el contenido de una base de datos completa. La inyección SQL también se puede usar para agregar, modificar y eliminar registros en una base de datos, lo que afecta la integridad de los datos.
SQL Injection puede proporcionar a un atacante acceso no autorizado a datos confidenciales, incluidos datos de clientes, información de identificación personal (PII), secretos comerciales, propiedad intelectual y otra información confidencial.
Cómo funciona SQL Injection
Para ejecutar consultas SQL maliciosas contra un servidor de base de datos, un atacante primero debe encontrar una vulnerabilidad dentro de la aplicación web en alguna consulta SQL.
Para que se produzca un ataque de inyección SQL, el sitio web vulnerable debe incluir directamente la entrada del usuario dentro de una declaración SQL. Un atacante puede insertar una carga útil que se incluirá como parte de la consulta SQL y se ejecutará en el servidor de la base de datos.
El siguiente sql query o ejemplo de código del lado del servidor, se usa para autenticar usuarios a la aplicación web.
# Define POST variables
uname = request.POST['username']
passwd = request.POST['password']
# SQL query vulnerable to SQLi
sql = “SELECT id FROM users WHERE username=’” + uname + “’ AND password=’” + passwd + “’”
# Execute the SQL statement
database.execute(sql)
La secuencia de comandos anterior es un ejemplo sencillo de autenticar a un usuario con un nombre de usuario y una contraseña en una base de datos con una tabla llamada usuarios, y una columna de nombre de usuario y contraseña.
La secuencia de comandos anterior es vulnerable a SQL Injection porque un atacante podría enviar una sentencia sql (sql query) maliciosa de tal manera que alteraría la declaración SQL que está ejecutando el servidor de la base de datos.
Un ejemplo simple de una carga de SQL Injections podría ser algo tan simple como establecer el campo de contraseña en la contraseña password’ OR 1=1.
Esto daría como resultado la ejecución de la siguiente consulta SQL en el servidor de base de datos.
SELECT id FROM users WHERE username=’username’ AND password=’password’ OR 1=1’
Un atacante también puede comentar el resto de la declaración SQL para controlar aún más la ejecución de la consulta SQL.
-- MySQL, MSSQL, Oracle, PostgreSQL, SQLite
' OR '1'='1' --
' OR '1'='1' /*
-- MySQL
' OR '1'='1' #
-- Access (using null characters)
' OR '1'='1' %00
' OR '1'='1' %16
Una vez que se ejecuta la consulta, el resultado se devuelve a la aplicación para su procesamiento, lo que da como resultado una omisión de autenticación. En el caso de que sea posible la derivación de autenticación, la aplicación probablemente registrará al atacante con la primera cuenta del resultado de la consulta: la primera cuenta en una base de datos suele ser de un usuario administrativo. Imagínate lo que esto podría causar a tu sitio web y a tu base de datos.
Entonces si eres web developer o sql developer debes tener mucho cuidado cuando creas tus consultas a tu base de datos, estar seguro de evitar estos problemas de SQL Injection.
Haremos un video para mostrar estos ejemplos, los desarrollaremos con SQL Sever y ASP.NET MVC para ver en practica lo que pasa cuando tenemos un sitio vulnerable a SQL Injection.
Si tienes comentarios o sugerencias escríbenos aquí abajo en el apartado de comentarios y recuerda compartir el articulo en tus redes sociales.