Как использовать SQLMAP для тестирования веб-сайта на уязвимость SQL Injection

Опубликовано: 14 Июля, 2021

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

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

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

$ переменная = $ _POST ['ввод'];
mysql_query ("ВСТАВИТЬ В` таблицу` (`столбец`) ЗНАЧЕНИЯ ('$ переменная')");

Если пользователь вводит «значение»); DROP TABLE table; - »в качестве входных данных запрос становится

ВСТАВИТЬ В `таблицу` (` столбец`) ЗНАЧЕНИЯ ('значение'); Таблица DROP TABLE; - ')

что для нас нежелательно, так как здесь пользовательский ввод компилируется напрямую вместе с заранее написанным sql-запросом. Следовательно, пользователь сможет ввести sql-запрос, необходимый для управления базой данных.

Где можно использовать SQLMAP?

Если вы заметили URL-адрес веб-сайта в форме http://testphp.vulnweb.com/listproducts.php? cat = 1 , где параметр «GET» выделен жирным шрифтом, тогда веб-сайт может быть уязвим для этого режима SQL-инъекции, и злоумышленник может получить доступ к информации в базе данных. Кроме того, SQLMAP работает, когда он основан на php.

Простым тестом для проверки уязвимости вашего веб-сайта будет замена значения в параметре запроса на получение звездочкой (*). Например,

 http://testphp.vulnweb.com/listproducts.php?cat=*

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

Установка sqlmap

SQLMAP предустановлен вместе с kali linux, который предпочитают большинство тестеров на проникновение. Однако вы можете установить sqlmap в других Linux-системах на основе debian с помощью команды

 sudo apt-get install sqlmap

Применение

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

 http://testphp.vulnweb.com/listproducts.php?cat=1

Как видите, есть параметр запроса GET (cat = 1), который может быть изменен пользователем, изменив значение cat. Таким образом, этот веб-сайт может быть уязвим для такого рода SQL-инъекций.
Чтобы проверить это, мы используем SQLMAP. Чтобы посмотреть набор параметров, которые можно передать, введите терминал,

 sqlmap -h


Параметры, которые мы будем использовать для базовой SQL-инъекции, показаны на картинке выше. Наряду с этим мы также будем использовать параметры –dbs и -u, использование которых было объяснено на шаге 1.
Использование SQLMAP для проверки веб-сайта на уязвимость SQL-инъекции:

  1. Шаг 1. Перечислите информацию о существующих базах данных.
    Итак, во-первых, мы должны ввести веб-адрес, который мы хотим проверить, вместе с параметром -u. Мы также можем использовать параметр –tor, если хотим протестировать сайт с использованием прокси. Обычно мы хотим проверить, можно ли получить доступ к базе данных. Поэтому для этого мы используем параметр –dbs. –Dbs перечисляет все доступные базы данных.
     sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 --dbs


    Мы получаем следующий вывод, показывающий, что есть две доступные базы данных. Иногда приложение сообщит вам, что оно идентифицировало базу данных, и спросит, хотите ли вы протестировать другие типы баз данных. Вы можете продолжить и набрать «Y». Кроме того, он может спросить, хотите ли вы протестировать другие параметры на наличие уязвимостей, введите здесь «Y», поскольку мы хотим тщательно протестировать веб-приложение.

    Мы замечаем, что это две базы данных, acuart и information_schema.

  2. Шаг 2. Перечислите информацию о таблицах, присутствующих в конкретной базе данных
    Чтобы попытаться получить доступ к любой из баз данных, мы должны немного изменить нашу команду. Теперь мы используем -D, чтобы указать имя базы данных, к которой мы хотим получить доступ, и как только мы получим доступ к базе данных, мы захотим узнать, можем ли мы получить доступ к таблицам. Для этого мы используем запрос –tables. Позвольте нам получить доступ к базе данных acuart.
     sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 
    -D acuart - таблицы 

    Таблицы

    На картинке выше мы видим, что было получено 8 таблиц. Итак, теперь мы точно знаем, что сайт уязвим.

  3. Шаг 3. Перечислите информацию о столбцах определенной таблицы.

    Если мы хотим просмотреть столбцы определенной таблицы, мы можем использовать следующую команду, в которой мы используем -T для указания имени таблицы и –columns для запроса имен столбцов. Мы попытаемся получить доступ к таблице «художники».

     sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 
    -D acuart -T художники -колонны 

    Столбцы

  4. Шаг 4: выгрузите данные из столбцов
    Точно так же мы можем получить доступ к информации в определенном столбце, используя следующую команду, где -C можно использовать для указания нескольких имен столбцов, разделенных запятой, а запрос –dump извлекает данные.
     sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1
    -D acuart -T художники -C aname --dump 


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

Предотвратить внедрение SQL

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

$ db = новый PDO («подробности подключения»);
$ stmt = db-> prepare ("Выбрать имя среди пользователей, где id =: id");
$ stmt-> execute (array (': id', $ data));

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

Примечание: это приложение предназначено для использования исключительно в целях тестирования.
Связанная статья
Базовая SQL-инъекция и смягчение последствий

Ссылка: stackoverflow.com

Эта статья предоставлена Дипаком Шриватсавом . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

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