SQLi es una vulnerabilidad con renombre que ha sido el principal quebradero de cabeza en la seguridad de aplicaciones durante años. Los pentesters deben prestar especial atención a esta vulnerabilidad durante sus pruebas, ya que requiere un entendimiento concienzudo de varias técnicas para identificar y explotar puntos de inyección SQL. De la misma manera, los desarrolladores deben conocer e implementar las mejores prácticas para proteger sus aplicaciones.


Secure Coders

  • Queries parametrizadas y statements preparados: Úsalos para asegurar que el input del usuario se trate como información en lugar de código ejecutable. Por ejemplo en PHP con PDO puedes preparar statements y parámetros de unión como $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username"); $stmt->execute(['username' => $username]);.
  • Validación y sanitización del input: Implementa una validación y sanitización robusta para asegurar que la información recibida del usuario es la que debería ser. Usa funciones integradas como htmlspecialchars() y filter_var().
  • Principio de menor privilegio: Aplica este principio garantizando que los usuarios tienen SÓLO los privilegios suficientes para realizar su trabajo y ya.
  • Procedimientos almacenados: Encapsula y valida la lógica SQL usando procedimientos almacenados.Esto te permite controlar y validar los inputs de la base de datos.
  • Auditorías y revisiones de código regulares: Realiza auditorías de seguridad y revisiones de código de forma regular para identificar y solucionar vulnerabilidades.

Pentesters

  • Explotar funcionalidades específicas de la base de datos: Diferentes sistemas de manejo de bases de datos (DBMS) tienen funcionalidades y sintaxis únicas. Deberías entender las específicas del DBMS objetivo.
  • Aprovecharse de mensajes de error: Explota errores de verbose para ganar información del esquema y estructura de la base de datos .Por ejemplo, 1' AND 1=CONVERT(int, (SELECT @@version)) -- puede generar errores que filtren la versión.
  • Bypassear WAFs y filtros: Prueba varias técnicas de ofuscación para bypassear WAFs y filtros de input como hemos visto en esta unidad (concatenación, mixed case, inline comments, different encodings, etc.).
  • Identificar la base de datos: Determina el tipo y la versión de la base de datos para hacer el ataque a su medida. Puedes hacer esto con queries como SELECT version() o SELECT @@version.
  • Pivotar con la inyección SQL: Usa la inyección SQL para pivotar y atacar otras partes de la red.