Tutorial de inyección SQL: aprenda con el ejemplo

Los datos son uno de los componentes más vitales de los sistemas de información. La organización utiliza aplicaciones web basadas en bases de datos para obtener datos de los clientes. SQL es el acrónimo de Lenguaje de Consulta Estructurado. Se utiliza para recuperar y manipular datos en la base de datos.

¿Qué es una inyección SQL?

La inyección SQL es un ataque que envenena declaraciones SQL dinámicas para comentar ciertas partes de la declaración o agregar una condición que siempre será verdadera. Aprovecha los fallos de diseño de aplicaciones web mal diseñadas para explotar sentencias SQL y ejecutar código SQL malicioso.

SQL Injection

Cómo funciona la inyección SQL

Los tipos de ataques que se pueden realizar mediante inyección SQL varían según el tipo de motor de base de datos. El ataque funciona en sentencias SQL dinámicas.. Una declaración dinámica es una declaración que se genera en tiempo de ejecución utilizando parámetros de contraseña de un formulario web o una cadena de consulta URI.

Consideremos una aplicación web sencilla con un formulario de inicio de sesión. El código para el formulario HTML se muestra a continuación.

<form action=‘index.php’ method="post">

<input type="email" name="email" required="required"/>

<input type="password" name="password"/>

<input type="checkbox" name="remember_me" value="Remember me"/>

<input type="submit" value="Submit"/>

</form>

AQUÍ,

  • El formulario anterior acepta la email dirección y contraseña y luego los envía a un PHP archivo llamado index.php.
  • Tiene la opción de almacenar la sesión de inicio de sesión en una cookie. Hemos deducido esto de la comprobación de recordar_me.box. Utiliza el método de publicación para enviar datos. Esto significa que los valores no se muestran en la URL.

Supongamos que la declaración en el backend para verificar la identificación del usuario es la siguiente

SELECCIONE * DE los usuarios DONDE email = $_POST['email’] Y contraseña = md5($_POST[‘contraseña’]);

AQUÍ,

  • La declaración anterior utiliza los valores de la matriz $_POST[] directamente sin desinfectarlos.
  • La contraseña está cifrada mediante el algoritmo MD5.

Ilustraremos el ataque de inyección SQL usando sqlfiddle. Abra la URL http://sqlfiddle.com/ en su navegador web. Obtendrás el siguientewing ventana.

Nota: tendrás que escribir las sentencias SQL

La inyección SQL funciona

Paso 1) Ingrese este código en el panel izquierdo

