¿Qué hace que una inyección SQL cuente como inyección ciega?

4

En primer lugar, por lo que he leído hasta ahora, la inyección ciega de SQL basada en Boolean es cuando no puede ver ningún mensaje de error y confiar en las respuestas true o false a las consultas para ordeñar la base de datos. Por ejemplo, puede elaborar una consulta que le preguntará a la base de datos si el primer carácter del nombre del esquema de la tabla es una "E" o lo que sea. Y puede seguir preguntando hasta que tenga el nombre de la base de datos, el nombre de la tabla y los nombres de las columnas para volcar la información que desea.

Entiendo que también hay una inyección ciega de SQL basada en el tiempo, pero no me preocupa eso.

En segundo lugar, he visto muchos artículos & Los videos de YouTube dicen que lo que están mostrando es una inyección ciega de SQL (porque no se muestran mensajes de error). Sin embargo, todavía pueden utilizar las consultas UNION SELECT para extraer información de la base de datos. Por ejemplo, id=1' UNION SELECT 1,2,3,table_name from information_schema.tables . ¿No cuenta esto como inyección SQL basada en UNION? Si no es así, ¿cómo se llama?

Por derechos, una inyección SQL ciega pura no le permite usar UNION enunciados. Estoy en lo cierto ¿Hay algo malo con mi comprensión?

    
pregunta ysj 08.06.2013 - 09:44
fuente

2 respuestas

5

La mayoría de lo que dices es correcto.

La declaración UNION con respecto a la inyección SQL es solo otra manera de intentar romper / cambiar / extraer datos. Puede ser ciego, parcialmente ciego o no ciego, esto depende del servidor, el código y el informe de errores.

Si la inyección no genera ningún dato, pero sí afecta el comportamiento del sitio de manera que pueda interpretar que ha hecho algo diferente de lo normal, se considera parcialmente ciego.

Si la inyección no genera ningún dato y no hay ningún cambio en el comportamiento del sitio, esto se considera totalmente ciego.

El uso de UNION puede o no cambiar el resultado, pero no está intrínsecamente vinculado a ser ciego o no.

    
respondido por el David Houde 08.06.2013 - 13:41
fuente
2
La inyección de SQL basada en

UNION SELECT no se considera ciega, y tampoco la inyección de SQL basada en errores. Así que los videos que encontraste son realmente incorrectos en sus descripciones.

Es ciego si no puede ver directamente las filas de la salida de la base de datos en la página. Con la inyección UNION SELECT SQL, partes de la página contendrán datos de tablas y columnas que el codificador original no pretendía incluir. Y con el error basado en errores, obtienes lo mismo, solo que está en la salida de los mensajes de error.

La inyección de SQL ciego significa que ninguna de las filas en la base de datos se revela directamente en la página. Los ejemplos suelen incluir si encuentra una inyección SQL dentro de una declaración INSERT o DELETE , o dentro de una declaración SELECT que se desecha de inmediato, o de lo contrario no se imprime, los datos que recupera.

Por ejemplo, si tenía algún código de inicio de sesión que parecía query("SELECT username FROM users WHERE username='$username' AND password='$password'"); , donde $username o $password son inyectables, las probabilidades son el resultado de esta consulta que en realidad no se publicará en ninguna parte. Es simplemente un "cheque", no una recuperación. En este caso, su única opción es utilizar la inyección ciega. En un caso como este, puede usar la inyección ciega para leer datos de cualquier tabla, o puede usarla para iniciar sesión sin saber la contraseña. La inyección ciega no siempre se limita a extraer datos de la base de datos, sino que también puede incluir acciones que el autor no intentó abusar de los resultados de las consultas SQL.

La inyección de ciegos se divide en dos tipos: ciego booleano y ciego basado en el tiempo. A veces, a los ciegos booleanos se les llama "ciegos parciales" y los basados en el tiempo se les llama "ciegos completos", pero creo que no están claros.

Las inyecciones booleanas son las más fáciles de explotar, pero es posible que no se encuentren en todos los casos. Todas las inyecciones ciegas de SQL (en realidad, todas las inyecciones de SQL en cualquier lugar) serán vulnerables a la inyección ciega basada en el tiempo siempre que la aplicación de la base de datos tenga algún tipo de función o característica que pueda retrasar la respuesta por al menos uno o dos segundos. La mayoría de las grandes bases de datos tienen tales funciones. La desventaja es que puede llevar mucho tiempo extraer grandes cantidades de datos.

Lo dejaré para investigar exactamente cómo funcionan esas inyecciones ciegas, pero su descripción de la inyección ciega booleana es correcta.

    
respondido por el Anorov 09.06.2013 - 21:43
fuente

Lea otras preguntas en las etiquetas