Учебное пособие по внедрению SQL: изучение на примере

Содержание:

Anonim

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

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

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

В этом руководстве вы узнаете о методах внедрения SQL-кода и о том, как защитить веб-приложения от таких атак.

  • Как работает SQL-инъекция
  • Хакерские действия: SQL-инъекция веб-приложения
  • Другие типы атак с использованием SQL-инъекций
  • Инструменты автоматизации для внедрения SQL
  • Как предотвратить атаки с использованием SQL-инъекций
  • Хакерская активность: использование Havji для SQL-инъекций

Как работает SQL-инъекция

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

Рассмотрим простое веб-приложение с формой входа в систему. Код для HTML-формы показан ниже.

ЗДЕСЬ,

  • Приведенная выше форма принимает адрес электронной почты, а затем пароль отправляет их в файл PHP с именем index.php.
  • У него есть возможность сохранить сеанс входа в систему в файле cookie. Мы вывели это из флажка Remember_me. Он использует метод post для отправки данных. Это означает, что значения не отображаются в URL-адресе.

Предположим, в бэкэнде выполняется следующая инструкция для проверки идентификатора пользователя.

ВЫБЕРИТЕ * ОТ пользователей ГДЕ email = $ _POST ['email'] И пароль = 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 ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));

Шаг 2) Нажмите "Создать схему".

Шаг 3) Введите этот код на правой панели

выберите * из пользователей;

Шаг 4) Щелкните Выполнить SQL. Вы увидите следующий результат

Предположим, пользовательские материалы. Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. и 1234 в качестве пароля. Оператор, который будет выполнен для базы данных, будет

SELECT * FROM users WHERE email = ' Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ' И пароль = md5 ('1234');

Приведенный выше код можно использовать, закомментировав часть пароля и добавив условие, которое всегда будет истинным. Предположим, злоумышленник вводит следующие данные в поле адреса электронной почты.

Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ' ИЛИ 1 = 1 ПРЕДЕЛ 1 - ']

xxx для пароля.

Сгенерированный динамический оператор будет следующим.

SELECT * FROM users WHERE email = ' Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ' ИЛИ 1 = 1 ПРЕДЕЛ 1 - '] И пароль = md5 (' 1234 ');

ЗДЕСЬ,

  • Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. заканчивается одинарной кавычкой, которая завершает строковую кавычку
  • ИЛИ 1 = 1 LIMIT 1 - это условие, которое всегда будет истинным и ограничивает возвращаемые результаты только одной записью.
  • - «И…» - это SQL-комментарий, который исключает часть пароля.

Скопируйте приведенный выше оператор SQL и вставьте его в текстовое поле SQL FiddleRun SQL, как показано ниже.

Хакерские действия: SQL-инъекция веб-приложения

У нас есть простое веб-приложение по адресу http://www.techpanda.org/ , которое уязвимо для атак SQL-инъекций только в демонстрационных целях. Приведенный выше код HTML-формы взят со страницы входа. Приложение обеспечивает базовую безопасность, такую ​​как очистка поля электронной почты. Это означает, что наш приведенный выше код нельзя использовать для обхода входа в систему.

Чтобы обойти это, мы можем вместо этого использовать поле пароля. На схеме ниже показаны шаги, которые вы должны выполнить.

Предположим, злоумышленник предоставляет следующие данные

  • Шаг 1: введите Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. как адрес электронной почты
  • Шаг 2. Введите xxx ') ИЛИ 1 = 1 -]
  • Нажмите кнопку "Отправить"
  • Вы будете перенаправлены на панель управления

Сгенерированный оператор SQL будет следующим

SELECT * FROM users WHERE email = ' Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ' И пароль = md5 ('xxx') ИЛИ 1 = 1 -] ');

На диаграмме ниже показано, что оператор был создан.

ЗДЕСЬ,

  • В заявлении разумно предполагается, что используется шифрование md5.
  • Завершает одинарную кавычку и закрывающую скобку
  • Добавляет условие к утверждению, которое всегда будет истинным

Как правило, успешная атака с использованием SQL-инъекции пытается выполнить ряд различных методов, таких как продемонстрированные выше, для проведения успешной атаки.

Другие типы атак с использованием SQL-инъекций

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

  • Удаление данных
  • Обновление данных
  • Вставка данных
  • Выполнение команд на сервере, которые могут загружать и устанавливать вредоносные программы, такие как трояны.
  • Экспорт ценных данных, таких как данные кредитной карты, адрес электронной почты и пароли, на удаленный сервер злоумышленника.
  • Получение данных для входа в систему и т. Д.

Приведенный выше список не является исчерпывающим; это просто дает вам представление о том, что SQL-инъекция

Инструменты автоматизации для внедрения SQL

В приведенном выше примере мы использовали методы ручной атаки, основанные на наших обширных знаниях SQL. Существуют автоматизированные инструменты, которые помогут вам проводить атаки более эффективно и в кратчайшие сроки. Эти инструменты включают

  • SQLSmack - https://securiteam.com/tools/5GP081P75C
  • 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-инъекций.