July 5, 2021

Атака на веб-приложения c помощью Burp Suite и SQL инъекции

Пока не наступит день, когда безопасность станет высшим приоритетом, мы будем продолжать обнаруживать SQL инъекции в веб-приложениях, и не останемся без работы.

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

Обычно веб-приложение хранит информацию не внутри себя, а в базе данных бэкэнда, когда запросы передаются в виде SQL кода, а затем запрашиваемые данные передаются обратно в приложение.

Что такое SQL инъекция?

SQL инъекция представляет собой технику для атаки на приложения, использующие базы данных, посредством отсылки вредоносного кода с целью доступа или модификации конфиденциальной информации в базе. Есть множество причин, почему эта уязвимость существует и так популярна, включая некорректную фильтрацию и обработку входных данных.

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

Нашей целью будет Mutillidae, намеренно уязвимое веб-приложение, являющееся частью проекта Metasploitable 2 (уязвимая виртуальная линуксовая машина, используемая для тестирования и других практических целей). Мы будем подключаться к Metasploitable 2 из изолированной сети. В качестве рабочей системы будет использоваться Kali Linux.

Шаг 1. Установка виртуальной машины Metasploitable 2

Burp Suit – популярный инструмент, который можно использовать для автоматизации тестирования веб-приложений на предмет наличия разного рода уязвимостей. В Kali Linux присутствует по умолчанию. Но сначала нужно настроить целевую систему.

В качестве примера в этом руководстве будет использоваться виртуальная машина Metasploitable 2, которую можно скачать с сайта компании Rapid7. Также подойдет и любая другая уязвимая виртуальная машина. Установка ничем не отличается от установки обычных виртуальных машин в вашей системе.

При использовании уязвимых систем следует учитывать риски со стороны внешних сетей. Соответственно, если вы полностью не отключены от интернета, следует использовать трансляцию сетевых адресов (NAT) или режим host-only.

После того как всё настроено, авторизуйтесь в Metasploitable 2 (имя пользователя и пароль одинаковые msfadmin) и выясните IP адрес при помощи утилиты ifconfig (параметр inet addr у интерфейса eth0), который будет использоваться во время тестирования.

Шаг 2. Настройка приложения Mutillidae

После выяснения IP адреса виртуальной подключитесь к веб-серверу при помощи браузера. Я использую Firefox в Kali Linux.

Рисунок 1: Домашняя страница виртуальной машины

Кликните на ссылку Mutillidae для входа в веб-приложение и зайдите в раздел OWASP Top 10. Выберите Injection (SQL), затем Extract Data, затем User Info. Появится форма авторизации.

Рисунок 2: Форма авторизации для просмотра информации и пользователе

Шаг 3: Настройка браузера для работы с Burp Suite

Теперь нужно настроить браузер для работы с Burp Suite, функционирующего в качестве прокси-сервера для перехвата и модификации запросов. Опять же я буду использовать Firefox, но для других браузеров весь процесс будет аналогичным.

В браузере зайдите в раздел Preferences, кликните на Advanced и зайдите во вкладку Network. Убедитесь, что в настройках соединения стоит «Manual proxy configuration» и введите адрес 127.0.0.1 в параметре HTTP Proxy и 8080 в параметре Port. Затем отметьте флажок Use this proxy server for all protocols и убедитесь, что ничего не указано в поле No Proxy for. Кликните на OK. Переходим к настройке Burp Suite.

Рисунок 3: Параметры браузера для работы с Burp Suite

Шаг 4. Перехват запросов при помощи Burp Suite

Откройте Burp Suite в Kali Linux, начните новый проект, а затем зайдите во вкладку Proxy и убедитесь, что нажата кнопка Intercept is on, чтобы мы могли изменять запросы, исходящие от веб-страницы и вставлять различные значения для тестирования SQL инъекции. На странице авторизации я ввел произвольное имя пользователя. Вы можете наблюдать чистый запрос, параметры, заголовки и даже информацию в шестнадцатеричной форме.

Рисунок 4: Запрос, перехваченный при помощи Burp Suite

Нас интересует поле имени пользователя, которое мы будем изменять для тестирования SQL инъекции. Нажмите на кнопку Action, а затем на Send to Intruder. Альтернативный вариант: кликнуть правой кнопкой мыши в области запроса и выполнить те же самые операции.

Шаг 5. Настройка позиций и полезных нагрузок в Burp Suite

