3 курс / БСБД2 Лабораторная работа 7
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронновычислительных систем (КИБЭВС)
ЗАЩИТА ОТ SQL-ИНЪЕКЦИЙ Отчет по лабораторной работе №7
по дисциплине «Безопасность систем баз данных»
Студент гр. 7x3-x
_______ xxxxxxxxxxx
_______
Приняла: Преподаватель кафедры КИБЭВС
_______ Романова Е.С.
_______
Томск 2025
Введение
Целью работы является изучение принципов реализации атак вида «SQLинъекция» и методов защиты от атак такого вида.
Вариант №2: предметная область «Аэропорт». В базе данных аэропорта хранится информация о перевозчиках, предстоящих рейсах, пассажирах, купивших, либо же забронировавших места на предстоящие рейсы. Распространение персональных данных пассажиров может повлечь уголовную ответственность.
С помощью SQL-инъекций извлеките следующую информацию из базы данных:
список доступных авиакомпаний;
список рейсов, направляющихся в Москву и в Сингапур;
список пассажиров, забронировавших места с индексами 1а или 1b на любых рейсах
Вкоде приложения своей предметной области реализуйте метод защиты
–типизация данных (приведение к строковому типу) и экранирование.
2
1 ХОД РАБОТЫ
На виртуальной машине был открыт браузер и введен в адресной строке адрес «127.0.0.1», после чего открылся визор локального сервера (рисунок 1.1).
Рисунок 1.1 – Визор локального сервера
Был выбран файл «Airport», после чего открылось главное окно вебприложения (рисунок 1.2, рисунок 1.3).
Рисунок 1.2 – Дочерний каталог
3
Рисунок 1.3 – Веб-приложение
Первая SQL-инъекция была направлена на то, чтобы узнать название базы данных. SQL-инъекция имеет вид: «AND 1=””» (рисунок 1.4).
Рисунок 1.4 – Введенная SQL-инъекция с результатом в виде названия базы данных
Вторая SQL-инъекция была направлена на то, чтобы узнать версию СУБД. SQL-инъекция имеет вид: «AND @@version =1» (рисунок 1.5).
Рисунок 1.5 – Введенная SQL-инъекция с результатом в виде версии СУБД
4
Далее были использованы инъекции с оператором UNION ALL. Данный оператор служит для объединения двух SELECT (как правило из разных таблиц) и требует того, чтобы типы данных в выбираемых полях таблиц и количество этих полей совпадало. Первая SQL-инъекция имеет вид: «UNION ALL SELECT 0, TABLE_NAME, TABLE_SCHEMA, 0, 0 FROM INFORMATION_SCHEMA.TABLES». С помощью этой инъекции были выявлены названия всех таблиц в базе данных (рисунок 1.6).
Рисунок 1.6 – Введенная SQL-инъекция с результатом в виде названий таблиц БД
Вторая SQL-инъекция имеет вид: «UNION ALL SELECT 0, TABLE_NAME, COLUMN_NAME, 0, 0 FROM INFORMATION_SCHEMA.COLUMNS». С помощью этой инъекции были выявлены названия каждого поля таблицы в базе данных (рисунок 1.7).
5
Рисунок 1.7 – Введенная SQL-инъекция с результатом в виде названий полей таблицы
Третья SQL-инъекция имеет вид: «UNION ALL SELECT 0, name, ‘0’, 0, 0 from Company». С ее помощью был получен список всех доступных авиакомпаний (рисунок 1.8).
Рисунок 1.8 – Введенная SQL-инъекция с результатом в виде списка доступных авиакомпаний
6
Четвертая SQL-инъекция имеет вид: «UNION ALL SELECT trip_no, ‘0’, town_to, 0, 0 FROM Trip WHERE town_to= ‘Moscow’ or town_to=’Singapore’». С
ее помощью был получен список всех рейсов, направляющихся в Москву и Сингапур (рисунок 1.9).
Рисунок 1.9 – Введенная SQL-инъекция с результатом в виде списка всех рейсов в Москву и Сингапур
Пятая SQL-инъекция имеет вид: «UNION ALL SELECT 0, place, trip_no, 0, 0 FROM Pass_in_trip WHERE place=’1a’ OR place=’1b’». С ее помощью был получен список пассажиров, забронировавших места с индексами 1а или 1b на любых рейсах (рисунок 1.10).
7
Рисунок 1.10 – Введенная SQL-инъекция с результатом в виде списка пассажиров на местах 1а или 1b
Далее в исходный код приложения были добавлены типизация и экранирование (рисунок 1.11, рисунок 1.12). Была проведена повторная проверка по вводу SQL-инъекции (рисунок 1.13).
Рисунок 1.11 – Типизация ввода в коде приложения
Рисунок 1.12 – Экранирование в коде приложения
8
Рисунок 1.13 – Проверка
9
Заключение
В ходе выполнения данной работы были изучены принципы реализации атак вида "SQL-инъекция" и методов защиты от атак такого вида, а также выполнены задания согласно варианту.
10
