SQLi
CríticoSQL Injection
Definición
SQL Injection (SQLi) es una vulnerabilidad que permite a un atacante interferir con las consultas SQL que una aplicación envía a su base de datos. Mediante la inyección de código SQL malicioso en campos de entrada, el atacante puede leer, modificar o eliminar datos, e incluso ejecutar comandos en el sistema operativo.
Impacto
Ejemplos
SQLi de autenticación bypass
Al inyectar ' OR 1=1 -- en el campo de usuario, la condición siempre es verdadera y el comentario (--) ignora el resto de la consulta, permitiendo acceso sin credenciales válidas.
-- Consulta original SELECT * FROM users WHERE username = 'INPUT' AND password = 'INPUT'; -- Payload del atacante en el campo username: ' OR 1=1 -- -- Consulta resultante SELECT * FROM users WHERE username = '' OR 1=1 --' AND password = '';
SQLi UNION para extraer datos
La técnica UNION permite combinar los resultados de la consulta original con una consulta personalizada del atacante, extrayendo datos de otras tablas como usuarios y contraseñas.
# URL vulnerable https://ejemplo.com/productos?id=1 # Payload UNION https://ejemplo.com/productos?id=1 UNION SELECT username, password, email FROM users-- # Primero hay que determinar el número de columnas: ?id=1 ORDER BY 3-- (si funciona, hay al menos 3 columnas)
Blind SQLi basado en tiempo
Cuando la aplicación no muestra errores ni resultados visibles, el atacante puede usar funciones de retardo (SLEEP) para inferir información carácter por carácter según el tiempo de respuesta.
# El atacante infiere datos por el tiempo de respuesta ?id=1 AND IF(SUBSTRING(@@version,1,1)='5', SLEEP(5), 0)-- # Si la respuesta tarda 5 segundos, la primera letra de la versión es '5' # Se repite carácter por carácter para extraer información