Данные являются одним из важнейших компонентов информационных систем. Веб-приложения на основе базы данных используются организацией для получения данных от клиентов. SQL является аббревиатурой от языка структурированных запросов. Он используется для извлечения и обработки данных в базе данных.
Что такое SQL-инъекция?
SQL-инъекция — это атака, которая отравляет динамические операторы SQL, чтобы закомментировать определенные части оператора или добавить условие, которое всегда будет истинным. Он использует недостатки дизайна в плохо спроектированных веб-приложениях для использования операторов SQL для выполнения вредоносного кода SQL.
Из этого руководства вы узнаете, как использовать SQL-инъекции и как защитить веб-приложения от таких атак.
- Как работает SQL-инъекция
- Действия по взлому: SQL-инъекция веб-приложения
- Другие типы атак SQL-инъекций
- Инструменты автоматизации для SQL-инъекций
- Как предотвратить атаки SQL-инъекций
- Действия по взлому: использование Havji для SQL-инъекций
Как работает SQL-инъекция
Типы атак, которые могут быть выполнены с использованием SQL-инъекций, различаются в зависимости от типа ядра базы данных. Атака работает на динамические операторы SQL . Динамический оператор — это оператор, который генерируется во время выполнения с использованием параметров password из веб-формы или строки запроса URI.
Давайте рассмотрим простое веб-приложение с формой входа. Код для формы 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.
Давайте предположим, что оператор на бэкэнде для проверки идентификатора пользователя выглядит следующим образом
ВЫБЕРИТЕ * ОТ ПОЛЬЗОВАТЕЛЕЙ, ГДЕ электронная почта = $ _POST [’email’] И пароль = md5 ($ _ POST [‘пароль’]);
ВОТ,
- Вышеприведенный оператор использует значения массива $ _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 ('[email protected]',md5('abc'));
Шаг 2) Нажмите Построить схему
Шаг 3) Введите этот код в правой панели
выберите * из пользователей;
Шаг 4) Нажмите Run SQL. Вы увидите следующий результат
Предположим, пользователь вводит [email protected] и 1234 в качестве пароля. Оператор, который будет выполнен для базы данных, будет
ВЫБЕРИТЕ * ОТ ПОЛЬЗОВАТЕЛЕЙ, ГДЕ электронная почта = ' [email protected] ' И пароль = md5 ('1234');
Приведенный выше код можно использовать, закомментировав часть пароля и добавив условие, которое всегда будет верным. Предположим, что злоумышленник предоставит следующие данные в поле адреса электронной почты.
[email protected] 'ИЛИ 1 = 1 ПРЕДЕЛ 1 -']
ххх за пароль.
Сгенерированный динамический оператор будет следующим.
ВЫБЕРИТЕ * ОТ ПОЛЬЗОВАТЕЛЕЙ, ГДЕ электронная почта = ' [email protected] ' ИЛИ 1 = 1 ПРЕДЕЛ 1 - '] И пароль = md5 (' 1234 ');
ВОТ,
- [email protected] оканчивается одинарной кавычкой, которая завершает строковую кавычку
- OR 1 = 1 LIMIT 1 - это условие, которое всегда будет истинным и ограничит возвращаемые результаты только одной записью.
- «И… - это комментарий SQL, который исключает часть пароля.
Скопируйте приведенный выше оператор SQL и вставьте его в текстовое поле SQL FiddleRun SQL, как показано ниже.
Действия по взлому: SQL-инъекция веб-приложения
У нас есть простое веб-приложение по адресу http://www.techpanda.org/ , которое уязвимо для атак с использованием SQL-инъекций только в демонстрационных целях. Код HTML формы выше взят со страницы входа в систему. Приложение обеспечивает базовую безопасность, такую как очистка поля электронной почты. Это означает, что приведенный выше код не может быть использован для обхода входа в систему.
Чтобы обойти это, мы можем вместо этого использовать поле пароля. Диаграмма ниже показывает шаги, которые вы должны выполнить
Давайте предположим, что злоумышленник предоставляет следующую информацию
- Шаг 1: введите [email protected] в качестве адреса электронной почты
- Шаг 2: введите xxx ') ИЛИ 1 = 1 -]
- Нажмите на кнопку Отправить
- Вы будете направлены на приборную панель
Сгенерированный оператор SQL будет выглядеть следующим образом
ВЫБЕРИТЕ * ОТ ПОЛЬЗОВАТЕЛЕЙ, ГДЕ электронная почта = ' [email protected] ' И пароль = md5 ('xxx') ИЛИ 1 = 1 -] ');
Диаграмма ниже показывает, что оператор был сгенерирован.
ВОТ,
- Утверждение разумно предполагает, что используется шифрование md5
- Завершает одинарную кавычку и закрывающую скобку
- Добавляет условие к утверждению, которое всегда будет верным
В целом, успешная атака SQL-инъекций использует несколько различных методов, таких как те, которые были продемонстрированы выше, для выполнения успешной атаки.
Другие типы атак SQL-инъекций
SQL-инъекции могут принести больше вреда, чем просто передавая алгоритмы входа. Некоторые из атак включают
- Удаление данных
- Обновление данных
- Вставка данных
- Выполнение команд на сервере, которые могут загружать и устанавливать вредоносные программы, такие как трояны
- Экспорт ценных данных, таких как данные кредитной карты, электронная почта и пароли, на удаленный сервер злоумышленника
- Получение данных для входа в систему и т. Д.
Приведенный выше список не является исчерпывающим; это просто дает вам представление о том, что SQL-инъекция
Инструменты автоматизации для SQL-инъекций
В приведенном выше примере мы использовали методы ручной атаки, основанные на наших обширных знаниях SQL. Существуют автоматизированные инструменты, которые помогут вам выполнять атаки более эффективно и в кратчайшие сроки. Эти инструменты включают
- SQLSmack - http://www.securiteam.com/tools/5GP081P75C.html
- SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
- SQLMap - http://sqlmap.org/
Как предотвратить атаки 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-инъекций.