Blind SQL Injection

  • Автор темы Tayler
  • Дата начала
  • Просмотров 5407 Просмотров
  • Теги
    sql

Tayler

Резидент
240
248
21 Апр 2017
Слепая SQL (Structured Query Language - Язык структурированных запросов,SQL произносится как "Сиквэл") инъекция - это тип атаки SQL инъекции, который задает в базе данных истинные или ложные вопросы и определяет ответ, основанный на ответе приложений.

Эта атака часто используется, когда веб-приложение настроено на отображение общих сообщений об ошибках, но защищает код, уязвимый для SQL-инъекций.
Когда злоумышленник использует SQL-инъекцию, иногда веб-приложение отображает сообщения об ошибках из базы данных, жалуясь на неправильность синтаксиса SQL-запроса.
Слепая SQL-инъекция почти идентична обычной SQL-инъекции,

с той лишь разницей, что в обычной инъекции данные извлекаются из базы данных.
Когда база данных не выводит данные на веб-страницу,
злоумышленник вынужден украсть данные, задав в базе данных ряд вопросов, имеющих значение
true или false.
Это затрудняет, но не исключает использование уязвимости SQL Injection.


Примеры:

Злоумышленник может проверить, вернул ли отправленный запрос значение true или false:

Пример URL: Для просмотра ссылки Войди или Зарегистрируйся
Отправляет следующий запрос в базу данных:
Код:
SELECT title, description, body FROM items WHERE ID = 2

Затем злоумышленник может попытаться ввести запрос, возвращающий значение «false»:

Для просмотра ссылки Войди или Зарегистрируйся and 1=2
Теперь sql запрос должен выглядеть так:
Код:
SELECT title, description, body FROM items WHERE ID = 2 and 1=2

Если веб-приложение уязвимо для SQL Injection, оно, вероятно, ничего не вернет.Чтобы убедиться, злоумышленник введет запрос, который вернет значение «true»:

Для просмотра ссылки Войди или Зарегистрируйся and 1=1

Если содержимое страницы, которая возвращает «
true», отличается от содержимого второй страницы, возвращающей «false», злоумышленник сможет отличить, когда исполняемый запрос возвращает true или false.
После того, как это было подтверждено, единственными ограничениями являются привилегии, установленные администратором базы данных, другой синтаксис SQL и воображение злоумышленника.

Time-based

Этот тип скрытой инъекции SQL полагается на приостановку базы данных в течение указанного промежутка времени, а затем возвращает результаты, свидетельствующие об успешном выполнении SQL-запроса.
Используя этот метод, злоумышленник перечисляет каждую букву желаемого фрагмента данных, используя следующую логику:
Если 'A' соответствует первой букве имени бызы данных,то подождите 10 секунд.
Если 'Б' соответствует первой букве имени бызы данных,то подождите 10 секунд. и так далее.

Microsoft SQL Server

Код:
http://www.site.com/vulnerable.php?id=1' waitfor delay '00:00:10'--

MySQL

Код:
SELECT IF(expression, true, false)

Использование некоторых временных операций, например.
BENCHMARK (), будет задерживать ответы сервера, если выражение равно True.
BENCHMARK(5000000,ENCODE('MSG','by 5 seconds'))
Будет выполнять функцию ENCODE 5000000 раз
В зависимости от производительности сервера, базы данных и загрузки, потребуется различное кол-во времени на выполнение этой операции.
Важно, с точки зрения злоумышленника, указать достаточно большое количество повторений функции BENCHMARK (), чтобы заметно повлиять на время отклика базы данных.
Пример сочетания этих запросов:

UNION SELECT IF(SUBSTRING(user_password,1,1) = CHAR(50),BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')),null) FROM users WHERE user_id = 1;
Если ответ базы данных занял много времени, мы можем ожидать, что первым символом пароля пользователя с user_id = 1 будет символ '2'.
(CHAR(50) == '2')
Используя этот метод для остальных символов, можно перечислить целые пароли, хранящиеся в базе данных.
Очевидно,что в этом примере указаны имена таблиц и количество столбцов. Тем не менее, их можно угадать или проверить методом проб и ошибок.

Базы данных, отличающиеся от MySQL, также имеют временные функции, которые позволяют использовать их для атаки по времени:

  • MS SQL 'WAIT FOR DELAY '0:0:10
  • PostgreSQL - pg_sleep()

Проведение атак Blind_SQL_Injection вручную занимает много времени, но есть много инструментов, которые автоматизируют этот процесс.
Одной из них является sqlmap,она Частично разработана в рамках грантовой программы OWASP.
С другой стороны, инструменты такого рода очень чувствительны даже к небольшим отклонениям от правила.

Если злоумышленник сможет определить, когда его запрос вернет значение
True или False, он может отпечатать RDBMS. Это значительно упростит всю атаку. Если используется подход с учетом времени, это помогает определить, какой тип базы данных используется. Другими популярными методами для этого является вызов функций, которые возвращают текущую дату. Для этого MySQL, MSSQL и Oracle имеют разные функции, соответственно now (), getdate () и sysdate ().
 

Похожие темы