862 Shares 8204 views

¿Qué es la inyección de SQL?

El número de sitios y páginas en la web está creciendo de manera constante. Tomado para el desarrollo de todos los que pueda. Y desarrolladores web novatos suelen utilizar código no seguro y viejo. Y crea una gran cantidad de lagunas para los criminales y piratas informáticos. De lo que son. Una de las vulnerabilidades más clásicos – inyección SQL.

Un poco de teoría

Mucha gente sabe que la mayoría de los sitios y servicios de la red está utilizando el almacenamiento de base de datos SQL. Se trata de un lenguaje de consulta estructurado que le permite controlar y gestionar el almacenamiento de datos. Hay muchas versiones diferentes de la base de datos del sistema de gestión de base de datos – Oracle, MySQL, PostgreSQL. Independientemente del nombre y tipo, que utilizan los mismos datos de la consulta. Es aquí donde radica la vulnerabilidad potencial. Si el desarrollador no pudo manejar adecuadamente y de forma segura solicitar, un atacante puede tomar ventaja de esto y utilizar tácticas especiales para acceder a la base de datos, y luego – y para toda la gestión del sitio.

Para evitar estas situaciones, es necesario optimizar correctamente el código y seguir de cerca en una forma en la que se está procesando una solicitud.

Compruebe si hay inyección SQL

Para establecer la presencia de una vulnerabilidad en la red tiene un peso de sistemas de software automatizados terminados. Sin embargo, es posible llevar a cabo una sencilla comprobación manual. Para ello, vaya a uno de los sitios de prueba y en la barra de direcciones para tratar de provocar un error de base de datos. Por ejemplo, un script en el sitio no puede manejar la petición y no recortarlas.

Por ejemplo, hay nekiy_sayt / index.php? Id = 25

La manera más fácil – para poner 25 después de la cita y enviar la solicitud. Si se ha producido ningún error, ya sea en el sitio y filtrar todas las solicitudes se manejan correctamente o está desconectado en la configuración de su producción. Si una página se vuelve a cargar con los problemas, entonces la vulnerabilidad a la inyección SQL es.

Después de que ella se enteró, se puede tratar de deshacerse de él.

Para implementar esta necesidad vulnerabilidad a conocer un poco acerca de los equipos de consultas SQL. Uno de ellos – UNIÓN. Reúne a varios resultados de la consulta en una sola. Por lo que podemos calcular el número de campos de la tabla. Ejemplo primera consulta es:

  • nekiy_sayt / index.php? id = 25 UNION SELECT 1.

En la mayoría de los casos, este registro debe generar un error. Esto significa que el número de campos no es igual a 1. Por lo tanto, la elección de las opciones de 1 o mayor, es posible establecer el número exacto:

  • nekiy_sayt / index.php? id = 25 UNION SELECT 1,2,3,4,5,6.

Es decir, cuando ya no aparecerá el error, significa que el número de campos de adivinar.

También hay una solución alternativa a este problema. Por ejemplo, cuando un gran número de campos – 30, 60 o 100. Este grupo de comandos. Agrupa a los resultados de una consulta por cualquier motivo, por ejemplo ID:

  • nekiy_sayt / index.php? id = 25 GRUPO POR 5.

Si no se ha recibido el error, entonces los campos de más de 5. Por lo tanto, la sustitución de las opciones de un rango bastante amplio, es posible calcular cuántos de ellos realmente.

Este ejemplo inyección SQL – para los principiantes que quieran probar a sí mismos en las pruebas de su sitio. Es importante recordar que para el acceso no autorizado a otro artículo disponible del Código Penal.

Los principales tipos de inyección

Implementar vulnerabilidad por SQL-inyección en varias formas de realización. A continuación se muestran los métodos más populares:

  • La UNIÓN la consulta SQL inyección. Un ejemplo sencillo de este tipo ya se ha examinado anteriormente. Se realiza debido a un error en la comprobación de los datos de entrada, que no se filtran.

  • basado en un error de inyección SQL. Como su nombre indica, este tipo también utiliza un error, el envío de expresiones compuestas sintácticamente incorrecta. Luego está la interceptación de las cabeceras de respuesta, el análisis que se pueden llevar a cabo más adelante inyección SQL.

  • Stacked consulta SQL inyección. Esta vulnerabilidad se determina mediante la realización de solicitudes sucesivas. Se caracteriza por la adición al final del signo ";". Este enfoque se implementa a menudo para acceder a la aplicación de lectura y escritura de datos o funciones del sistema operativo, si los privilegios permiten.

