¿Cómo realizar una inyección de SQL? Más ejemplo

Los datos son uno de los componentes más vitales de los sistemas de información. La organización utiliza aplicaciones web con base de datos para obtener datos de los clientes.

El lenguaje SQL es el acrónimo de Structured Query Language y es utilizado para recuperar y manipular datos en la base de datos.

Contenido pendiente de una última revisión.

¿Qué es una inyección SQL?

La inyección SQL es un ataque que envenena las instrucciones SQL dinámicas para comentar ciertas partes de la instrucción o agregar una condición que siempre será verdadera.

Aprovecha los defectos de diseño en aplicaciones web mal diseñadas para explotar las instrucciones SQL para ejecutar código SQL malicioso.

En este tutorial, aprenderás técnicas de inyección SQL y cómo puedes proteger las aplicaciones web de tales ataques.

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 instrucción dinámica es una instrucción que se genera en tiempo de ejecución utilizando la contraseña de parámetros de un formulario web o una cadena de consulta URI.

Consideremos una aplicación web simple 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>

Explicado

  • El formulario anterior acepta la dirección de correo electrónico y, a continuación, la contraseña los envía a un archivo PHP denominado index.php.
  • Tiene la opción de almacenar la sesión de inicio de sesión en una cookie. Hemos deducido esto de la casilla de verificación remember_me. Utiliza el método post para enviar datos. Esto significa que los valores no se muestran en la URL..

Supongamos que la instrucción en el backend para comprobar el ID de usuario es la siguiente:

SELECT * FROM users WHERE email = $_POST[’email’] AND password = md5($_POST[‘password’]);

Explicado

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

Ilustraremos el ataque de inyección SQL usando sqlfiddle. Abre la URL http://sqlfiddle.com/ en el navegador web. Obtendrá la siguiente ventana.

Paso 1) Introduce 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 ('[email protected]',md5('abc'));

Paso 2)

Haz clic en Esquema de compilación
Paso 3) Introduce este código en el panel derecho

select * from users;

Paso 4) Haz clic en Ejecutar SQL. Verás el siguiente resultado

Supongamos que el usuario proporcionado es [email protected] y 1234 como contraseña. La declaración que se ejecutará en la base de datos sería:

SELECT * FROM users WHERE email = ‘[email protected]’ AND password = md5(‘1234’);

El código anterior se puede explotar comentando la parte de contraseña y agregando una condición que siempre será verdadera.

Supongamos que un atacante proporciona la siguiente entrada en el campo de dirección de correo electrónico.

[email protected]’ OR 1 = 1 LIMIT 1 — ‘ ]

xxx para la contraseña.

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

SELECT * FROM users WHERE email = ‘[email protected]’ OR 1 = 1 LIMIT 1 — ‘ ] AND password = md5(‘1234’);
  • [email protected] termina con una sola cita que completa la cita de cadena
  • OR 1 = 1 LIMIT 1 es una condición que siempre será verdadera y limita los resultados devueltos a un solo registro.
  • — ‘ AND… es un comentario SQL que elimina la parte de contraseña.

Copia la instrucción SQL anterior y péguela en el cuadro de texto SQL FiddleRun SQL.

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

Tenemos una aplicación web simple en http://www.techpanda.org/** que es vulnerable a los 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 campo de correo electrónico. Esto significa que nuestro código anterior no se puede utilizar para omitir el inicio de sesión.

Para evitar eso, podemos explotar el campo de contraseña.

  • Paso 1: Ingresa [email protected] como dirección de correo electrónico.
  • Paso 2: Ingresa xxx’) O 1 = 1 — ]
  • Paso 3: Haz clic en el botón Enviar.
  • Paso 4: Se le dirigirá al panel de control.

La instrucción SQL generada será la siguiente:

SELECT * FROM users WHERE email = ‘[email protected]’ AND password = md5(‘xxx’) OR 1 = 1 — ]’);
  • La instrucción asume de forma inteligente que se utiliza el cifrado md5
  • Completa el presupuesto único y el corchete de cierre
  • Anexa una condición a la instrucción que siempre será verdadera

En general, un ataque de inyección SQL exitoso intenta una serie de 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 hacer más daño que simplemente pasar los algoritmos de inicio de sesión. Algunos de los ataques incluyen:

  • Eliminación de datos.
  • Actualización de datos.
  • Inserción de datos.
  • Ejecución de comandos en el servidor que pueden descargar e instalar programas maliciosos como troyanos.
  • Exportación de datos valiosos, como detalles de tarjetas de crédito, correo electrónico y contraseñas al servidor remoto del atacante.
  • Obtener detalles de inicio de sesión del usuario, etc..

La lista anterior no es exhaustiva; solo da una idea de lo que es una inyección SQL.

Herramientas de automatización para una 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 ayudarte a realizar los ataques de forma más eficiente y en el menor tiempo posible. Estas herramientas incluyen

  • SQLMap – http://sqlmap.org/
  • Inyección JSQL – https://tools.kali.org/vulnerability-analysis/jsql

Cómo prevenir los ataques de inyección SQL

