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

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

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

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

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

if (mysqli_num_rows($result) > 0) {
// login successful
} else {
// login failed
}
?>

В этом примере PHP-скрипт пытается аутентифицировать пользователя, сверяя имя пользователя и пароль с записями в таблице «‎users»‎.

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

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

SELECT * FROM users WHERE username = ‘admin’ –‘ AND password = ‘whatever_password_entered’

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

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

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

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

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

Инструменты для автоматического обнаружения и эксплуатации:

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

  • SQLNinja — специализируется на поиске уязвимостей SQL-инъекций в веб-приложениях, использующих Microsoft SQL Server.

  • Havij — выявляет и использует уязвимости SQL-инъекций в целевом приложении и способен выполнять различные типы атак, включая Blind SQL-инъекцию и SQL-инъекцию на основе времени.

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

Заключение

Используйте подготовленные инструкции с параметризованными запросами вместо построения SQL-запросов с конкатенацией строк. Проверяйте вводимые пользователем данные и при необходимости очистите их. Ограничьте права доступа до минимума, необходимого для правильной работы приложения.Регулярно проверяйте свою БД и журналы приложений на предмет необычных действий.Нк забывайте обновлять ПО и систему и используйте брандмауэр, чтобы блокировать известные атаки.

Этичный Хакер в Telegram. В телеграм-канале вас будут ждать интересные материалы по OSINT, анонимности в сети, пентесту, а также обучающие курсы по инфобезу.

Комментарии (6)


  1. Akina
    07.11.2023 11:58
    +6

    Оформление - на двойку.

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

    Приводимый в статье код должен быть как минимум выполняемым. Замените смарт-кавычки на правильные.

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

    Не, а почему в код попало только одно тире из двух?

    Этот запрос закомментировал бы остальную часть запроса

    Я бы понял, будь написано "это значение параметра" - но "запрос"??

    PS. Содержание даже не оцениваю - а то наговорю сейчас...


    1. se7en57
      07.11.2023 11:58
      +1

      Полностью солидарен с вами. Статья будто взяли из "хз какого времени" и переопубликовали.

      CVE привели 18-19 годов. Никто не говорить что нужно всегда писать диссертации, но это конечно халтура


      1. Pochemuk
        07.11.2023 11:58

        Например, взяли отсюда:

        https://cqr.company/ru/web-vulnerabilities/sql-injection/

        Хотя, если хорошо поискать, то могут найтись и более ранние источники.


  1. alex_k777
    07.11.2023 11:58
    +3

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


  1. demetr_ds
    07.11.2023 11:58
    +1

    Яркий пример плохой рекламы телеграмм канала.


  1. GeorgeTudosi
    07.11.2023 11:58

    Зато хранить пароли в открытом виде для автора, похоже, ок.