Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БИТ лабы метода.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
142.34 Кб
Скачать

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

Если выводятся подробные сообщения об ошибках, то можно сразу узнать адрес скрипа, и далее, подобрав параметр работать уже с ним. Если же нет, то можно исследовать уязвимость, прямо редактируя имя файла.