Внедрение SQL — это набор команд SQL, которые помещаются в строку URL или в структуры данных, чтобы получить требуемый ответ из баз данных, связанных с веб-приложениями. Этот тип атаки обычно происходит на веб-страницах, разработанных с использованием PHP или ASP.NET.
Атака SQL-инъекции может быть выполнена со следующими намерениями:
-
Для изменения содержимого баз данных
-
Для изменения содержимого баз данных
-
Для выполнения разных запросов, которые не разрешены приложением
Для изменения содержимого баз данных
Для изменения содержимого баз данных
Для выполнения разных запросов, которые не разрешены приложением
Этот тип атаки работает, когда приложения не проверяют входные данные должным образом, прежде чем передать их в оператор SQL. Инъекции обычно помещаются в адресные строки, поля поиска или поля данных.
Самый простой способ определить, уязвим ли веб-приложение для атаки SQL-инъекцией, — это использовать символ «» в строке и проверить, нет ли ошибок.
Типы атак SQLi
В этом разделе мы узнаем о различных типах SQLi-атак. Атака может быть разделена на следующие два типа —
-
Внутриполосное внедрение SQL (Simple SQLi)
-
Инференциальная SQL-инъекция (Blind SQLi)
Внутриполосное внедрение SQL (Simple SQLi)
Инференциальная SQL-инъекция (Blind SQLi)
Внутриполосное внедрение SQL (Simple SQLi)
Это самая распространенная инъекция SQL. Этот тип SQL-инъекций в основном происходит, когда злоумышленник может использовать один и тот же канал связи для запуска атаки и сбора результатов. Внутриполосные SQL-инъекции делятся на два типа:
-
SQL-инъекция на основе ошибок — метод SQL-инъекции на основе ошибок основан на сообщении об ошибке, выдаваемом сервером базы данных, для получения информации о структуре базы данных.
-
Внедрение SQL на основе объединения — это еще один метод внутриполосного внедрения SQL, который использует оператор SQL UNION для объединения результатов двух или более операторов SELECT в один результат, который затем возвращается как часть ответа HTTP.
SQL-инъекция на основе ошибок — метод SQL-инъекции на основе ошибок основан на сообщении об ошибке, выдаваемом сервером базы данных, для получения информации о структуре базы данных.
Внедрение SQL на основе объединения — это еще один метод внутриполосного внедрения SQL, который использует оператор SQL UNION для объединения результатов двух или более операторов SELECT в один результат, который затем возвращается как часть ответа HTTP.
Инференциальная SQL-инъекция (Blind SQLi)
При такого рода атаках с использованием SQL-атак злоумышленник не может увидеть результат атаки внутри группы, поскольку данные не передаются через веб-приложение. По этой причине он также называется Blind SQLi. Инференциальные SQL-инъекции бывают двух типов:
-
Булевский слепой SQLi — этот метод основан на отправке SQL-запроса в базу данных, что вынуждает приложение возвращать другой результат в зависимости от того, возвращает ли запрос результат TRUE или FALSE.
-
Основанный на времени слепой SQLi — этот метод основан на отправке SQL-запроса к базе данных, что заставляет базу данных ждать определенное количество времени (в секундах), прежде чем ответить. Время ответа укажет злоумышленнику, является ли результат запроса ИСТИНА или ЛОЖЬ.
Булевский слепой SQLi — этот метод основан на отправке SQL-запроса в базу данных, что вынуждает приложение возвращать другой результат в зависимости от того, возвращает ли запрос результат TRUE или FALSE.
Основанный на времени слепой SQLi — этот метод основан на отправке SQL-запроса к базе данных, что заставляет базу данных ждать определенное количество времени (в секундах), прежде чем ответить. Время ответа укажет злоумышленнику, является ли результат запроса ИСТИНА или ЛОЖЬ.
пример
Все типы SQLi могут быть реализованы путем манипулирования входными данными с приложением. В следующих примерах мы пишем скрипт Python для внедрения векторов атаки в приложение и анализируем выходные данные для проверки возможности атаки. Здесь мы собираемся использовать модуль python с именем mechanize , который дает возможность получения веб-форм на веб-странице и облегчает представление входных значений. Мы также использовали этот модуль для проверки на стороне клиента.
Следующий скрипт Python помогает отправлять формы и анализировать ответы с помощью 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
Проверяя и анализируя ответы, мы можем определить возможные атаки. Например, если он предоставляет ответ, включающий предложение «В вашем синтаксисе SQL есть ошибка», это означает, что внедрение SQL может повлиять на форму.