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.