Una organización puede adoptar la siguiente directiva para protegerse contra los ataques de inyección SQL.

  • Nunca se debe confiar en la entrada del usuario: Siempre debe desinfectarse antes de utilizarse en instrucciones SQL dinámicas.
  • Procedimientos almacenados: pueden encapsular las instrucciones SQL y tratar todas las entradas como parámetros.
  • Instrucciones preparadas: instrucciones preparadas para funcionar creando primero la instrucción SQL y luego tratando todos los datos de usuario enviados como parámetros. Esto no tiene ningún efecto en la sintaxis de la instrucción SQL.
  • Expresiones regulares: se pueden usar para detectar código dañino potencial y eliminarlo antes de ejecutar las instrucciones SQL.
  • Derechos de acceso de usuario de conexión a la base de datos: solo 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 instrucciones SQL pueden realizar en el servidor.
  • Mensajes de error: estos no deben revelar información confidencial y dónde se produjo exactamente 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 instrucciones SQL que causaron el error.

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

En este escenario práctico, vamos a utilizar el programa Havij Advanced SQL Injection para escanear un sitio web en busca de vulnerabilidades.

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

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 instrucciones SQL incorrectas
  • La inyección SQL se puede utilizar para omitir algoritmos de inicio de sesión, recuperar, insertar y actualizar y eliminar datos.
  • Las herramientas de inyección SQL incluyen SQLMap, SQLPing y SQLSmack, etc.
  • Una buena política de seguridad al escribir una instrucción SQL puede ayudar a reducir los ataques de inyección SQL.

? Libro Hacking desde 0


? Herramientas Hacking ? Recursos Hacking


?‍♀️ Cursos Seguridad en Red ? Cursos RedesCursos Servicios en Nube ?‍♂️ Libros Seguridad y Criptografía

Relacionado

ForEach de Javascript: Array para bucles

Como una de las estructuras de control básicas en la programación, los bucles son casi una adición diaria al código que escribimos. El bucle forEach clásico es uno de los primeros fragmentos de código que aprendemos a escribir como programadores. Si fueras un desarrollador de Javascript, sabrías que Javascript no es ajeno a la iteración a través de los elementos de una matriz o un mapa ¡SEGUIR LEYENDO!

10 Mejores alternativas de Sci-hub para descargar artículos de investigación gratis

Como sabemos, Sci-hub es un sitio web increíble con millones de artículos de investigación para todos los estudiantes universitarios y académicos. El sitio web de Sci-Hub se encarga de obtener los artículos de investigación y artículos de pago utilizando las credenciales que se filtran. La fuente de credenciales utilizada por este sitio web no está clara. Sin embargo, se supone que muchas de ellas son donadas, ¡SEGUIR LEYENDO!

10 Características Sorprendentes de Windows que Deberías Conocer en 2024

Aunque haya sido usuario de Windows durante décadas, el sistema operativo es tan amplio y complejo que siempre existen características útiles, pero menos conocidas, que podrían sorprenderte. En este sentido, he identificado diez funciones poco conocidas de Windows que pueden potenciar su eficiencia, comodidad e incluso su experiencia de uso lúdico en su PC.

¡REBAJADO!
Microsoft Surface Go 2 - Portátil 2 en 1 de 10.5 pulgadas Full HD, Wifi, Intel...
  • Procesador Dual-Core Intel Pentium Gold 4425Y (2...
  • Memoria RAM de 8 GB LPDDR3
  • Disco SSD de 128 GB
Todas estas características deberían ser compatibles tanto con Windows 10 ¡SEGUIR LEYENDO!

10 Criptomonedas con Potencial de Crecimiento de Futuro

El rumor en torno a las criptomonedas no se desvanece por mucho que existan grandes pesimistas alrededor de los malos rumores. Entonces, si consideras invertir en el mundo de las criptomonedas, deberías estar atento a las criptomonedas que se espera que tengan un buen desempeño para el resto de 2021. En los últimos tiempos, los tokens DeFi están recibiendo toda la atención y es más que ¡SEGUIR LEYENDO!

10 Empresas de robótica más importantes del mundo

Los cambios de paradigma revolucionarios debido a los desarrollos de la robótica en todo el mundo están generando nuevos puntos de vista en muchos sectores, entre ellos en los de la industria y la tecnología. Con la ayuda de la Inteligencia Artificial, la tecnología produce resultados innovadores cada segundo y el campo de la robótica define y reconfigura su uso a cada instante. Cada día que ¡SEGUIR LEYENDO!

10 Frameworks que los Desarrolladores de Software deberían Aprender 2024

Bienvenidos desarrolladores web y de software, estamos en los inicios de 2023 y es posible que muchos se esten planteado sus objetivos para lo largo del año. Con anterioridad ya he compartidos las rutas de aprendizaje para un desarrollador front-end, un desarrollador full-stack o un desarrollador back-end entre otros muchos contenidos más. En este artículo, me gustaría compartir algunos de los mejores frameworks y bibliotecas para ¡SEGUIR LEYENDO!

10 Repositorio de GitHub que todo Desarrollador Web debería conocer

GitHub es el lugar que debes buscar cuando intentas mejorar como desarrollador, toda la información que necesitas está disponible en algún repositorio que alguien ya se ha molestado en indexar. Sin embargo, la parte complicado es encontrar el repositorio más adecuado. Es fácil sentirse perdido en todos los repositorios disponibles dentro de GitHub. Para ayudarte, he elaborado una lista de 10 repositorios de GitHub que pueden ¡SEGUIR LEYENDO!