5 семестр / 7 лаба
.docxМинистерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)
ЗАЩИТА ОТ SQL-ИНЪЕКЦИЙ
Отчет по лабораторной работе №7
по дисциплине «Безопасность систем баз данных»
Студент гр. ***-*
_______
__.__.2023
Руководитель
младший преподаватель каф. КИБЭВС
_______ Р.Д. Сахарбеков
__.__.2023
Томск 2023
Введение
Целью работы является изучение принципов реализации атак вида "SQL-инъекция" и методов защиты от атак такого вида.
Также необходимо выполнить задание для варианта 2:
Используя механизм SQL-инъекций получите следующую информацию о базе данных:
Наименование БД;
Версию СУБД;
Наименование всех таблиц в БД;
Наименование каждого поля таблицы БД.
Список доступных авиакомпаний;
Список рейсов, направляющихся в Москву и в Сингапур;
Список пассажиров, забронировавших места с индексами 1а или 1b на любых рейсах.
1 ХОД РАБОТЫ
1.1 Проведение SQL-инъекций
В рамках данной лабораторной работы будут рассмотрены четыре наиболее распространенных вида SQL-инъекций: внедрение в строковые параметры, инъекция, основанная на выводе текста ошибки, инъекция, модифицирующая данные и слепая инъекция.
Перед выполнением задания необходимо убедиться, что служба SQL Server работает (рисунок 1.1).
Рисунок 1.1 - Запуск службы SQL Server
Далее нужно открыть браузер, и ввести в адресной строке адрес «localhost» или 127.0.0.1. После этого откроется визор локального сервера (рисунок 1.2).
Рисунок 1.2 - Пример визора локального сервера
Далее необходимо выбрать файл «Airport_injections.php», а затем откроется главное окно веб-приложения, как на рисунке 1.3 и 1.4.
Рисунок 1.3 – Дочерний каталог
Рисунок 1.4 – Веб-приложение
Первая SQL-инъекция была направлена на то, чтобы узнать название базы данных. SQL-инъекция имеет вид: ‘AND DB_Name()=1’, как на рисунке 1.5.
Рисунок 1.5 – Название базы данных «Airports»
Вторая SQL-инъекция была направлена на то, чтобы узнать версию СУБД. SQL-инъекция имеет вид: ‘AND @@version =1’, как на рисунке 1.6.
Рисунок 1.6 – Версия СУБД
Далее были использованы инъекции с оператором UNION ALL. Данный оператор служит для объединения двух SELECT (как правило из разных таблиц) и требует того, чтобы типы данных в выбираемых полях таблиц и количество этих полей совпадало. Первая SQL-инъекция имеет вид: UNION ALL SELECT TABLE_NAME, TABLE_SCHEMA, 0, 0, FROM INFORMATION_SCHEMA.TABLES. С помощью этой инъекции можно узнать название всех таблиц в базе данных (рисунок 1.7).
Рисунок 1.7 – Названия всех таблиц
Вторая SQL-инъекция имеет вид: UNION ALL SELECT TABLE_NAME, COLUMN_NAME, 0, 0 FROM INFORMATION_SCHEMA.COLUMNS --. С помощью этой инъекции можно узнать название каждого поля таблицы в базе данных (рисунок 1.8).
Рисунок 1.8 – Названия всех полей
Третья SQL-инъекция имеет вид: ‘UNION ALL SELECT 0 place, trip_no, 0, 0 FROM Pass_in_trip WHERE place=’1a’ OR place=’1b’ --. С ее помощью можно получить список все рейсов, отправляющихся из Москвы или Сингапура (рисунок 1.9).
Рисунок 1.9 – Места 1а и 1b
Далее была выполнена защита веб-приложения. С помощью редактора «Sublime Tex» нужно было открыть файл с необходимой предметной областью ship. Открытие файла представлено на рисунках 1.10 и 1.11.
Рисунок 1.10 – Выбор файла с расширением «.php»
Рисунок 1.11 – Открытый файл
Далее необходимо было реализовать экранирование хвоста запроса (с помощью оператора --), как на рисунке 1.12.
Рисунок 1.12 – Экранирование хвоста запроса
Типизация к строковому типу происходит посредством применения string к $value. Для экранирования можно обозначить регулярными выражениями символы, которые будут удалены (возврат калитки, переход на новую строку и другие), а после заменить их на пустоту при помощи preg_replace, а также заменить кавычки на обычные символы при помощи str_replace(рисунок 1.13).
Рисунок 1.13 – Меры защиты от SQL-инъекций
Далее необходимо проверить функционирование простого запроса по нажатию кнопки (рисунок 1.14), а после продемонстрировать защиту на SQL-инъекции (рисунок 1.15).
Рисунок 1.14 – Проверка работоспособности системы
Рисунок 1.15 – Проверка защиты от строковой инъекции
Заключение
В результате выполнения лабораторной работы были изучены принципы реализации атак вида "SQL-инъекция" и методов защиты от атак такого вида. Также были выполнены задания согласно варианту 2.
Отчет составлен согласно ОС ТУСУР 2021.