Page 1 - Ataques de SQL Injection
P. 1

Laboratorio de Ciberseguridad



                                         Ataques de SQL Injection
                                         Dr. Miguel A. Rojas – mrojas@ude.edu.uy
                                       A/S Diego Nogueira – dnogueira@ude.edu.uy

                  Los principios de desarrollo de software       recuperar  el  contenido  de  un  archivo
                  seguro  junto  con  las  metodologías  de      determinado  presente  en  el  sistema  de
                  desarrollo seguro en el ciclo de vida del      archivos  del  DBMS  y  en  algunos  casos
                  software,  en  ingles  Secure-Software         emitir  comandos  al  sistema  operativo.”.
                  Development  Life  Cycle  (S-SDLC),            (OWASP, 2024)
                  tienen  como  objetivo  brindar  un            Un  tipo  de  ataque  de  inyección  SQL
                  conjunto de técnicas y mejores prácticas       (pero  no  el  único)  ocurre  cuando:  Un
                  que  deben  ser  incluidas  en  las  etapas    dato no deseado ingresa a un programa
                  tempranas del ciclo de vida de desarrollo      desde una fuente no confiable o los datos
                  de software con la finalidad de disminuir      se utilizan para construir dinámicamente
                  las  vulnerabilidades  del  software  y  en    una consulta SQL.
                  definitiva crear software potencialmente
                  más seguro.                                    A  modo  de  ejemplo,  Supongamos  que
                                                                 tenemos  una  aplicación  web  con  un
                  Hoy  desarrollaremos  una  vulnerabilidad      formulario de inicio de sesión que solicita
                  conocida  como  SQL  Injection  o              un nombre de usuario y una contraseña.
                  Inyección  SQL (SQLi). Kaspersky Labs          El  código  en  el  cliente  podría  estar
                  lo define como: “Una inyección de SQL,         construido de la siguiente manera:
                  a veces abreviada como SQLi, es un tipo
                  de  vulnerabilidad en  la  que  un  atacante
                  usa un trozo de código SQL (lenguaje de        <form action="login.php" method="post">
                  consulta  estructurado)  para  manipular       Usuario:  <input  type="text"  id="usuario"
                  una base de datos y acceder a información      name="usuario" required>
                  potencialmente  valiosa.”  (kaspersky,         <br>
                  2024)                                          Contraseña:   <input   type="password"
                                                                 id="pass" name="pass" required>
                  La inyección SQL representa una de las         <br>
                  amenazas  más  significativas  para  la        <button type="submit">Login</button>
                  seguridad  de  las  aplicaciones  web  que     </form>
                  interactúan  con  bases  de  datos.  Este
                  documento  explora  la  naturaleza  de  los
                  ataques de inyección SQL, sus potenciales      Ahora, del lado del servidor, en PHP, se
                  impactos en los sistemas de información,       vería así:
                  y  las  estrategias  recomendadas  para        $user = $_POST[usuario];
                  prevenir y mitigar estos ataques.              $pass = $_POST['pass];
                                                                 $stmt = $conn->prepare("SELECT * FROM usuarios
                  “Un ataque de inyección SQL consiste en        WHERE usuario = :usuario AND pass = :pass");
                  la inserción o ´inyección´ de una consulta     $stmt->execute();
                  SQL a través de los datos de entrada del
                  cliente  a  la  aplicación.  Un  exploit  de   Si  el  usuario  introduce  admin  como
                  inyección SQL exitoso puede leer datos         usuario  y  pass123  como  contraseña,  la
                  confidenciales  de  la  base  de  datos,       consulta SQL generada dinámicamente se
                  modificar  datos  de  la  base  de  datos      vería  así:    SELECT  *  FROM  usuarios
                  (Insertar/Actualizar/Eliminar),  ejecutar      WHERE usuario = 'admin' AND pass =
                  operaciones de administración en la base       'pass123';
                  de  datos  (como  apagar  el  DBMS),
   1   2