170 likes | 286 Views
SQL-injections. for “dummies”. Что это? . Способ несанкционированного доступа к данным, хранящимся в БД, основанный на внедрении в запрос произвольного SQL-кода. Пример. $id = $_REQUEST['id']; $res = mysql_query("SELECT * FROM news WHERE id_news = $id"); http:// site.com / news .php?id=5
E N D
SQL-injections for “dummies”
Что это? Способ несанкционированного доступа к данным, хранящимся в БД, основанный на внедрении в запрос произвольного SQL-кода.
Пример $id = $_REQUEST['id']; $res = mysql_query("SELECT * FROM news WHERE id_news = $id"); http://site.com/news.php?id=5 SELECT * FROM news WHERE id_news = 5 http://site.com/news.php?id=-1+OR+1=1 SELECT * FROM news WHERE id_news = -1 OR 1=1
Пример $search_text = $_REQUEST['search_text']; $res = mysql_query("SELECT id_news, news_date, news_caption, news_text, news_id_author FROM news WHERE news_caption LIKE('%$search_text%')"); http://site.com/news.php?search_text=qwerty SELECT id_news, news_date, news_caption, news_text, news_id_author FROM news WHERE news_caption LIKE('%Test%') ')+and+(news_id_author='1 SELECT id_news, news_date, news_caption, news_text, news_id_author FROM news WHERE news_caption LIKE('%') AND (news_id_author='1%')
Причины • Отсутствие необходимой обработки входящих запросов • Отсутствие обработки ошибок • Отсутствие ограничений прав
Последствия • Компрометация пользовательских данных • Дамп БД • Внедрение “бэкдора” • Доступ к хостовой ОС • Подмена данных • Внедрение данных
Основные типы • UNION query • Error-based • Stacked queries • Blind injections
UNION query SQL injection $res = mysql_query("SELECT id_news, header, body, author FROM news WHERE id_news = " . $_REQUEST['id']); -1 UNION SELECT 1, username, password, 1 FROM admin SELECT id_news, header, body, author FROM news WHERE id_news = -1 UNIONSELECT1, username,password, 1FROM admin
Error-based SQL injection Инъекция заведомо некорректного запроса с целью получения ошибки для определения типа и версии используемой СУБД. • Определение уязвимостей, специфичных для данной версии. • Определение особенностей СУБД. • Определение дальнейшего вектора атаки
Stacked queries SQL injection Если веб-приложение поддерживает последовательные запросы - в уязвимый параметр HTTP-запроса добавляется точка с запятой (;) и следом внедряемый SQL- запрос. SELECT id_news, header, body, author FROM news WHERE id_news = -1; SELECT username,password FROM admin
Blind SQL-injection • Time-based • К уязвимому запросу добавляется синтаксически верный SQL-запрос • Замеряется время обработки запроса • Замеряется изменение времени обработки при изменении запроса • Boolean-based
Тестирование Выполняется: • Программистами на основании code review • DBA и/или QA – проверка настроек БД, прав пользователей, имен таблиц и т.д. • QA: • Тестирование вручную – на основании знаний о системе и выполняемых ею функций • Автоматизированные тестирование – с использованием сканеров для определения потенциально опасных функций и/или возможности эксплуатации определенных функций
Автоматизация Проблема: Поиск производится по «шаблону» - большое количество ложных срабатываний. Следствие: эффективность тестирования «общими» сканерами стремится к 0. Варианты решения: • Ручное тестирование • Ревъю кода • Использование узкоспециализированных либо «самописных» средств
SQLmap Преимущества: • минимальное количество ложных срабатываний • возможность эксплуатации встроенными средствами • развернутая информация об уязвимости • простота в использовании • бесплатность Недостатки: • Необходимость предварительного ручного тестирования (поиск потенциальных слабостей) • Необходимость минимальных технических навыков • Требуется понимание принципов инъекций и их использования
Методы защиты • Обработка вводимых данных • Ограничение прав • Логгеры, триггеры • Else…
Links: • http://en.wikipedia.org/wiki/SQL_injection • http://sqlmap.sourceforge.net • http://mwgrasp.oni.cc • http://antichat.ru • https://www.owasp.org • http://www.mavitunasecurity.com/netsparker