Los datos son uno de los componentes más críticos de los sistemas de información. La organización utiliza aplicaciones web basadas en bases de datos para recuperar datos de los clientes. SQL Es el acrónimo de Structured Inquiry Language. Se utiliza para recuperar y manipular datos en la base de datos.
¿Qué es la inyección SQL?
La inyección SQL es un ataque que envenena las declaraciones SQL dinámicas para comentar ciertas partes de la declaración o adjuntar una condición que siempre será cierta. Aprovecha las fallas de diseño en aplicaciones web mal diseñadas para explotar declaraciones SQL para ejecutar código SQL malicioso.
En este tutorial, aprenderá técnicas de inyección SQL y cómo puede 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 declaraciones SQL dinámicas.. Una declaración dinámica es una declaración generada en tiempo de ejecución utilizando una contraseña de parámetro de un formulario web o un cable de consulta URI.
Consideremos una aplicación web simple con un formulario de inicio de sesión. El código del 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 dirección de correo electrónico y luego les envía una contraseña a PHP archivo llamado index.php.
- Tiene una opción para almacenar la sesión de inicio de sesión en una cookie. Hemos eliminado esto de la casilla de verificación Remember_me. Utiliza el método de correo para ingresar datos. Esto significa que los valores no se muestran en la URL.
Creemos que la siguiente es la declaración del fin de semana sobre la verificación de la identificación de usuario
SELECCIONAR * De los usuarios DONDE correo electrónico = $ _POST[‘email’] Y contraseña = md5 ($ _ POST[‘password’]);
AQUÍ,
- La declaración anterior usa los valores de $ _POST[] edite directamente sin esterilizarlos.
- La contraseña se cifra mediante el algoritmo MD5.
Realizaremos un ataque de inyección SQL usando sqlfiddle. Abre la URL http://sqlfiddle.com/ en su navegador web. Obtendrá la siguiente ventana.
Nota: deberá escribir las declaraciones SQL
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 ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));
Paso 2) Haga clic en Crear esquema
Paso 3) Ingrese este código en el panel derecho
seleccionar * de los usuarios;
Paso 4) Haga clic en Ejecutar SQL. Verás el siguiente resultado
Presentar suministros de usuario Esta dirección de correo electrónico está protegida contra spambots. Necesita tener JavaScript habilitado para verlo. y 1234 como contraseña. La declaración sería la acción tomada contra la base de datos.
SELECCIONAR * De los usuarios DONDE email = ‘Esta dirección de correo electrónico está protegida contra spambots. Necesita tener JavaScript habilitado para verlo.‘Y contraseña = md5 (‘ 1234 ‘);
El código anterior se puede utilizar comentando en la sección de contraseña e ingresando una condición que siempre será verdadera. Es probable que un atacante proporcione la siguiente entrada en el campo de la dirección de correo electrónico.
Esta dirección de correo electrónico está protegida contra spambots. Necesita tener JavaScript habilitado para verlo.‘O 1 = 1 LIMITADO 1 -‘]
xxx para la contraseña.
La declaración dinámica generada será la siguiente.
SELECCIONAR * De los usuarios DONDE email = ‘Esta dirección de correo electrónico está protegida contra spambots. Necesita tener JavaScript habilitado para verlo.‘O 1 = 1 LIMITADO 1 -‘]Y contraseña = md5 (‘1234’);
AQUÍ,
- Esta dirección de correo electrónico está protegida contra spambots. Necesita tener JavaScript habilitado para verlo. termina con una cita que complementa la cita del cable
- O 1 = 1 LIMITADO 1 es una condición que siempre será cierta y que limita los resultados devueltos a un solo registro.
- – ‘Y … es un comentario SQL que elimina sus contraseñas.
Copie la declaración SQL anterior y péguela en el cuadro de texto FiddleRun SQL como se muestra a continuación
Actividad de piratería: inyección de aplicaciones web SQL
Tenemos una sencilla aplicación web en http://www.techpanda.org/ que es vulnerable a los ataques de inyección SQL solo con fines de demostración. El código de formulario HTML anterior se toma de la página de inicio de sesión. La aplicación proporciona seguridad básica, como proteger 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 lograrlo, podemos aprovechar el campo de las contraseñas. El siguiente diagrama muestra los pasos que debe seguir
Es probable que un atacante proporcione la siguiente entrada
- Paso 1: Ingrese Esta dirección de correo electrónico está protegida contra spambots. Necesita tener JavaScript habilitado para verlo. como la dirección de correo electrónico
- Paso 2: Ingrese xxx ‘) O 1 = 1 -]
- Haga clic en el botón Enviar
- Serás llevado al tablero
La declaración SQL generada será la siguiente
SELECCIONAR * De los usuarios DONDE email = ‘Esta dirección de correo electrónico está protegida contra spambots. Necesita tener JavaScript habilitado para verlo.‘Y contraseña = md5 (‘ xxx ‘) O 1 = 1 -]’);
El siguiente diagrama muestra que se generó la declaración.
AQUÍ,
- Es comprensible que se utilice el cifrado md5 en la declaración
- Completa la cotización única y el corchete final.
- Se agrega una condición a la declaración que siempre será verdadera
En general, un ataque de inyección SQL exitoso intenta una serie de técnicas diferentes como las descritas anteriormente para realizar un ataque exitoso.
Otros tipos de ataque de inyección SQL
Las inyecciones de SQL pueden hacer más daño que simplemente pasar los algoritmos de inicio de sesión. Entre algunos de los ataques
- Borrando datos
- Actualizar datos
- Envío de detalles
- Ejecute comandos en el servidor que pueden descargar e instalar programas maliciosos como troyanos.
- Exporte datos valiosos, como detalles de tarjetas de crédito, correo electrónico y contraseñas al servidor remoto del atacante.
- Obtenga los datos de inicio de sesión del usuario, etc.
La lista de arriba no es exhaustiva; solo te da una idea de la inyección SQL
Herramientas automatizadas para inyección SQL
En el ejemplo anterior, usamos técnicas de ataque manual basadas en nuestro vasto conocimiento de SQL. Existen herramientas automatizadas que te ayudarán a realizar los ataques de una manera más eficiente y en el menor tiempo posible. Estas herramientas incluyen
Cómo prevenir ataques de inyección de SQL
Una organización puede adoptar la siguiente política para protegerse de los ataques de inyección de SQL.
- Nunca se debe confiar en la entrada del usuario – Siempre debe desinfectarse antes de usarse en sentencias SQL dinámicas.
- Procedimientos almacenados – estos pueden contener las sentencias SQL y manejar todas las entradas como parámetros.
- Declaraciones preparadas –preparó declaraciones para que funcionen creando primero la declaración SQL y luego tratando todos los datos de usuario ingresados como parámetros. Esto no tiene ningún efecto sobre la sintaxis de la instrucción SQL.
- Expresiones regulares –estos se pueden utilizar para detectar código potencialmente dañino y eliminarlo antes de que se ejecuten las sentencias SQL.
- Derechos de acceso de usuario de conexión a la base de datos –las cuentas utilizadas para conectarse a la base de datos solo deben tener los derechos de acceso necesarios. Esto puede reducir la cantidad de sentencias SQL que puede realizar el servidor.
- Error de mensajes –estos no deben revelar información confidencial y exactamente dónde ocurrió un error. Mensajes de error personalizados simples como «Lo sentimos, tenemos errores técnicos. Se contactó con el personal técnico. Vuelva a intentarlo más tarde ”, que se puede utilizar para reemplazar las instrucciones SQL que causaron el error.
Actividad de piratería: utilice Havij para la inyección de SQL
En este caso 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
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 registro, recuperar, ingresar 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 declaración SQL puede ayudar a reducir los ataques de inyección SQL.