CREATE TABLE `users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `email` VARCHAR(45) NULL,
  `password` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));
  
  
insert into users (email,password) values ('m@m.com',md5('abc'));

Paso 2) Haga clic en Crear esquema

Paso 3) Ingrese este código en el panel derecho

seleccione * de los usuarios;

Paso 4) Haga clic en Ejecutar SQL. Verás lo siguientewing resultado

La inyección SQL funciona

Supongamos que el usuario suministra administrador@admin.sys y 1234 como contraseña. La declaración que se ejecutará en la base de datos sería

SELECCIONE * DE los usuarios DONDE email = 'admin@admin.sys' Y contraseña = md5('1234');

El código anterior se puede explotar comentando la parte de la contraseña y agregando una condición que siempre será verdadera. Supongamos que un atacante proporciona lo siguientewing entrada en el email campo de dirección.

xxx@xxx.xxx’ O 1 = 1 LÍMITE 1 — ‘ ]

xxx para la contraseña.

La declaración dinámica generada será la siguiente.

SELECCIONE * DE los usuarios DONDE email = 'xxx@xxx.xxx' O 1 = 1 LÍMITE 1 - ' ] Y contraseña = md5('1234');

AQUÍ,

  • xxx@xxx.xxx termina con una comilla simple que completa la comilla de cadena
  • OR 1 = 1 LIMIT 1 es una condición que siempre será verdadera y limita los resultados devueltos a un solo registro.
  • — ‘Y… es un comentario SQL que elimina la parte de la contraseña.

Copie la declaración SQL anterior y péguela en SQL FiddleRun SQL Text box como se muestra a continuación

La inyección SQL funciona

Actividad de piratería: SQL inyecta una aplicación web

Disponemos de una sencilla aplicación web en http://www.techpanda.org/ que es vulnerable a ataques de inyección SQL solo con fines de demostración. El código del formulario HTML anterior se toma de la página de inicio de sesión. La aplicación proporciona seguridad básica como desinfectar el email campo. Esto significa que nuestro código anterior no se puede utilizar para omitir el inicio de sesión.

Para evitarlo, podemos explotar el campo de contraseña. El siguiente diagrama muestra los pasos que debes seguir

SQL inyectar una aplicación web

Supongamos que un atacante proporciona lo siguientewing Las opciones de entrada

  • Paso 1: Ingrese xxx@xxx.xxx como email dirección
  • Paso 2: Ingrese xxx’) O 1 = 1 — ]

SQL inyectar una aplicación web

  • Haga clic en el botón Enviar
  • Serás dirigido al panel de control.

La declaración SQL generada será la siguiente

SELECCIONE * DE los usuarios DONDE email = 'xxx@xxx.xxx' Y contraseña = md5('xxx') O 1 = 1 - ]');

El siguiente diagrama ilustra la declaración que se ha generado.

SQL inyectar una aplicación web

AQUÍ,

  • La declaración asume inteligentemente que se utiliza cifrado md5
  • Completa la comilla simple y el corchete de cierre.
  • Agrega una condición a la declaración que siempre será verdadera.

En general, un ataque de inyección SQL exitoso intenta utilizar varias técnicas diferentes, como las demostradas anteriormente, para llevar a cabo un ataque exitoso.

Otros tipos de ataques de inyección SQL

Las inyecciones SQL pueden causar más daño que simplemente pasar los algoritmos de inicio de sesión. Algunos de los ataques incluyen

  • Borrando datos
  • Actualizando datos
  • Insertar datos
  • Ejecutar comandos en el servidor que pueden descargar e instalar programas maliciosos como troyanos.
  • Exportar datos valiosos como tarjetas de créditotails, y conmaily contraseñas para el servidor remoto del atacante
  • Obtener inicio de sesión de usuariotails etc.

La lista de arriba no es exhaustiva; simplemente te da una idea de lo que es la inyección SQL.

Herramientas de automatización para inyección SQL

En el ejemplo anterior, utilizamos técnicas de ataque manual basadas en nuestro vasto conocimiento de SQL. Existen herramientas automatizadas que pueden ayudarle a realizar los ataques de forma más eficiente y en el menor tiempo posible. Estas herramientas incluyen

Cómo prevenir ataques de inyección SQL

Una organización puede adoptar la siguientewing política para protegerse contra ataques de inyección SQL.

  • Nunca se debe confiar en las aportaciones del usuario. Siempre debe desinfectarse antes de usarse en declaraciones SQL dinámicas.
  • Procedimientos almacenados - estos pueden encapsular las declaraciones SQL y tratar todas las entradas como parámetros.
  • Declaraciones preparadas –declaraciones preparadas para funcionar creando primero la declaración SQL y luego tratando todos los datos del usuario enviados como parámetros. Esto no tiene ningún efecto sobre la sintaxis de la declaración SQL.
  • Expresiones regulares -Estos se pueden utilizar para detectar código potencialmente dañino y eliminarlo antes de ejecutar las declaraciones SQL.
  • Derechos de acceso del usuario de conexión a la base de datos –sólo se deben otorgar los derechos de acceso necesarios a las cuentas utilizadas para conectarse a la base de datos. Esto puede ayudar a reducir lo que las sentencias SQL pueden realizar en el servidor.
  • Error de mensajes -estos no deben revelar información confidencial ni dónde exactamente ocurrió un error. Mensajes de error personalizados simples como “Lo sentimos, estamos experimentando errores técnicos. Se ha contactado con el equipo técnico. Inténtelo de nuevo más tarde” se puede utilizar en lugar de mostrar las declaraciones SQL que causaron el error.

Actividad de piratería: utilice Havij para inyección SQL

En este escenario práctico, utilizaremos el programa Havij Advanced SQL injection para escanear un sitio web en busca de vulnerabilidades.

Nota: su programa antivirus puede marcarlo debido a su naturaleza. Debe agregarlo a la lista de exclusiones o pausar su software antivirus.

La siguiente imagen muestra la ventana principal de Havij.

Utilice Havij para inyección SQL

La herramienta anterior se puede utilizar para evaluar la vulnerabilidad de un sitio web/aplicación.

Resumen

  • La inyección SQL es un tipo de ataque que explota declaraciones SQL incorrectas
  • La inyección SQL se puede utilizar para omitir algoritmos de inicio de sesión, recuperar, insertar, actualizar y eliminar datos.
  • Las herramientas de inyección SQL incluyen SQLMap, SQLPing y SQLSmack, etc.
  • Una buena política de seguridad al escribir declaraciones SQL puede ayudar a reducir los ataques de inyección SQL.
Guru99 está patrocinado por Invicti
invicti

Invicti, los desarrolladores de la tecnología de escaneo basado en pruebas, han patrocinado el proyecto Guru99 para ayudar a crear conciencia sobre la seguridad de las aplicaciones web y permitir que más desarrolladores aprendan a escribir código seguro.