Тестирование безопасности или SQL-инъекции

Количество сайтов, страничек в Сети неуклонно и стремительно растет. За их разработку берутся все, кто только может и часто даже те, кто не может, но очень хочет. И неудивительно, что начинающие веб-мастера и разработчики часто используют небезопасный и старый код для решения поставленных задач. Соответственно, это создает достаточно лазеек и уязвимостей для злоумышленников и просто любопытных товарищей, которые любят заглянуть туда, куда их не просят.

Одна из самых широко используемых лазеек — это обращение к базам данных сервера через адресную строку браузера, а также через любое input поле на веб-странице посредством SQL запросов, встроенных в штатную ссылку, этот способ именуется SQL-инъекцией. Что такое SQL и с чем его едят тестировщики, можно узнать на курсе ПОИНТ от Лаборатории Качества в исполнении уважаемого тренера Романа Буданова.

А сегодня мы кратко упомянем об основных возможностях, которые предоставляет этот способ.

На данный момент существует несколько основных видов систем управления базами данных, это Oracle, MS SQL Server, MySQL, PostgreSQL  и другие, но все их объединяет язык обращения к базам данных за небольшими различиями синтаксиса запросов и частных нюансов. Вот здесь и содержится потенциальная уязвимость —  если разработчик не смог правильно и безопасно обработать запрос с внешней стороны, то злоумышленник может воспользоваться этим и применить некоторые тактики для получения доступа к базе данных сайта и далее к управлению всем сайтом.

Наша статья не имеет цели выдать читающему инструкцию и, уж тем более, не является руководством к действию, но изложение будет неполным без простого примера, который даже можно назвать гипотетическим.

В ходе  атаки после перехода на изучаемый ресурс модифицируется ввод в адресной строке браузера и анализируется ответ сервера. Например, мы можем получить ошибку SQL и по ней определить дальнейшие свои действия. По сути,  конструируется SQL-выражение из пользовательского ввода путем простой конкатенации, то есть сборки запроса из подбираемых значений, например,
$query=»SELECT * FROM users WHERE id=».$_REQUEST[«id»]
Если путь намечен верно, то отправляемый SQL-запрос можно начинать подгонять под свои потребности. В основном, осуществляется  прощупывание базы данных сайта, ее типа и особенностей настройки, а также выполняется поиск названий таблиц, содержащих важную информацию, это может быть  таблица [Users], к примеру. После этого, в зависимости от привилегий, которые удалось получить любопытствующему товарищу, можно попытаться обратиться к файлам на стороне бэкенда, прочитать их или выполнить нужные (или ненужные 🙂 ) команды на сервере.

Конечно, часто все выполняется вручную, но во всемирной паутине можно поискать и даже найти некоторые готовые автоматизированные инструменты для определения наличия уязвимостей на интернет-ресурсе. Для заинтересовавшихся предлагаю загуглить слово sqlmap, это один из самых лучших инструментов для поиска и, что важно, эксплуатации найденных уязвимостей, к тому же он распространяется бесплатно. Он написан на Python, поэтому может выполняться из-под любой операционной системы при наличии установленного интерпретатора Python.

В заключение нашего обзора замечу следующее — поиск SQL-уязвимостей всего лишь малая часть процесса. Их эксплуатация — вопрос во много раз сложнее. Но, как мы знаем, дорогу осилит идущий.

Метки
Android (1)courses (1)HR (1)iOS (1)java (1)kaizen (2)QA (7)QualityLab (1)selenium (1)softwaretesting (1)sql (4)TestSuites (1)usability (2)БАГИ (1)Исследовательское тестирование (2)Истории поинт (6)Курс тестирования для начинающих (1)Мнемоники (1)Мнемоники в тестировании (1)Нина Агеева (4)ПОИНТ (26)ПРомо-вебинар (1)Роман Буданов (3)Скриншот (1)Тестирование (9)Тестирование ПО (1)Тренер (11)Туры (1)автоматизация (2)алгоритмы (1)баг (1)безопасность (1)введение в тестирование (1)домашки (1)займемсяпоинтом (1)игры (1)идеальный мир (1)интернет (1)истории выпускников (6)как надо тестировать (2)конференция (1)котик (1)курс для начинающих тестировщиков онлайн (1)мобилки (2)мобильное тестирование (2)настройка мозгов (1)начинающий тестировщик (4)негативное тестирование (2)организация тестирования (1)персонажи (1)планирование (1)постановка мозгов (2)работа над ошибками (1)рабочий процесс (1)радиоСаня (1)режим разработчика (2)резюме (1)сопроводительное письмо (1)тайм-менеджмент (1)тестировани (1)тестирование usability (2)тестирование безопасности (1)тестирование мобильных приложений (1)тестировщик (4)улучшайзинг (1)ученик (2)фреймворки (1)чит лист (1)что должен делать тестировщик (1)
С 3.06 по 29.07, ОНЛАЙН Зарегистрироваться