Учебное пособие по SQL-инъекциям: узнайте на примере
⚡ Умное резюме
SQL-инъекция — это атака, которая подделывает динамические SQL-запросы для обхода аутентификации или раскрытия данных, используя уязвимости веб-приложений, формирующих запросы на основе необработанных пользовательских данных. На этой странице показано, как работает эта атака и как её предотвратить.

Что такое SQL-инъекция?
SQL-инъекция — это атака, которая подмешивает в динамические SQL-запросы определенные части, комментируя их или добавляя условие, которое всегда будет истинным. Она использует недостатки проектирования плохо разработанных веб-приложений для эксплуатации SQL-запросов и выполнения вредоносного SQL-кода.
Данные — один из важнейших компонентов информационных систем. Веб-приложения, работающие на основе баз данных, используются организациями для получения данных от клиентов. SQL — это аббревиатура от Язык структурированных запросовОн используется для извлечения и обработки данных в базе данных.
Как работает SQL-инъекция?
Типы атак, которые можно выполнить с помощью SQL-инъекций, различаются в зависимости от типа используемой базы данных. Атака работает с динамическими SQL-запросами. Динамический запрос — это запрос, который генерируется во время выполнения с использованием параметров, передаваемых из веб-формы или строки запроса URI.
Пример SQL-инъекции
Рассмотрим простое веб-приложение с формой авторизации. Код HTML-формы показан ниже.
<form action=‘index.php’ method="post"> <input type="email" name="email" required="required"/> <input type="password" name="password"/> <input type="checkbox" name="remember_me" value="Remember me"/> <input type="submit" value="Submit"/> </form>
ВОТ,
- Приведенная выше форма принимает адрес электронной почты и пароль, а затем отправляет их на сервер. PHP файл с именем index.php.
- Есть возможность сохранять данные о сессии входа в систему в cookie. Мы сделали этот вывод из флажка remember_me. Для отправки данных используется метод POST. Это означает, что значения не отображаются в результатах поиска. URL.
Предположим, что на стороне бэкэнда для проверки идентификатора пользователя используется следующий текст.
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
ВОТ,
- Приведенный выше оператор напрямую использует значения массива $_POST[] без их очистки.
- Пароль хешируется с использованием алгоритма MD5.
Мы проиллюстрируем атаку SQL-инъекции, используя SQL Fiddle, Открой URL http://sqlfiddle.com/ в вашем веб-браузере. Вы получите следующее окно.
Примечание: вам потребуется написать SQL-запросы.
Шаг 1) Введите этот код в левой панели.
CREATE TABLE `users` ( `id` INT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, PRIMARY KEY (`id`)); insert into users (email,password) values ('m@m.com',md5('abc'));
Шаг 2) Нажмите «Создать схему».
Шаг 3) Введите этот код в правой панели.
select * from users;
Шаг 4) Нажмите кнопку «Выполнить SQL». Вы увидите следующий результат.
Предположим, пользователь указывает admin@admin.sys и пароль 1234. В этом случае будет выполнена следующая инструкция к базе данных:
SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');
Приведенный выше код можно использовать для взлома, закомментировав часть, отвечающую за пароль, и добавив условие, которое всегда будет истинным. Предположим, злоумышленник вводит следующие данные в поле адреса электронной почты.
xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]
xxx для пароля.
Сгенерированный динамический оператор будет следующим.
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');
ВОТ,
- ххх@xxx.xxx Заканчивается одинарной кавычкой, которая завершает строку цитаты.
OR 1 = 1LIMIT 1 — это условие, которое всегда будет истинным и ограничивает возвращаемые результаты только одной записью.- — ' AND … — это комментарий SQL, который исключает часть пароля.
Скопируйте приведенный выше SQL-запрос и вставьте его в... SQL Fiddle В текстовом поле "Выполнить SQL" отображается текст, как показано ниже.
Хакерская деятельность: внедрение SQL в веб-приложение
У нас есть простое веб-приложение по адресу http://www.techpanda.org/ Этот код уязвим для SQL-инъекций и представлен исключительно в демонстрационных целях. Приведенный выше HTML-код формы взят со страницы входа в систему. Приложение обеспечивает базовую безопасность, например, проверку поля электронной почты. Это означает, что наш код не может быть использован для обхода авторизации.
Чтобы обойти это ограничение, мы используем поле пароля. На приведенной ниже схеме показаны необходимые шаги.
Предположим, злоумышленник предоставляет следующие входные данные.
- Шаг 1: Введите xxx@xxx.xxx в качестве адреса электронной почты.
- Шаг 2: Введите xxx') ИЛИ 1 = 1 — ]
- Нажмите на кнопку Отправить.
- Вы будете перенаправлены на панель управления.
Сгенерированный SQL-запрос будет выглядеть следующим образом.
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');
Приведенная ниже диаграмма иллюстрирует процесс формирования данного утверждения.
ВОТ,
- В данном утверждении разумно предполагается использование шифрования MD5.
- Завершает формирование одинарной цитируемой строки и закрывающей скобки.
- Добавляет к утверждению условие, которое всегда будет истинным.
В целом, успешная атака представляет собой сочетание нескольких методов, подобных показанным выше.
Другие типы атак с помощью SQL-инъекций
SQL-инъекции могут причинить больше вреда, чем просто обход алгоритмов авторизации. К числу таких атак относятся:
- Удаление данных
- Обновление данных
- Вставка данных
- Выполнение команд на сервере, которые могут загружать и устанавливать вредоносные программы, такие как трояны.
- Экспорт ценных данных, таких как данные кредитных карт, адреса электронной почты и пароли, на удаленный сервер злоумышленника
- Получение данных для входа пользователя и т.д.
- SQL-инъекция на основе файлов cookie
- SQL-инъекция на основе ошибок
- Слепая SQL-инъекция
Приведённый выше список не является исчерпывающим; он лишь даёт представление о том, на что способны SQL-инъекции.
Инструменты автоматизации для SQL-инъекций
В приведенном выше примере мы использовали методы ручной атаки, основанные на наших обширных знаниях SQL. Существуют автоматизированные инструменты, которые могут помочь вам выполнить атаки более эффективно и в кратчайшие сроки. К таким инструментам относятся:
- SQLMap – http://sqlmap.org/
- jSQL-инъекция – https://www.kali.org/tools/jsql/
Как предотвратить SQL-инъекции
Организация может принять следующую политику для защиты от атак с использованием SQL-инъекций.
- Вводимой пользователем информации никогда нельзя доверять. – Перед использованием в динамических SQL-запросах его необходимо обязательно проверить на наличие ошибок (провести санитарную обработку).
- Хранимые процедуры – они могут инкапсулировать SQL-запросы и обрабатывать все входные данные как параметры.
- Подготовленные заявления – Подготовленные запросы работают следующим образом: сначала создается SQL-запрос, а затем все предоставленные пользователем данные обрабатываются как параметры. Это не влияет на синтаксис SQL-запроса.
- Обычные выражения – их можно использовать для обнаружения потенциально вредоносного кода и его удаления перед выполнением SQL-запросов.
- Права доступа пользователя к подключению к базе данных – к используемым учетным записям следует предоставлять только необходимые права доступа. подключиться к базе данных. Это может помочь уменьшить возможности выполнения операторов SQL на сервере.
- Сообщения об ошибках – Эти сообщения не должны раскрывать конфиденциальную информацию или точное место возникновения ошибки. Вместо отображения SQL-запросов, вызвавших ошибку, можно использовать простые пользовательские сообщения об ошибках, например: «Извините, у нас возникли технические неполадки. Мы связались с технической поддержкой. Пожалуйста, попробуйте позже».
Хакерская активность: использование Havij для SQL-инъекций
В этом практическом примере мы используем программу Havij Advanced SQL Injection для сканирования веб-сайта на наличие уязвимостей.
Примечание: Havij — устаревшая и не поддерживаемая система. Windows Инструмент — SQLMap, указанный выше, является текущим стандартом с открытым исходным кодом.
Примечание: ваша антивирусная программа может пометить его как вредоносное из-за его особенностей. Вам следует добавить его в список исключений или приостановить его установку. антивирусная программа.
На изображении ниже показано главное окно Havij.
Вышеуказанный инструмент можно использовать для оценки уязвимости веб-сайта или приложения.








