Учебное пособие по внедрению 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.
- Он имеет возможность сохранять сеанс входа в куки. Мы вывели это из флажка remember_me. Он использует метод post для отправки данных. Это означает, что значения не отображаются в URL.
Предположим, что оператор на серверной стороне для проверки идентификатора пользователя выглядит следующим образом:
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
ВОТ,
- В приведенном выше утверждении используются значения
$_POST[]
массив напрямую, не дезинфицируя их. - Пароль зашифрован с использованием алгоритма MD5.
Мы проиллюстрируем атаку SQL-инъекцией с использованием sqlfiddle. Откройте 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) Нажмите Run 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 = 1
LIMIT 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-инъекции могут принести больше вреда, чем просто передача алгоритмов входа в систему. Некоторые из атак включают в себя
- Удаление данных
- Обновление данных
- Вставка данных
- Выполнение команд на сервере, которые могут загружать и устанавливать вредоносные программы, такие как трояны.
- Экспорт ценных данных, таких как данные кредитных карт, адреса электронной почты и пароли, на удаленный сервер злоумышленника
- Получение данных для входа пользователя и т. д.
- SQL-инъекция на основе файлов cookie
- SQL-инъекция на основе ошибок
- Слепая SQL-инъекция
Приведенный выше список не является исчерпывающим; это просто дает вам представление о том, что такое SQL-инъекция.
Инструменты автоматизации для SQL-инъекций
В приведенном выше примере мы использовали методы ручной атаки, основанные на наших обширных знаниях SQL. Существуют автоматизированные инструменты, которые помогут вам выполнять атаки более эффективно и в кратчайшие сроки. Эти инструменты включают в себя
- SQLMap – http://sqlmap.org/
- JSQL-инъекция – https://tools.kali.org/vulnerability-analysis/jsql
Как предотвратить атаки с использованием SQL-инъекций
Организация может принять следующую политику для защиты от атак с использованием SQL-инъекций.
- Пользовательскому вводу никогда нельзя доверять – Его всегда необходимо очищать перед использованием в операторах динамического SQL.
- Хранимые процедуры - они могут инкапсулировать операторы SQL и обрабатывать все входные данные как параметры.
- Готовые заявления – подготовленные операторы для работы: сначала создается оператор SQL, а затем обрабатываются все отправленные пользовательские данные в качестве параметров. Это не влияет на синтаксис оператора SQL.
- Обычные выражения - их можно использовать для обнаружения потенциально вредоносного кода и его удаления перед выполнением операторов SQL.
- Права доступа пользователей к подключению к базе данных – учетным записям, используемым для подключиться к базе данных. Это может помочь уменьшить возможности выполнения операторов SQL на сервере.
- Сообщения об ошибках - они не должны раскрывать конфиденциальную информацию и сведения о том, где именно произошла ошибка. Простые пользовательские сообщения об ошибках, такие как «К сожалению, у нас возникли технические ошибки. С технической командой связались. Пожалуйста, повторите попытку позже» вместо отображения операторов SQL, вызвавших ошибку.
Хакерская активность: использование Havij для SQL-инъекций
В этом практическом сценарии мы собираемся использовать программу Havij Advanced SQL Injection для сканирования веб-сайта на наличие уязвимостей.
Примечание: ваш антивирусная программа может пометить его из-за его характера. Вам следует добавить его в список исключений или приостановить работу антивирусного программного обеспечения.
На изображении ниже показано главное окно Havij.
Вышеупомянутый инструмент можно использовать для оценки уязвимости веб-сайта/приложения.
Итого
- SQL-инъекция — это тип атаки, использующий неверные операторы SQL.
- SQL-инъекцию можно использовать для обхода алгоритмов входа в систему, получения, вставки, обновления и удаления данных.
- Инструменты внедрения SQL включают SQLMap, SQLPing, SQLSmack и т. д.
- Хорошая политика безопасности при написании оператора SQL может помочь уменьшить количество атак с использованием SQL-инъекций.