Учебное пособие по SQL-инъекциям: узнайте на примере

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

ВОТ,

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

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

ВЫБЕРИТЕ * ИЗ пользователей ГДЕ еmail = $_POST['еmail'] И пароль = md5($_POST['пароль']);

ВОТ,

  • Приведенный выше оператор напрямую использует значения массива $_POST[] без их очистки.
  • Пароль зашифрован с использованием алгоритма MD5.

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

Примечание: вам придется написать операторы 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) Нажмите «Построить схему».

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

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

Шаг 4) Нажмите «Выполнить SQL». Вы увидите следующееwing результат

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

Предположим, что пользовательские поставки admin@admin.sys и 1234 в качестве пароля. Оператор, который будет выполнен в отношении базы данных, будет

ВЫБЕРИТЕ * ИЗ пользователей ГДЕ еmail = 'admin@admin.sys' И пароль = md5('1234');

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

xxx@xxx.xxx' ИЛИ ​​1 = 1 ПРЕДЕЛ 1 — ' ]

xxx для пароля.

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

ВЫБЕРИТЕ * ИЗ пользователей ГДЕ еmail = 'xxx@xxx.xxx' ИЛИ ​​1 = 1 LIMIT 1 — ' ] И пароль = md5('1234');

ВОТ,

  • ххх@xxx.xxx заканчивается одинарной кавычкой, которая завершает строковую кавычку
  • ИЛИ 1 = 1 LIMIT 1 — это условие, которое всегда будет истинным и ограничивает возвращаемые результаты только одной записью.
  • — ' AND … — это комментарий SQL, который исключает часть пароля.

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

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

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

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

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

SQL-инъекция веб-приложения

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

  • Шаг 1. Введите xxx@xxx.xxx в качестве адреса электронной почты.mail адрес
  • Шаг 2: Введите xxx') ИЛИ 1 = 1 — ]

SQL-инъекция веб-приложения

  • Нажмите кнопку "Отправить"
  • Вы будете перенаправлены на панель управления

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

ВЫБЕРИТЕ * ИЗ пользователей ГДЕ еmail = 'xxx@xxx.xxx' И пароль = md5('xxx') ИЛИ 1 = 1 — ]');

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

SQL-инъекция веб-приложения

ВОТ,

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

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

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

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

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

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

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

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

Как предотвратить атаки с использованием SQL-инъекций

Организация может принять следующиеwing политику защиты от атак SQL-инъекций.

  • Пользовательскому вводу никогда нельзя доверять – Его всегда необходимо очищать перед использованием в операторах динамического SQL.
  • Хранимые процедуры - они могут инкапсулировать операторы SQL и обрабатывать все входные данные как параметры.
  • Готовые заявления –подготовленные операторы для работы: сначала создается оператор SQL, а затем обрабатываются все отправленные пользовательские данные в качестве параметров. Это не влияет на синтаксис оператора SQL.
  • Обычные выражения -их можно использовать для обнаружения потенциально вредоносного кода и его удаления перед выполнением операторов SQL.
  • Права доступа пользователей к подключению к базе данных –Учетным записям, используемым для подключения к базе данных, следует предоставлять только необходимые права доступа. Это может помочь уменьшить возможности выполнения операторов SQL на сервере.
  • Сообщения об ошибках -они не должны раскрывать конфиденциальную информацию и сведения о том, где именно произошла ошибка. Простые пользовательские сообщения об ошибках, такие как «К сожалению, у нас возникли технические ошибки. С технической командой связались. Пожалуйста, попробуйте еще раз later»можно использовать вместо отображения операторов SQL, вызвавших ошибку.

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

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

Примечание. Ваша антивирусная программа может пометить его из-за его характера. Вам следует добавить его в список исключений или приостановить работу антивирусного программного обеспечения.

На изображении ниже показано главное окно Havij.

Используйте Havij для SQL-инъекций

Вышеупомянутый инструмент можно использовать для оценки уязвимости веб-сайта/приложения.

Итоги

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

Invicti, разработчики технологии Proof Based Scanning, спонсировали проект Guru99, чтобы повысить осведомленность о безопасности веб-приложений и позволить большему количеству разработчиков узнать о написании безопасного кода.