2015_лекции / SQL-инъекции
.pdf
Основные виды инъекций:
Тавтологии Цель атаки:
Обход аутентификации, выявление уязвимых параметров, извлечение данных
Описание:
Составить запрос таким образом, чтобы одно или несколько условий ( обычно where) всегда возвращало true
Пример.
Пусть login = ‘or 1=1 –
Тогда
SELECT accounts FROM users WHERE
login=’’ or 1=1 -- AND pass=’’ AND pin=
Основные виды инъекций:
Использование оператора Union Цель атаки:
Обход аутентификации, извлечение данных
Описание
Задача преобразовать запрос таким образом, чтобы запрос возвращал другой набор данных вместо задуманного разработчиком. В уязвимый параметр добавляется структура UNION SELECT <выбираемые данные>
Пример
Login = “” ‘UNION SELECT cardNo from CreditCards where acctNo=10032 –-
=>
SELECT accounts FROM users WHERE login=’’ UNION
SELECT cardNo from CreditCards where acctNo=10032 -- AND pass=’’ AND pin=
Основные виды инъекций:
Расщепление SQL-запроса (piggy-backed query)
Цель атаки:
извлечение данных, модификация/добавление данных, отказ в обслуживание, выполненные удаленных команд
Описание
Вэтом типе атаки дополнительный запрос к исходному запросу добавляется с помощью запросных разделителей
Пример
Pasword = “”; drop table users – =>
SELECT accounts FROM users WHERE login=’doe’ AND pass=’’; drop table users -- ’ AND pin=123
Основные виды инъекций:
Использование хранимых процедур Цель атаки:
повышение прав доступа, отказ в обслуживание, выполненные удаленных команд
Описание
Также как в расщепление запроса осуществляется попытка выполнить другой запрос к базе данных. Используются уязвимости хранимых процедур
Основные виды инъекций:
Использование хранимых процедур
Пример
CREATE PROCEDURE DBO.isAuthenticated @userName varchar2, @pass varchar2, @pin int AS
EXEC("SELECT accounts FROM users WHERE login=’“
+@userName+ "’ and pass=’" |
+@password+ "’ and pin=" |
+@pin); |
|
GO |
|
Пусть userName = “; ‘ ‘; SHUTDOWN; --” =>
SELECT accounts FROM users WHERE login=’doe’ AND pass=’ ’; SHUTDOWN; -- AND pin=
Основные виды инъекций:
Логически неправильные запросы. Цель
Выявление уязвимых параметров, анализ типа базы данных, извлечение данных
Описание:
Используется для сбора предварительных данных для проведения дальнейшей атаки. Анализ структуры БД, тип БД путем вставки запросов, которые вызывают:
ошибки приведения типов
синтаксические ошибки
логические ошибки.
Основные виды инъекций:
Логически неправильные запросы. Пример
Пусть pin = “convert (int,(select top 1 name from sysobjects where xtype=’u’))”
Тогда
SELECT accounts FROM users WHERE login=’’ AND pass=’’ AND pin= convert (int,(select top 1 name from sysobjects where xtype=’u’))
Возможный ответ:
Microsoft OLE DB Provider for SQL Server: Error converting nvarchar value ’CreditCards’ to a column of data type int
Основные виды инъекций:
Логический вывод Цель атаки:
Выявление уязвимых параметров, извлечение данных, определение схемы баз данных
Описание
Запрос преобразуется таким образом, чтобы его выполнение приводило к ответу ДА или Нет на вопрос о структуре БД. Применяется в тех случаях, когда база данных не выдается подробную информация в ответах на ошибки
Виды атак типа «логический вывод»
Слепая инъекция.
Временная атака
Основные виды инъекций:
Слепая инъекция.
Информация извлекается путем анализа поведения генерируемой страницы , задавая вопросы типа ДА/НЕТ. Если вставленное выражение равно ДА, то сайт функционирует обычно, в противном случае страница выглядит иначе (но сообщения об ошибки нет)
Основные виды инъекций:
Временные атаки Идея
Вставлять операторы временных задержек в логические ветви запросов к БД . В зависимости от времени выполнения запросов, оценивается какая ветка запроса отработала.
Пример запроса:
SELECT accounts FROM users WHERE login=’legalUser’ and
ASCII(SUBSTRING((select top 1 name from sysobjects),1,1)) > X WAITFOR 5 -- ’ AND pass=’’ AND pin=0
