
- •1. Общие указания по выполнению лабораторных работ
- •2. Программное обеспечение, необходимое для выполнения работы
- •3. Ус т а н о в к а и конфигурирование по
- •4. Выполнение лабораторных работ
- •4.2.1. Выявление уязвимости веб-приложения к sql-Injection
- •4.2.2. Анализ бд через sql-Injection
- •4.2.3. Некоторые сложности при проведении атак способом sql-Injection
- •4.2.4. Атака типа Deny Of Service через sql-Injection
- •4.2.5. Другие типы sql-Injection
- •4.2.6. Защита от sql-Injection
- •5. Варианты заданий для выполнения лабораторного практикума
- •6. Список источников информации, полезных при выполнении лабораторных работ
4.2.3. Некоторые сложности при проведении атак способом sql-Injection
1. Magic quotes. Наиболее частой проблемой может оказаться включение т.н. "магических кавычек" в конфигурации php. В случае строковых параметров это вообще позволит избежать возможности SQL инъекции, а в случае целых (дробных) параметров, в подобных запросах невозможно будет использовать кавычки, а следовательно и строки.
Решить эту проблему поможет нам функция char, которая возвращает строку по кодам символов. Например:
http://site/test.php?id=9999+union+select+char(116,101,115,116),null,null /*
http://site/test.php?id=9999+union+select+char(116,101,115,116),null,null +from_table1/*
http://site/test.php?id=9999+union+select+null,LOAD_FILE(char(47,101, 116,99,47,112,97,115,115,119,100)),null/*
Ограничение: в случае, если необходимо выполнить into outfile, то в качестве имени файла необходимо передать имя файла в кавычках. into outfile char(...) выдаёт ошибку.
2. Mod_security. Предполагается, что этот модуль веб-сервера Apache, делает невозможным эксплуатацию уязвимости к SQL-Injection. Однако, при некоторых конфигурациях PHP и этого модуля, атаку можно провести прозрачно для этого модуля.
Конфигурация по умолчанию модуля mod_security не фильтрует значения, переданные через cookie. Одновременно, в некоторых случаях, а также в некоторых конфигурациях по умолчанию переменные cookie регистрируются автоматически как глобальные.
Таким образом, значения переменных для атаки абсолютно прозрачно для mod_security можно передать как cookie значения.
10
4.2.4. Атака типа Deny Of Service через sql-Injection
Если не имеется возможности применения union в запросе (например, MySQL имеет версию 3.*), тем не менее SQL-Injection можно эксплуатировать для того, чтобы заставить СУБД исчерпать все свои ресурсы.
Для этого будем использовать функцию BENCHMARK, которая повторяет выполнение выражения expr заданное количество раз, указанное в аргументе count. В качестве основного выражения возьмём функцию, которая сама по себе требует некоторого времени. Например, md5(). В качестве строки возьмём current_date, чтобы строка не содержала кавычек. Функции BENCHMARK можно вкладывать друг в друга. И так, составляем запрос:
• http://site/test.php?id=BENCHMARK(10000000,BENCHMARK(1000000 0,md5(current_date)))
1000000 запросов md5 выполняются (в зависимости от мощности сервера), примерно 5 секунд, 10000000 будут выполнятся около 50 секунд. Вложенный benchmark будет выполняться очень долго на любом сервере. Теперь останется отправлять до нескольких десятков подобных http-запросов в секунду, чтобы вывести СУБД из строя.
4.2.5. Другие типы sql-Injection
Фильтровать целые значения для целых параметров и кавычки для строковых параметров порой недостаточно. Иногда к нарушению работы ПО может привести применение % и _ - специальных символов внутри like запроса. Например:
• mysql_query("select id from users where password like '".addslashes($password)."' and user like '".addslashes($user)."'");
в этом случае к любому пользователю подойдет пароль %
В некоторых случаях SQL-Injection возможна даже в параметре, который преобразуется методами mod_rewrite модуля веб-сервера Apache к GET параметру скрипта.
Например, скрипты типа /news/127.html преобразуются к /news/news.php?id=127 следующим правилом: RewriteRule ^/news/(.*)\.html$ "/news/news.php?id=$1"
Это позволит передать злонамеренные значения параметра скрипту. Так, например /news/128-1.html
11
Если выводятся подробные сообщения об ошибках, то можно сразу узнать адрес скрипа, и далее, подобрав параметр работать уже с ним. Если же нет, то можно исследовать уязвимость, прямо редактируя имя файла.