Software para la búsqueda de SQL-vulnerabilidades

Hay para inyección SQL, el programa generalmente tiene dos componentes – una exploración del sitio para posibles vulnerabilidades y los utilizan para tener acceso a los datos. Hay algunas herramientas para plataformas de casi todos conocidos. Su funcionalidad facilita en gran medida la comprobación sitio web para descifrar la inyección SQL.

sqlmap

Muy potente escáner que funciona con la mayoría de las bases de datos. Es compatible con varios métodos de aplicación de inyección SQL. Tiene la capacidad de reconocer automáticamente el tipo de agrietamiento hash de la contraseña y el diccionario. Presentes y funcionales de carga y descarga de archivos desde un servidor.

Instalación en Linux se realiza usando los comandos:

  • git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • cdsqlmap-dev /,
  • –wizard ./sqlmap.py.

Para Windows está disponible como una opción con la línea de comandos y la interfaz gráfica de usuario.

jSQL inyección

jSQL inyección – una herramienta multiplataforma para probar el uso de vulnerabilidades de SQL. Escrito en Java, por lo que el sistema debe ser instalado JRE. Capaz de manejar las peticiones GET, POST, encabezado, galleta. Cuenta con una interfaz gráfica conveniente.

La instalación de este paquete de software es la siguiente:

wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | grep-E -o '/ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[0-9] . {1,2} [0-9] {1,2} .jar '| cabeza-n 1`

Lanzamiento es usando el comando java -jar ./jsql-injection-v*.jar

Con el fin de iniciar el sitio de prueba en SQL-vulnerabilidad, es necesario introducir la dirección en el campo superior. Están separados por GET y POST. Con un resultado positivo, la lista de tablas disponibles aparecerá en la ventana de la izquierda. Puede ver y aprender algo de información confidencial.

pestaña «página de administración» utiliza para encontrar los paneles administrativos. En él por medio de plantillas especiales busca automáticamente el sistema registra los usuarios privilegiados. A partir de ellos se puede obtener sólo un hash de la contraseña. Pero él tiene en la caja de herramientas del programa.

Después de encontrar todas las vulnerabilidades de inyección y los medios necesarios, la herramienta va a permitir que el servidor siga los pasos de su archivo o, por el contrario, puede descargarlo desde allí.

v.7 SQLi Volquete

Este programa – fácil de usar herramienta para la búsqueda e implementación de vulnerabilidades SQL. Se produce la ONU se basa en la llamada Dorcas. Su lista se puede encontrar en Internet. Dorca de inyección SQL – estos son plantillas especiales de consultas de búsqueda. Con su ayuda, usted puede encontrar el sitio potencialmente vulnerables a través de cualquier motor de búsqueda.

Herramientas para la formación

Itsecgames.com en el lugar hay un conjunto especial de herramientas que permite que el ejemplo muestra cómo hacer la inyección de SQL y probarlo. Con el fin de beneficiar, es necesario descargar e instalar. El archivo contiene un conjunto de archivos, que es la estructura del sitio. Para instalarlo necesitará en el sistema existente de conjunto de servidor web Apache, MySQL y PHP.

Descomprimir el archivo en una carpeta del servidor web, usted tiene que ir a la dirección introducida al instalar este software. Una página con registro de usuario. Aquí es necesario introducir la información y haga clic en «Crear». Al mover el usuario a una nueva pantalla, el sistema le pedirá que seleccione uno de los casos de prueba. Entre ellos se encuentran ambos descritos por inyección, y muchos otros elementos de prueba.

Vale la pena considerar un ejemplo de tipo de inyección SQL GET / Buscar. Aquí es necesario seleccionarlo y haga clic en «Hack». Antes de que aparezca el usuario, y la imitación cadena de búsqueda de un sitio de la película. Para ordenar las películas pueden ser largas. Pero no solamente son 10. Por ejemplo, se puede tratar de entrar en el Hombre de Hierro. Se indicará la película, el sitio funciona, y las tablas que contiene. Ahora tenemos que comprobar si los filtros caracteres tipográficos especiales, en particular cotización. Para ello, agregue 'en la barra de direcciones ". Por otra parte, esto se debe hacer después del título de la película. El sitio le dará un error de error: Usted tiene un error en su sintaxis SQL; compruebe el manual que corresponde a su versión del servidor MySQL para el sintaxis derecho al uso cerca de '%' 'en la línea 1, que establece que los personajes aún no se manejan correctamente. Así que se puede tratar de sustituir su solicitud. Pero hay que calcular primero el número de campos. Se utiliza para este fin por el que se introduce después de las comillas: http://testsites.com/sqli_1.php?title=Iron+Man 'ordenado por 2 – & Action = búsqueda.

Este comando sólo muestra información sobre la película, es decir, el número de campos es mayor que 2. El doble guión le dice al servidor que las demás solicitudes deben ser desechados. Ahora tenemos que solucionar, poniendo cada vez más importancia, siempre y cuando no se imprime el error. Al final, resulta que los campos serán 7.

Ahora es el momento de obtener algo útil de la base. Modificará ligeramente el pedido en la barra de direcciones, llevándola a un formulario: http://testsites.com/sqli_1.php?title=Iron+Man 'union select 1, la base de datos (), usuario (), 4, contraseña, 6, 7 de los usuarios – & Action = búsqueda. Como resultado de su aplicación sería mostrar la cadena con los hashes de contraseñas, que pueden ser fácilmente convertidos en símbolos comprensibles utilizando uno de los servicios en línea. Un conjuró un poco y cogió un nombre de campo con un inicio de sesión, puede acceder a la entrada de otra persona, como administrador del sitio.

El producto tiene un tipo de inyección de especies de peso, en el que se practican. Hay que recordar que la aplicación de estas habilidades en la red en sitios reales puede ser un delito.

Inyección y PHP

Como regla general, el código PHP y es responsable de las peticiones de procesamiento necesarios procedentes del usuario. Por lo tanto, en este nivel que necesita para construir una defensa contra la inyección SQL en PHP.

En primer lugar, vamos a dar algunas pautas simples, sobre la base de lo que es necesario hacerlo.

  • Los datos siempre debe ser procesada antes de ser colocado en la base de datos. Esto se puede hacer ya sea mediante el uso de expresiones existentes, o mediante la organización de consultas manualmente. Aquí, también, hay que tener en cuenta que los valores numéricos se convierten al tipo que se necesita;
  • Evitada provocó diversas estructuras de control.

Ahora un poco acerca de las reglas de compilar consultas en MySQL para proteger contra la inyección SQL.

En la elaboración de las expresiones de consulta es importante para separar los datos de las palabras clave de SQL.

  • SELECT * FROM tabla WHERE nombre = Zerg.

En esta configuración, el sistema puede pensar que los Zerg – el nombre de cualquier campo, por lo que necesita para encerrar entre comillas.

  • SELECT * FROM tabla WHERE nombre = 'Zerg'.

Sin embargo, hay ocasiones en que el valor en sí contiene comillas.

  • SELECT * FROM tabla WHERE nombre = 'Costa de Marfil'.

Aquí solamente manejar parte de Costa, y el resto puede ser percibido como un equipo, que, por supuesto, no. Por lo tanto, se produce un error. Entonces usted necesita este tipo de datos del cribado. Para ello, utilice una barra invertida – .

  • SELECT * FROM tabla WHERE nombre = 'cat-d ' Ivoire'.

Todo lo anterior se refiere a las filas. Si la acción se lleva a cabo con un número, entonces no se necesita ninguna comillas o barras. Sin embargo, deben ser obligados a conducir por la fuerza con el tipo de datos deseado.

Hay recomendaciones que el nombre del campo se debe poner entre comillas inversas. Este símbolo está en el lado izquierdo del teclado, junto con una tilde "~". Esto es para asegurar que MySQL podía distinguir con precisión el nombre del campo de la palabra clave.

trabajo dinámico con datos

Muy a menudo, para obtener los datos de la base de datos mediante consultas, generado dinámicamente. Por ejemplo:

  • SELECT * FROM tabla WHERE número = '$ número'.

En este caso, el número variable $ se pasa como la determinación del valor del campo. ¿Qué pasará si se pone 'Costa de Marfil'? De error.

Para evitar este problema, por supuesto, puede incluir los ajustes de "comillas mágicas". Pero ahora los datos se proyectarán cuando sea necesario y no es necesario. Además, si el código está escrito a mano, se puede pasar un poco más de tiempo para crear resistente a las grietas del sistema en sí.

Para la adición independiente de una barra puede utilizar mysql_real_escape_string.

$ Número = mysql_real_escape_string (número $);

Año $ = mysql_real_escape_string ($ año);

$ Query = "INSERT INTO tabla (número, año, clase) VALUES ( '$ números', '$ año', 11)".

Aunque el código y el aumento en el volumen, pero potencialmente podría funcionar mucho más seguro.

marcadores de posición

Los marcadores de posición – una especie de marcadores para los que el sistema reconoce que este es el lugar que necesita para sustituir una función especial. Por ejemplo:

$ = $ Mysqli- Estado> prepare ( "Distrito SELECT número donde Name =?");

$ Sate-> bind_param ( "s", número $);

$ Sate-> execute ();

Esta sección de código toma una plantilla de solicitud de entrenamiento y luego se une el número variable, y lo ejecuta. Este enfoque permite dividir el procesamiento de consultas y su aplicación. Por lo tanto, puede ser salvado de la utilización de un código malicioso son SQL-.

¿Cómo sería un atacante

Sistema de protección – un factor muy importante, que no se puede descuidar. Por supuesto, un simple sitio de visita será más fácil restaurar. Y si se trata de un gran portal, el servicio, el foro? ¿Cuáles son las consecuencias si no se piensa en la seguridad?

En primer lugar, un hacker puede romper la integridad de la base y eliminarlo por completo. Y si el administrador o proveedor de alojamiento no hace una copia de seguridad, tendrá tiempos difíciles. Por encima de todo, un intruso, el agrietamiento de un solo sitio, puede ir al otro publicado en el mismo servidor.

El siguiente es el robo de información personal de los visitantes. Modo de empleo – todo está limitado sólo por la imaginación de un hacker. Pero en cualquier caso, las consecuencias no serán muy agradable. Especialmente si contenían información financiera.

Además, el atacante puede fusionar la base de datos usted mismo y luego extorsionar para su devolución.

usuarios de la información falsa a nombre del administrador del sitio, la persona que no están siendo, también puede haber consecuencias negativas como posibles hechos de fraude.

conclusión

Toda la información en este artículo se proporciona únicamente con fines informativos. Usarlo sólo tendrá que poner a prueba sus propios proyectos cuando detecta vulnerabilidades y abordarlas.

Para un estudio más a fondo de las técnicas de cómo llevar a cabo inyección SQL, es necesario comenzar con las capacidades de investigación actuales y características del lenguaje SQL. Como consultas compiladas, palabras clave, tipos de datos y el uso de todo.

Además, no puede prescindir de comprender el funcionamiento de las funciones de PHP y elementos HTML. El uso primario puntos vulnerables para la inyección – una línea de dirección, y varios campo de búsqueda. Aprender las funciones de PHP, el método de aplicación y características se darán cuenta de cómo evitar errores.

La presencia de muchas herramientas de software confeccionadas permite un análisis en profundidad sobre las vulnerabilidades sitio conocido. Uno de los productos más populares – Linux Kali. Esta imagen de un sistema operativo basado en Linux, que contiene un gran número de herramientas y programas que pueden llevar a cabo análisis exhaustivo de la fuerza sitio.

Lo que usted necesita saber cómo cortar el sitio? Es muy simple – es necesario estar al tanto de las posibles vulnerabilidades de su proyecto o sitio web. Sobre todo si se trata de una tienda online con pago en línea, donde los datos de usuario de pago puede verse comprometida por un atacante.

Para el estudio profesional del personal de seguridad de la información existente será capaz de revisar el sitio para una variedad de criterios y profundidad. A partir de un simple HTML-inyecciones y para la ingeniería social y phishing.