Entender al Interprete SQL

  • Posted on: 23 January 2019
  • By: ReYDeS

Uno de los principales aspectos sobre las vulnerabilidades de inyección SQL el cual se debe entender, es como aprovecharse del interprete SQL. Un interprete toma entradas y actúa inmediatamente sobre estas, sin deber pasar a través de los procesos tradicionales de programación, como enlazado, compilación, depuración o ejecución. Por ejemplo, un interprete SQL tiene un rol importante cuando se busca por la información de un usuario. El siguiente código es parte de DVWA (Damn Vulnerable Web Application).

$getid = “SELECT first_name, last_name FROM users WHERE user_id = ‘$id’”;

Cuando se busca por la información de un usuario basándose en su ID de usuario, se realizan los siguientes pasos:

1. El usuario ingresa el ID de usuario dentro del recuadro de búsqueda en la aplicación web para luego hacer clic en el botón “Submit”.

2. La aplicación web almacena la entrada del usuario dentro de la variable de nombre “id”.

3. La aplicación construye una sentencia SQL constituida de código previamente escrito y la variable “id”, la cual fue utilizada en la petición HTTP.

4. La aplicación web envía esta consulta SQL adecuadamente formada hacia la base de datos, donde es ejecutada por el interprete SQL.

5. Los resultados son devueltos hacia la aplicación web, mostrando el nombre y apellido del usuario en el navegador web.

La sintaxis simplificada de la consulta SQL ejecutada cuando se busca el ID de usuario “3” es:

$getid = “SELECT first_name, last_name FROM users WHERE user_id = ‘3’”;

Esto es SQL básico. Se seleccionan simplemente las columnas de nombre “first_name” y “last_name” de la tabla de nombre “users”, los cuales tienen el valor “3” en la columna de nombre “user_id”.

Toda la consulta es tratada como una variable de nombre “getid”, la cual es pasada hacia el interprete, esta es la razón el porque las dobles comillas están presentes antes y después de la sentencia SELECT, terminando con un símbolo de punto y coma.

El usuario proporciona el termino de búsqueda, para luego ser almacenado dentro de comillas simples como una variable. Esta luego se incluye dentro de la sentencia SQL con comillas simples al inicio y al final, pero antes de las dobles comillas finales de la sentencia.

Fuentes:

http://www.dvwa.co.uk/
https://www.w3schools.com/sql/

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor en Hacking Ético, Forense Digital & GNU/Linux
Correo Electrónico: ReYDeS@gmail.com
Twitter: @Alonso_ReYDeS
LinkedIn: pe.linkedin.com/in/alonsocaballeroquezada
Facebook: https://www.facebook.com/alonsoreydes
Youtube: http://www.youtube.com/c/AlonsoCaballero
Resumen de mi CV: http://www.reydes.com/d/?q=node/1