Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2015_лекции / SQL-инъекции

.pdf
Скачиваний:
122
Добавлен:
22.03.2016
Размер:
1.49 Mб
Скачать

Основные виды инъекций:

Тавтологии Цель атаки:

Обход аутентификации, выявление уязвимых параметров, извлечение данных

Описание:

Составить запрос таким образом, чтобы одно или несколько условий ( обычно 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