Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 семестр / БСБД6

.docx
Скачиваний:
17
Добавлен:
29.06.2023
Размер:
1.6 Mб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

ЗАЩИТА ОТ SQL-ИНЪЕКЦИЙ

Отчет по лабораторной работе №6

по дисциплине «Безопасность систем баз данных»

Вариант № 5

Студент гр. 739-1

Климанов М. Д.

24.12.2021

Руководитель

Преподаватель кафедры

КИБЭВС

__________ Слезкин А.О.

__.__.2021

Томск 2021

1 Введение

Целью работы является изучение принципов работы реализации атак вида "SQL-инъекция" и методов защиты от атак такого вида.

Задание для данной лабораторной работы:

Реализовать SQL-инъекций для 5 варианта.

Используя механизм SQL-инъекций получить следующую информацию о базе данных: наименование БД; версию СУБД; наименование всех таблиц в БД; наименование каждого поля таблицы БД.

А также с помощью SQL- инъекций извлечь следующую информацию из базы данных: список всех морских сражений, произошедших в период с 1941 года по 1950 включительно; список всех американских кораблей, спущенных на воду в период с 1915 по 1945 годы; список кораблей всех американских классов, которые были повреждены, либо потоплены.

Независимо от типа передаваемого параметра необходимо реализовать экранирование хвоста запроса (с помощью оператора --) в коде запроса. В коде приложения своей предметной области реализуйте метод защиты – типизация данных (приведение к строковому типу) и экранирование.

  1. Ход работы

    1. Проведение SQL-инъекций

В рамках данной лабораторной работы будут рассмотрены четыре наиболее распространенных вида SQL-инъекций: внедрение в строковые параметры, инъекция, основанная на выводе текста ошибки, инъекция, модифицирующая данные и слепая инъекция.

Перед выполнением задания необходимо убедиться, что служба SQL Server работает (рисунок 2.1).

Рисунок 2.1 – Запуск службы SQL Server

Далее нужно открыть браузер, и ввести в адресной строке адрес

«localhost» или 127.0.0.1. После этого откроется визор локального сервера (рисунок 2.2).

Рисунок 2.2 – Пример визора локального сервера

Далее необходимо выбрать файл «ships_injections.php», а затем откроется главное окно веб-приложения, как на рисунке 2.3 и 2.4.

Рисунок 2.3 – Дочерний каталог

Рисунок 2.4 – Веб-приложение

Первая SQL-инъекция была направлена на то, чтобы узнать название базы данных. SQL-инъекция имеет вид: ‘AND DB_Name()=1’, как на рисунке 2.5.

Рисунок 2.5 – Название базы данных «ships»

Вторая SQL-инъекция была направлена на то, чтобы узнать версию СУБД. SQL-инъекция имеет вид: ‘AND @@version =1’, как на рисунке 2.6.

Рисунок 2.6 – Версия СУБД

Далее были использованы инъекции с оператором UNION ALL. Данный оператор служит для объединения двух SELECT (как правило из разных таблиц) и требует того, чтобы типы данных в выбираемых полях таблиц и количество этих полей совпадало.

Первая SQL-инъекция имеет вид: UNION ALL SELECT TABLE_NAME,0, TABLE_SCHEMA,0, FROMNFORMATION_SCHEMA.TABLES. С помощью этой инъекции можно узнать название всех таблиц в базе данных (рисунок 2.7).

Рисунок 2.7 – Названия всех таблиц

Вторая SQL-инъекция имеет вид: UNION ALL SELECT TABLE_NAME, 0, COLUMN_NAME, 0, FROM INFORMATION_SCHEMA.COLUMNS. С

помощью этой инъекции можно узнать название каждого поля таблицы в базе данных (рисунок 2.8).

Рисунок 2.8 – Названия всех полей

Третья SQL-инъекция имеет вид: ‘UNION ALL SELECT name, date, winner, sink FROM Battles WHERE date >= ‘1941-01-01’ AND date <= ‘1950-01- 01’. С ее помощью можно получить список всех морских сражений, произошедших в период с 1941 года по 1950 (рисунок 2.9).

Рисунок 2.9 – Морские сражения

Четвертая SQL-инъекция имеет вид: ‘ UNION ALL SELECT class, 0, country, 0 FROM Classes. С ее помощью была выведена таблица с классами и

странами информация, из которой понадобится для выполнения следующей инъекции (рисунок 2.10).

Рисунок 2.10 – Классы и страны

Пятая SQL-инъекция имеет вид: ‘ UNION ALL SELECT name, 0, class, launched FROM Ships WHERE (launched >= ‘1915’ AND launched <= ‘1945’) AND (class = ‘lowa’ OR …). С ее помощью был выведен список всех американских кораблей, спущенных на воду в период с 1915 по 1945 годы (рисунок 2.11).

Рисунок 2.11 – Корабли

Шестая SQL-инъекция имеет вид: ‘ UNION ALL SELECT ship, 0, result, 0 FROM Outcomes WHERE (result >= ‘sunk’ AND result <= ‘damaged’) AND (ship = ‘California’ OR …). С ее помощью был выведен список кораблей всех американских классов, которые были повреждены, либо потоплены (рисунок 2.12).

Рисунок 2.12 – Поврежденные корабли

    1. Проведение SQL-инъекций

Далее была выполнена защита веб-приложения. С помощью редактора

«Sublime Tex» нужно было открыть файл с необходимой предметной областью ship.

Открытие файла представлено на рисунках 2.13 и 2.14.

Рисунок 2.13 – Выбор файла с расширением «.php»

Рисунок 2.14 – Открытый файл

Далее необходимо было реализовать экранирование хвоста запроса (с помощью оператора --), как на рисунке 2.15.

Рисунок 2.15 – Экранирование хвоста запроса

Типизация к строковому типу происходит посредством применения string к $value. Для экранирования можно обозначить регулярными выражениями символы, которые будут удалены (возврат калитки, переход на новую строку и другие), а после заменить их на пустоту при помощи preg_replace, а также заменить кавычки на обычные символы при помощи str_replace(рисунок 2.16).

Рисунок 2.16 – Меры защиты от SQL-инъекций

Далее необходимо проверить функционирование простого запроса по нажатию кнопки (рисунок 2.17), а после продемонстрировать защиту на SQL-инъекции (рисунок 2.18).

Рисунок 2.17 – Проверка работоспособности системы

Рисунок 2.18 – Проверка защиты от строковой инъекции

  1. Заключение

В результате выполнения данной лабораторной работы были изучены принципы реализации атак вида "SQL-инъекция" и методов защиты от атак такого вида.

Соседние файлы в папке 2 семестр