
- •Содержание
- •Лабораторная работа №1. Выбор и установка платформы для развёртывания сервера убд
- •1. Теоретические сведения
- •2. Пример выполнения практической части
- •Лабораторная работа №2. Установка и первоначальная настройка сервера xampp
- •2. Пример выполнения практической части
- •Лабораторная работа №3. Изучение основных возможностей phpmyadm для управления убд MySql
- •2. Пример выполнения практической части
- •3. Задания для самостоятельного выполнения
- •4.Содержание отчёта
- •5. Контрольные вопросы
- •Лабораторная работа №4. Установка и настройка прозрачного прокси-сервера squid
- •1. Теоретические сведения
- •2. Пример выполнения практической части
- •Лабораторная работа №5. Настройка клиентского программного обеспечения для работы с убд MySql
- •2. Пример выполнения практической части
- •3. Задания для самостоятельного выполнения
- •4.Содержание отчёта
- •5. Контрольные вопросы
- •Лабораторная работа №6. Настройка логирования squid в базу данных MySql с последующим разбором логов
- •1. Теоретические сведения
- •2. Пример выполнения практической части
- •3. Задания для самостоятельного выполнения
- •4.Содержание отчёта
- •5. Контрольные вопросы
- •Лабораторная работа №7. Настройка прав доступа к sql базе данных
- •1. Теоретические сведения
- •2. Пример выполнения практической части
- •3. Порядок выполнения работы
- •4. Варианты заданий
- •5. Содержание отчета
- •6. Контрольные вопросы
- •Лабораторная работа №8. Перенос базы данных MySql на другой компьютер
- •1. Теоретические сведения
- •2. Пример выполнения практической части
- •Лабораторная работа №9. Репликация убд
- •2. Пример выполнения практической части
- •Лабораторная работа №10. Поиск уязвимостей в убд
- •2. Пример выполнения практической части
- •Лабораторная работа №11. Исправление убд после программных или аппаратных сбоев
- •2. Пример выполнения практической части
- •3. Задания для самостоятельного выполнения
- •4. Содержание отчёта
- •5. Контрольные вопросы
- •Список основных консольных команд Ubuntu Server
- •Список часто используемых команд MySql
- •Литература
- •Необходимое программное обеспечение
Лабораторная работа №10. Поиск уязвимостей в убд
Цель работы: используя методику «SQL инъекций» проверить разработанную удалённую базу данных на наиболее широко применимые уязвимости.
1. Теоретическая часть
Внедрение SQL-кода (англ. SQL injection) — один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.
Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.
Атака типа внедрения SQL может быть возможна из-за некорректной обработки входных данных, используемых в SQL-запросах.
Разработчик прикладных программ, работающих с базами данных, должен знать о таких уязвимостях и принимать меры противодействия внедрению SQL.
Принцип атаки внедрения SQL
Допустим, серверное ПО, получив входной параметр id, использует его для создания SQL-запроса. Рассмотрим следующий PHP-скрипт:
$id = $_REQUEST['id'];
$res = mysql_query("SELECT * FROM news WHERE id_news = $id");
Если на сервер передан параметр id, равный, то выполнится следующий SQL-запрос:
SELECT * FROM news WHERE id_news = 5
Но если злоумышленник передаст в качестве параметра id строку -1 OR 1=1, то выполнится запрос:
SELECT * FROM news WHERE id_news = -1 OR 1=1
Таким образом, изменение входных параметров путём добавления в них конструкций языка SQL вызывает изменение в логике выполнения SQL-запроса (в данном примере вместо новости с заданным идентификатором будут выбраны все имеющиеся в базе новости, поскольку выражение 1=1 всегда истинно).
Защита от атак типа внедрение SQL-кода
Для защиты от данного типа атак необходимо тщательно фильтровать входные параметры, значения которых будут использованы для построения SQL-запроса.
Фильтрация строковых параметров:
Чтобы внедрение кода было невозможно, для некоторых СУБД, в том числе, для MySQL, требуется брать в кавычки все строковые параметры. В самом параметре заменяют кавычки на \", апостроф на \', обратную косую черту на \\ (это называется «экранировать спецсимволы»).
Для внесения изменений в логику выполнения SQL-запроса требуется внедрение достаточно длинных строк. Так, минимальная длина внедряемой строки в вышеприведённых примерах составляет 8 символов («1 OR 1=1»). Если максимальная длина корректного значения параметра невелика, то одним из методов защиты может быть максимальное усечение значений входных параметров.
Например, если известно, что поле id в вышеприведённых примерах может принимать значения не более 9999, можно «отрезать лишние» символы, оставив не более четырёх:
statement := 'SELECT * FROM users WHERE id = ' + LeftStr(id, 4) + ';';
2. Пример выполнения практической части
ПРЕДУПРЕЖДЕНИЕ! Категорически запрещается запускать sqlmap на внешние интернет адреса.
Используя типичный набор SQL инъекций проверим сервер XAMPP на уязвимости. Для этого запустим любой браузер и будем формировать запросы к серверу. Воспользуемся программой Sqlmap — сканером sql уязвимостей. Программа обладает огромным функционалом, который поможет не только найти уязвимость, но и при совокупности некоторых факторов заполучить полный контроль над целевой машиной.
В самом простом варианте sqlmap можно запустить так:
sqlmap.py -u «адрес целевого сервера»
Этого будет достаточно для того, чтобы sqlmap начал свою работу. Как можно легко догадаться, ключ -u задает адрес нашей цели. Сканер произведет запрос по заданному URL и будет анализировать все параметры, которые мы указали в ссылке.
Протестируем настроенный на предыдущих лабораторных работах виртуальный сервер:
sqlmap –u http://localhost/phpmyadmin/
Где вместо localhost будем использовать IP адрес виртуального сервера. Вывод команды:
Рисунок 1 – Результат SQL инъекции
Как видим, сервер содержит уязвимость в параметре
[CRITICAL] all tested parameters appear to be not injectable. Try to increase '--level'/'
--risk' values to perform more tests. You can give it a go with the switch '--text-only' if the targ
et page has a low percentage of textual content (~4.65% of page content is text). Also, you can try
to rerun by providing either a valid value for option '--string' (or '--regexp')
Соответственно, все текстовые записи в базе данных определённой длины, могут быть прочитаны злоумышленником. Для исправления уязвимости, рекомендуется ограничить длину текстового поля, а данные большой длины хранить в поле типа MEMO.
3. Задания для самостоятельного выполнения
1. Протестируйте свои виртуальные серверы на предмет SQL инъекции, в случае обнаружения уязвимости предложите варианты её исправления.
4. Содержание отчёта
1. Тема и цель работы
2. Описание выполнения задания
3. Вывод о проделанной работе
5. Контрольные вопросы
1. Что такое SQL инъекция?
2. Как осуществляется защита от SQL инъекций?
3. Какого типа бывают уязвимости в БД?
4. Для чего нужна программа sqlmap?