Приветствую всех гостей и обитателей портала Codeby!
Что такое SQL-инъекция?
Внедрение SQL - это web-уязвимость, которая позволяет злоумышленнику вмешиваться в запросы, которые приложение выполняет в своей базе данных. Как правило, злоумышленник может просматривать данные, которые он обычно не может получить. Это может включать данные, принадлежащие другим пользователям, или любые другие данные, к которым само приложение имеет доступ. Во многих случаях злоумышленник может изменить или удалить эти данные, что приводит к изменениям содержимого или поведения приложения.
В некоторых ситуациях злоумышленник может усилить атаку с использованием SQL-инъекции, чтобы поставить под угрозу базовый сервер или другую внутреннюю инфраструктуру или выполнить атаку типа «отказ в обслуживании».
Получение скрытых данных.
Рассмотрим приложение для покупок, которое отображает товары в разных категориях. Когда пользователь нажимает на категорию «Подарки», его браузер запрашивает URL:
Это приводит к тому, что приложение выполняет запрос SQL для получения сведений о соответствующих продуктах из базы данных:
Этот SQL-запрос просит базу данных вернуть:
Приложение не обеспечивает никакой защиты от атак с использованием SQL-инъекций, поэтому злоумышленник может провести такую атаку:
Это приводит к запросу SQL:
Ключевым моментом здесь является то, что последовательность черточек -- - это индикатор комментариев в SQL, и это означает, что остальная часть запроса интерпретируется как комментарий. Это эффективно удаляет оставшуюся часть запроса, поэтому он больше не включает в себя AND release = 1.
Это означает, что отображаются все продукты, включая невыпущенные.
Далее, злоумышленник может заставить приложение отображать все продукты в любой категории, включая категории, которые ему неизвестны:
Это приводит к запросу SQL:
Модифицированный запрос вернет все элементы, для которых либо категория «Подарки», либо 1 равно 1
Поскольку 1 = 1 всегда верно, запрос вернет все элементы.
Пример ниже содержит уязвимость внедрения SQL в фильтре категорий продуктов. Когда пользователь выбирает категорию, приложение выполняет запрос SQL, подобный следующему:
Чтобы показать это наглядно, выполняем атаку SQL-инъекцию, которая заставит приложение отобразить сведения обо всех продуктах в любой категории, как выпущенных, так и не выпущенных.
Переходим на уязвимый сайт:
И с помощью Burp Suite перехватываем запрос при переходе в раздел Accessories:
Изменяем параметр Accessories, внедряя в него SQL запрос:
Отправляем запрос на сервер и получаем список товаров недоступный нам ранее:
Подрыв логики приложения.
Рассмотрим приложение, которое позволяет пользователям входить в систему с именем пользователя и паролем. Если пользователь отправляет имя пользователя wiener и пароль bluecheese, приложение проверяет учетные данные, выполняя следующий запрос SQL:
Если запрос возвращает данные пользователя, то вход в систему успешен. В противном случае, мы получаем отказ.
В этом примере, злоумышленник может войти в систему как любой пользователь без пароля, просто используя последовательность комментариев SQL - чтобы удалить проверку пароля из предложения WHERE запроса.
Для проверки, отправим имя пользователя administrator-- - экранируя проверку пароля комментарием, чтобы осуществить вход с пустым паролем:
Этот запрос возвращает пользователя с именем administrator и позволяет войти злоумышленнику под этим аккаунтом.
Проверим это на практике:
Перехватываем запрос логин и модифицируем параметр Username и Password:
Отправляем запрос и получаем ожидаемый результат:
Тема SQL инъекций прорабатываемых с помощью Burp Suite остаточно обширна, и в следующих статьях я подробно расскажу о каждой технике, её применении и что самое главное, как защитить свой ресурс от подобного вида атак.
Следите за обновлениями, спасибо за внимание.
- [0] Burp Suite. Тестирование web-приложений на проникновение
- [1] Burp Suite. Знакомство с основным инструментарием
- [2] Burp Suite. Атаки с помощью Intruder
- [3] Burp Suite. Установление доверия по HTTPS
- [4] Burp Suite. Настройка параметров проекта
- [5] Burp Suite. Sniper, Intruder - Практика и закрепление
- [6] Burp Suite: Spider - Сканирование сайта
- [7] Burp Suite. Аудит на наличие уязвимостей
Что такое SQL-инъекция?
Внедрение SQL - это web-уязвимость, которая позволяет злоумышленнику вмешиваться в запросы, которые приложение выполняет в своей базе данных. Как правило, злоумышленник может просматривать данные, которые он обычно не может получить. Это может включать данные, принадлежащие другим пользователям, или любые другие данные, к которым само приложение имеет доступ. Во многих случаях злоумышленник может изменить или удалить эти данные, что приводит к изменениям содержимого или поведения приложения.
В некоторых ситуациях злоумышленник может усилить атаку с использованием SQL-инъекции, чтобы поставить под угрозу базовый сервер или другую внутреннюю инфраструктуру или выполнить атаку типа «отказ в обслуживании».
Получение скрытых данных.
Рассмотрим приложение для покупок, которое отображает товары в разных категориях. Когда пользователь нажимает на категорию «Подарки», его браузер запрашивает URL:
Код:
https://insecure-website.com/products?category=Gifts
Код:
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
- Все детали (*)
- Из таблицы «Продукты»
- В категории «Подарки»
- Которые актуальны - released = 1
Приложение не обеспечивает никакой защиты от атак с использованием SQL-инъекций, поэтому злоумышленник может провести такую атаку:
Код:
https://insecure-website.com/products?category=Gifts'--
Код:
SELECT * FROM products WHERE category = 'Gifts'--' AND released = 1
Это означает, что отображаются все продукты, включая невыпущенные.
Далее, злоумышленник может заставить приложение отображать все продукты в любой категории, включая категории, которые ему неизвестны:
Код:
https://insecure-website.com/products?category=Gifts'+OR+1=1--
Код:
SELECT * FROM products WHERE category = 'Gifts' OR 1=1--' AND released = 1
Поскольку 1 = 1 всегда верно, запрос вернет все элементы.
Пример ниже содержит уязвимость внедрения SQL в фильтре категорий продуктов. Когда пользователь выбирает категорию, приложение выполняет запрос SQL, подобный следующему:
Код:
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
Переходим на уязвимый сайт:
И с помощью Burp Suite перехватываем запрос при переходе в раздел Accessories:
Изменяем параметр Accessories, внедряя в него SQL запрос:
Отправляем запрос на сервер и получаем список товаров недоступный нам ранее:
Подрыв логики приложения.
Рассмотрим приложение, которое позволяет пользователям входить в систему с именем пользователя и паролем. Если пользователь отправляет имя пользователя wiener и пароль bluecheese, приложение проверяет учетные данные, выполняя следующий запрос SQL:
Код:
SELECT * FROM users WHERE username = 'wiener' AND password = 'bluecheese'
В этом примере, злоумышленник может войти в систему как любой пользователь без пароля, просто используя последовательность комментариев SQL - чтобы удалить проверку пароля из предложения WHERE запроса.
Для проверки, отправим имя пользователя administrator-- - экранируя проверку пароля комментарием, чтобы осуществить вход с пустым паролем:
Код:
SELECT * FROM users WHERE username = 'administrator'-- AND password = ''
Проверим это на практике:
Перехватываем запрос логин и модифицируем параметр Username и Password:
Отправляем запрос и получаем ожидаемый результат:
Тема SQL инъекций прорабатываемых с помощью Burp Suite остаточно обширна, и в следующих статьях я подробно расскажу о каждой технике, её применении и что самое главное, как защитить свой ресурс от подобного вида атак.
Следите за обновлениями, спасибо за внимание.