Тестирование безопасности или 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-уязвимостей всего лишь малая часть процесса. Их эксплуатация — вопрос во много раз сложнее. Но, как мы знаем, дорогу осилит идущий.