10 Янв, 2023

SQL-инъекция

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

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

 

Примеры:

 

• Злоумышленник может попытаться ввести следующий SQL-код в форму входа в систему: ' ИЛИ 1=1 -- это приведет к тому, что приложение вернет все строки из таблицы users, что потенциально позволит злоумышленнику получить доступ к конфиденциальной информации.

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

 

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

 

<?php
$username = $_POST[“username”];
$password = $_POST[“password”];

$query = “SELECT * FROM users WHERE username = ‘$username’ AND password = ‘$password'”;
$result = mysqli_query mysqli_query($connection, $query);

if (mysqli_num_rows mysqli_num_rows($result) > 0) {
// вход в систему прошел успешно
} else {
// ошибка входа в систему
}
?>

 

В этом примере PHP-скрипт пытается аутентифицировать пользователя, сверяя предоставленные им имя пользователя и пароль с записями в таблице базы данных под названием “пользователи”. Проблема с этим кодом заключается в том, что он напрямую включает пользовательский ввод ($username и $password) в SQL-запрос без его надлежащей проверки или очистки. Это означает, что если злоумышленник введет вредоносную строку в username и password поля, они потенциально могут привести к тому, что запрос выполнит непреднамеренные команды.

 

Например, злоумышленник может ввести в username поле: admin' -- что привело бы к тому, что запрос стал бы:

 

SELECT * FROM users WHERE имя пользователя = ‘admin’ –‘ И пароль = ‘whatever_password_entered’

 

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

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

 

$stmt = $connection->prepare(“SELECT * FROM users WHERE username = ? AND password = ?”);
$stmt->bind_param(“сс”, $username, $password);
$stmt->execute();b

 

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

 

Уязвимость SQL-инъекции может быть использована для повышения привилегий. Техника, называемая “слепой SQL-инъекцией”, часто используется для получения доступа к более конфиденциальным данным путем изменения исходного запроса и введения кода для запроса данных с сервера в логическом контексте. Этот метод часто используется для извлечения конфиденциальных данных, таких как имена пользователей и пароли, номера кредитных карт и личная информация.

 

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

 

• Определите все поля ввода в веб-приложении, включая формы, строки запроса и файлы cookie.

• Попытайтесь ввести различные полезные данные SQL-инъекций, такие как одинарные кавычки, двойные кавычки и логические операторы, в каждое поле ввода.

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

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

 

Инструменты:

 

• SQLMap

• SQLNinja

• Havij

• SQL Injection Lab

• sqlol

• sqliX

• sqliv

• sqldict

• sqldump

• sqlitebrowser

• sqlninja

• sqlite

• sqlcipher

• sqliteadmin

• sqliteman

• sqlite_analyzer

 

Популярные подвиги:

 

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

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

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

 

Основные CVE, связанные с этой уязвимостью:

 

• CVE-2019-19781

• CVE-2019-16759

• CVE-2018-7600

• CVE-2017-9805

• CVE-2015-5352

 

Главные новости, связанные с уязвимостью:

 

Автомобильные компании массово подвергаются веб-уязвимостям

Взлом синтаксиса JSON позволил переправлять полезные данные SQL-инъекций через WAF

Zendesk Исследует недостатки, открывшие дверь для грабежа аккаунта

Sophos исправляет уязвимость SQL-инъекции в UTM-устройстве

 

Где можно проверить наличие этой уязвимости:

 

• Тестирование на проникновение в веб-приложение

• Набор Owasp Zap и burp

• Веб-сайты, на которых есть форма, страница входа в систему, страницы поиска и т. Д

 

Полезные курсы, Практические занятия и Видеоролики:

 

• OWASP (Open Web Application Security Project) предлагает ресурсы и обучение тому, как предотвращать и смягчать атаки с использованием SQL-инъекций

• Институт SANS предлагает различные курсы по безопасности веб-приложений, включая курс по предотвращению и смягчению последствий SQL-инъекций

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

 

Книги:

 

• “Атаки и защита с использованием SQL-инъекций” Джастина Кларка

• “Взлом открытых веб-приложений” Джоэла Скамбрея, Майка Шемы и Калеба Сима

• “Руководство хакера веб-приложений: поиск и использование недостатков безопасности” Дэфидд Штуттард и Маркус Пинто

 

Полезная нагрузка:

 

• ‘ or 1=1 —

• ‘ or 1=1#

• ‘ or 1=1/*

• ‘ or ‘a’=’a

• ” or “a”=”a

 

Правила Sigma / правила брандмауэра для блокировки или остановки уязвимости:

 

• блокировать входящий трафик на порт 1433 (SQL Server)

• блокировать входящий трафик на порт 3306 (MySQL)

• блокировать входящий трафик на порт 1521 (Oracle)

• блокировать входящий трафик на порт 5432 (PostgreSQL)

 

Полезные сервисы:

 

• Брандмауэр веб-приложений (WAF) может блокировать известные атаки SQL-инъекций

• Регулярные исправления и обновления программного обеспечения могут помочь предотвратить использование уязвимостей

 

Меры по смягчению последствий:

 

• Используйте подготовленные инструкции с параметризованными запросами вместо построения SQL-запросов с конкатенацией строк.

• Проверьте вводимые пользователем данные и при необходимости очистите их.

• Ограничьте права доступа до минимума, необходимого для правильной работы приложения.

• Регулярно проверяйте и контролируйте свою базу данных и журналы приложений на предмет необычных действий.

• Постоянно обновляйте программное обеспечение и систему.

• Используйте брандмауэр веб-приложений, чтобы блокировать известные атаки

• Используйте кодирование и экранирование, когда это необходимо.

 

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

 

Другие Услуги

Готовы к безопасности?

Связаться с нами