Тестирование на проникновение Python - Веб-атака SQLi

SQL-инъекция - это набор команд SQL, которые помещаются в строку URL-адреса или в структуры данных для получения нужного нам ответа из баз данных, связанных с веб-приложениями. Этот тип атак обычно имеет место на веб-страницах, разработанных с использованием PHP или ASP.NET.

Атака с использованием SQL-инъекции может быть выполнена со следующими целями:

  • Для изменения содержимого баз данных

  • Для изменения содержимого баз данных

  • Для выполнения различных запросов, которые не разрешены приложением

Этот тип атаки работает, когда приложения не проверяют правильность входных данных перед передачей их оператору SQL. Инъекции обычно помещаются в адресные строки, поля поиска или поля данных.

Самый простой способ определить, уязвимо ли веб-приложение для атаки с использованием SQL-инъекции, - это использовать в строке символ «'» и посмотреть, не возникнет ли ошибка.

Типы атак SQLi

В этом разделе мы узнаем о различных типах атак SQLi. Атаки можно разделить на следующие два типа:

  • Внутриполосное внедрение SQL (простой SQLi)

  • Логическая SQL-инъекция (слепой SQLi)

Внутриполосное внедрение SQL (простой SQLi)

Это самая распространенная SQL-инъекция. Этот вид SQL-инъекции в основном происходит, когда злоумышленник может использовать один и тот же канал связи как для запуска атаки, так и для сбора результатов. Внутриполосные инъекции SQL делятся на два типа:

  • Error-based SQL injection - Методика SQL-инъекции на основе ошибок основана на сообщении об ошибке, выданном сервером базы данных, для получения информации о структуре базы данных.

  • Union-based SQL injection - Это еще один метод внутриполосного внедрения SQL, который использует оператор UNION SQL для объединения результатов двух или более операторов SELECT в один результат, который затем возвращается как часть ответа HTTP.

Логическая SQL-инъекция (слепой SQLi)

В этом типе атаки с использованием SQL-инъекции злоумышленник не может увидеть результат атаки внутри канала, потому что никакие данные не передаются через веб-приложение. По этой причине его также называют слепым SQLi. Логические SQL-инъекции бывают двух типов:

  • Boolean-based blind SQLi - Этот вид техники основан на отправке SQL-запроса в базу данных, который заставляет приложение возвращать другой результат в зависимости от того, возвращает запрос TRUE или FALSE.

  • Time-based blind SQLi- Этот вид техники основан на отправке SQL-запроса к базе данных, который заставляет базу данных ждать определенное время (в секундах) перед ответом. Время ответа укажет злоумышленнику, является ли результат запроса ИСТИННЫМ или ЛОЖНЫМ.

пример

Все типы SQLi можно реализовать, управляя входными данными в приложении. В следующих примерах мы пишем сценарий Python для внедрения векторов атаки в приложение и анализа выходных данных, чтобы проверить возможность атаки. Здесь мы собираемся использовать модуль Python с именемmechanize, который дает возможность получать веб-формы на веб-странице, а также облегчает отправку входных значений. Мы также использовали этот модуль для проверки на стороне клиента.

Следующий скрипт Python помогает отправлять формы и анализировать ответ с помощью mechanize -

Прежде всего нам нужно импортировать mechanize модуль.

import mechanize

Теперь укажите имя URL-адреса для получения ответа после отправки формы.

url = input("Enter the full url")

Следующая строка кода откроет URL-адрес.

request = mechanize.Browser()
request.open(url)

Теперь нам нужно выбрать форму.

request.select_form(nr = 0)

Здесь мы установим имя столбца «id».

request["id"] = "1 OR 1 = 1"

Теперь нам нужно отправить форму.

response = request.submit()
content = response.read()
print content

Приведенный выше сценарий распечатает ответ на запрос POST. Мы отправили вектор атаки, чтобы сломать SQL-запрос и распечатать все данные в таблице вместо одной строки. Все векторы атак будут сохранены в текстовом файле, например vectors.txt. Теперь приведенный ниже скрипт Python получит эти векторы атак из файла и отправит их на сервер один за другим. Он также сохранит вывод в файл.

Для начала импортируем модуль механизации.

import mechanize

Теперь укажите имя URL-адреса для получения ответа после отправки формы.

url = input("Enter the full url")
   attack_no = 1

Нам нужно прочитать векторы атак из файла.

With open (‘vectors.txt’) as v:

Теперь отправим запрос с каждым вектором арака.

For line in v:
   browser.open(url)
   browser.select_form(nr = 0)
   browser[“id”] = line
   res = browser.submit()
content = res.read()

Теперь следующая строка кода запишет ответ в выходной файл.

output = open(‘response/’ + str(attack_no) + ’.txt’, ’w’)
output.write(content)
output.close()
print attack_no
attack_no += 1

Проверяя и анализируя ответы, мы можем определить возможные атаки. Например, если он предоставляет ответ, включающий предложениеYou have an error in your SQL syntax тогда это означает, что на форму может повлиять SQL-инъекция.