Далее зайдите во вкладку Intruder и кликните на Positions. Burp Suite автоматически конфигурирует позиции, куда вставляются полезные нагрузки во время отсылки запроса, однако поскольку нас интересует только поле username, нужно очистить все позиции, нажав кнопку Clear справа. Выделите значение, введенное в качестве имени пользователя, и нажмите на кнопку Add. Мы будем реализовывать атаку Sniper, когда в полезной нагрузке используется список значений (каждое – однократно).

Рисунок 5: Настройка позиций и значений в полезной нагрузке

После настройки позиции переходим к конфигурированию полезной нагрузки. Для работы с базой данных в SQL запросах могут использоваться различные операторы. Например, оператор SELECT предназначен для извлечения информации, и наш запрос, отсылаемый во время авторизации, выглядел бы примерно так:

SELECT username, password FROM users WHERE username='myname' AND password='mypassword';

Рассмотрим классическую команду в SQL инъекции 1=1--. Ниже показан запрос, формируемый после заполнения поля login.

SELECT username, password FROM users WHERE username='' or 1=1-- AND password='';

Фактически одиночные кавычки превращают первую часть в пустую строку, а выражение 1=1 всегда равно истине. Таким образом, условие для имени пользователя должно быть «пустым» или «истинным». Двойной дефис комментирует остальную часть запроса, и поле password игнорируется. Поскольку выражение «пустота» или «истина» всегда равно истине, а поле password игнорируется, база данных вернет информацию об учетной записи.

Кликните на вкладку Payloads и зайдите в раздел Payload Options. Пока будем использовать стандартные настройки. Здесь мы можем указать полезные нагрузки в виде простого списка, добавляя по одной или загрузив уже существующий список. В Kali есть несколько словарей, включая специально для тестирования SQL инъекций. Нажмите на кнопку Load и загрузите файл /usr/share/wordlists/wfuzz/injection/SQL.txt. Теперь всё готово для реализации нашего сценария.

Рисунок 6: Параметры полезных нагрузок

Реализация атаки при помощи Burp Suite

Кликните на кнопку Start attack, после чего появится новое окно с отображением всего процесса. Здесь вы можете видеть состояние запросов, полезные нагрузки и статус. Будьте терпеливы, поскольку на отработку большого списка может потребоваться много времени.

Рисунок 7: Проверка списка полезных нагрузок

После того как intruder завершит работу, можно посмотреть более подробную информацию, кликнув на нужный запрос.

Рисунок 8: Содержимое отдельного запроса

Шаг 7. Анализ результатов работы Burp Suite

Нас интересуют ответы, полученные на определенные запросы. Каждый сделанный запрос возвращает код статуса 200, но зачастую, когда полезная нагрузка сработала успешно, вы увидите другой код. Обычно у успешного запроса длина ответа очень отличается от других ответов. Я выбрал запрос, содержащий SQL с выражение ' or 1=1 or "=', поскольку ранее уже тестировал эту инъекцию в ручном режиме и знаю, что эта уязвимость сработает.

Рисунок 9: Содержимое запроса со строкой ' or 1=1 or "='

Burp Suite полезен в том числе и потому, что вы можете отобразить веб-страницу, возвращаемую ответом, если зайдете во вкладку Response и кликните на Render. На рисунке ниже видно, что наша SQL инъекция выполнилась успешно, и теперь у нас есть перечень имен пользователей и паролей. Если бы мы работали с административной панелью, то получили бы учетную запись администратора со всеми вытекающими последствиями.

Рисунок 10: Результат отработки SQL инъекции

SQL инъекция в дикой природе

Хотя SQL инъекция уже давно известна как серьезная угроза, но продолжает оставаться как один из наиболее распространенных методов эксплуатации уязвимостей. Отчасти подобная ситуация происходит потому, что любой может собрать полуфункциональное веб-приложение и разместить в интернете. Даже профессиональные разработчики часто не придерживаются практик по написанию безопасного кода. В итоге мы и наблюдаем подобную ситуацию, когда Джимми собрал на коленке и выложил на всеобщее обозрение небезопасное приложение.

Чтобы лучше понимать SQL инъекции, вероятно, нужно выучить сам язык SQL. В конце концов, наилучший способ сломать что-либо – знать, как оно работает, и использовать эти знания в своих целях. При проведении тестов, как только вы найдете уязвимость и подберете рабочую полезную нагрузку, то можете настроить SQL для запуска собственных команд. Эта возможность позволяет выяснить структуру таблиц, модифицировать данные и даже обнаружить другие таблицы в базе данных. Как только вы действительно разберетесь с SQL, фактически, ваши возможности становятся безграничными.

Пока не наступит день, когда безопасность станет высшим приоритетом, мы будем продолжать обнаруживать SQL инъекции в веб-приложениях, и не останемся без работы.