Руководство по SQL-инъекциям: изучаем на примерах

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

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

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

Типы атак, которые могут быть выполнены с использованием SQL-инъекции, различаются по типу поражаемых механизмов базы данных. Атака нацеливается на динамические операторы SQL. Динамический оператор — это оператор, который создается во время выполнения на основе настроек из веб-формы или строки запроса 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-адресе.

Предположим, что запрос для проверки идентификатора посетителя на стороне сервера выглядит следующим образом:

SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);

Здесь:

  • Запрос использует значения массива $ _POST[] прямо, не санируя его;
  • Пароль шифруется с использованием алгоритма MD5.

Мы рассмотрим атаку с использованием SQL инъекции sqlfiddle. Откройте в браузере URL-адрес http://sqlfiddle.com/. На экране появится следующее окно.

Примечание: вам необходимо будет написать инструкции SQL:

Руководство по 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. Нажмите кнопку «Build Schema». Шаг 3. Введите приведенный ниже код в правой панели:

select * from users;

Шаг 4. Нажмите «Run SQL». Вы увидите следующий результат:

Руководство по SQL-инъекциям: изучаем на примерах Предположим, что посетитель предлагает адрес электронной почты admin@admin.sys и 1234 в виде пароля. Запрос, который должен быть выполнен в базе данных, может выглядеть следующим образом:

SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');

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

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.xxx заканчивается одной кавычкой, которая завершает строку;
  • OR 1 = 1 LIMIT 1 — это условие, которое будет истинным, оно ограничивает возвращаемые результаты только одной записью.

0;‘ AND … — это комментарий SQL, который исключает часть пароля.

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

Руководство по SQL-инъекциям: изучаем на примерах

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

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

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

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

Руководство по SQL-инъекциям: изучаем на примерах Предположим, что злоумышленник предлагает следующие данные:

Шаг 1: Вводит xxx@xxx.xxx в виде адреса электронной почты; Шаг 2: Вводит xxx’) OR 1 = 1 — ];

Руководство по SQL-инъекциям: изучаем на примерах Нажимает кнопку «Отправить».

Он будет направлен в панель администрирования. Сгенерированный запрос будет выглядеть следующим образом:

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');

На приведенной ниже диаграмме показано, как запрос был сгенерирован:

Руководство по SQL-инъекциям: изучаем на примерах Здесь:

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

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

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

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

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

Приведенный выше список не будет полным. Он просто дает представление о том, какую опасность представляют SQL-инъекции.

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

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

  • SQLSmack;
  • SQLPing 2 ;
  • SQLMap .

Как предотвратить SQL-инъекции

Вот пару простых правил, которые смогут защититься от атак с использованием SQL-инъекций :

Ввод пользовательских данных не должен быть доверенным . Его необходимо санировать, прежде чем данные будут использоваться в динамических операциях SQL.

Хранимые процедуры — они могут инкапсулировать SQL-запросы и обрабатывать все входные данные в виде настроек.

Подготовленные запросы — сначала создаются запросы, а далее все предоставленные пользовательские данные обрабатываются в виде настроек. Это не влияет на синтаксис инструкции SQL .

Регулярные выражения — могут быть использованы для обнаружения потенциально вредоносного кода и его удаления перед выполнением операторов SQL .

Права доступа на подключение к базе данных – чтобы защититься от SQL инъекций , учетным записям, которые используются для подключения к базе данных, должны предоставляться только необходимые права доступа. Это поможет ограничить действия, которые SQL-операторы могут выполнять на сервере.

Сообщения об ошибках — не должны раскрывать конфиденциальную информацию. Простые пользовательские сообщения об ошибках, такие как «Извините, возникла техническая ошибка. Служба поддержки уведомлена о ней. Повторите попытку позже», можно без труда использовать вместо выведения запросов SQL , вызвавших ошибку.

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

В этом практическом сценарии мы собираемся использовать программу Havij Advanced SQL Injection для сканирования уязвимостей веб-сайта.

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

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

Заключение

  • SQL инъекции — это тип атак, который задействует ненадежные запросы SQL ;
  • SQL-инъекции могут использоваться для обхода алгоритмов авторизации, извлечения, вставки, обновления и удаления данных;
  • Перечень инструментов для SQL-инъекций содержит SQLMap , SQLPing и SQLSmack и иные;
  • Продуманная политика безопасности при написании запросов поможет защититься от атаки с использованием SQL-инъекций .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *