¿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

❌ React Native, crear aplicación como Netflix con Mario Díez

[no_toc] [expand title="Índice del Vídeotutorial"] 1. FlatList Horizontal 2. Componente Swiper 3. Menú Animado y Header 4. FlatList Grid 5. Más Flexbox, Tabs y Linear gradiantes 6. Reproductor de Vídeo 7. Share API 8. Animatable Header y NativeEvents 9. React Navigation 10. Header Múltiple con Animated 11. Modal con React Navigation 12. React Navigation con Redux 13. Servidor NodeJS con MongoDB para React Native 14. Conectando ¡SEGUIR LEYENDO!

❌ React Native con Mario Díez

[no_toc] [expand title="Índice del Vídeotutorial"] 1. Instalación 2. Introducción 3. Props y State 4. Fetch Data 5. ListView 6. Fech Data 2 7. Navigator IOS 8. Navigator 9. Flexbox 10. PropTypes 11. TabBarIOS 12. Formularios 13. AsyncStorage 14. Recorriendo Arrays con Map 15. Notificaciones Push 16. Notificaciones Push desde NodeJS 17. Barra de Búsqueda en ListView 18. Utilización de CameraRoll 19. Children o Props 20. Diferenciar ¡SEGUIR LEYENDO!

❌ React Native con Iván B. Trujillo

[no_toc] [expand title="Índice del Vídeotutorial"] 1. Primeros Pasos 2. Componentes, Botones y Alertas 3. Pantalla de Login, Navegador y Vistas 4. Navegación por Pestañas 5. Peticiones a API y ListView 6. Vista Detalles y Paso de Propiedades a Componente Hijo [/expand] [yotuwp type="playlist" id="PLuzQ5Ac_9_cI-ukaElfIFKXyhLsADBiJe" ] [expand title="Creador"] Editor del blog de Medium: Canarias JS [/expand]

❌ Javascript con Píldoras Informáticas

[no_toc] [expand title="Índice del Vídeotutorial"] 1. Presentación. Vídeo 1 2. Introducción. Vídeo 2 3. Sintaxis Básica I. Ubicación del código. Vídeo 3 4. Sintaxis Básica II. Estructuras Básicas. Vídeo 4 5. Sintaxis Básica III. Operadores Básicos. Vídeo 5 6. Sintaxis Básica IV. Operadores y prompt. Vídeo 6 7. Sintaxis Básica V Arrays, Matrices, Arreglos. Vídeo 7 8. Sintaxis Básica V. Arrays, Matrices, Arreglos II. Vídeo 8 ¡SEGUIR LEYENDO!

❌ Javascript con Falcon Masters

[no_toc] [expand title="Índice del Vídeotutorial"] 1. Introducción 2. Variables 3. Tipos de Dato 4. Arreglos 5. Metodos y propiedades para los Arreglos 6. Condicionales 7. Ciclo Fo 8. Ciclo While 9. Funciones 10. Ejercicio con Funciones y Formularios 11. Scope de Javascript (ámbito de las variables) 12. Metodos y propiedades para Cadenas de Texto 13. Introducción al DOM (Document Object Model) 14. Creando Nodos del DOM ¡SEGUIR LEYENDO!