Выполнение базового сканирования GET-параметра с помощью sqlmap

Kali LinuxBeginner
Практиковаться сейчас

Введение

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

Определение целевого URL с GET-параметром

На этом этапе вы определите целевой URL, содержащий GET-параметр, который sqlmap будет использовать для проверки на наличие уязвимостей SQL-инъекций. GET-параметр обычно находится в URL после вопросительного знака (?), за которым следуют пары ключ-значение, разделенные амперсандами (&). Для этой лабораторной работы мы настроили простое уязвимое PHP-приложение, которое принимает параметр id через GET.

Сначала откройте веб-браузер в среде LabEx. Вы можете получить доступ к браузеру, нажав на значок "Web Browser" в среде рабочего стола.

Перейдите по следующему URL: http://localhost/index.php?id=1

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

Формирование базовой команды сканирования с опцией -u

На этом этапе вы научитесь формировать базовую команду sqlmap для нацеливания на конкретный URL с GET-параметром. Основной опцией для указания целевого URL является -u (или --url).

Откройте терминал в среде LabEx. Пользователь по умолчанию — labex, а рабочий каталог по умолчанию — ~/project.

Базовый синтаксис sqlmap для сканирования URL с GET-параметром выглядит следующим образом:

sqlmap -u "http://example.com/page.php?param=value"

Замените http://example.com/page.php?param=value на наш целевой URL.

Для нашей лабораторной работы целевой URL — http://localhost/index.php?id=1. Следовательно, команда, которую вы будете использовать, будет следующей:

sqlmap -u "http://localhost/index.php?id=1"

Эта команда указывает sqlmap начать сканирование указанного URL и протестировать GET-параметр id на наличие уязвимостей SQL-инъекций.

Выполнение сканирования на целевом URL

Теперь, когда вы сформировали команду sqlmap, пришло время выполнить ее в терминале. Это инициирует автоматическое сканирование на SQL-инъекции.

В вашем терминале выполните команду sqlmap, которую вы сформировали на предыдущем шаге:

sqlmap -u "http://localhost/index.php?id=1"

sqlmap начнет отправлять различные полезные нагрузки (payloads) параметру id для тестирования различных типов уязвимостей SQL-инъекций. Во время сканирования sqlmap может задать вам несколько вопросов. Для этого базового сканирования вы, как правило, можете принять параметры по умолчанию, нажав Enter или введя y (да), когда будет предложено.

Например, sqlmap может спросить: [INFO] back-end DBMS is MySQL. Do you want to skip test payloads specific for other DBMSs? [Y/n] Введите Y и нажмите Enter.

Он также может спросить: for the URL 'http://localhost/index.php?id=1', parameter 'id' appears to be injectable. Do you want to keep testing others (if any)? [y/N] Введите N и нажмите Enter, чтобы сосредоточиться на выявленном уязвимом параметре.

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

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
            |_| |_| |_|   3.7#stable
[INFO] starting @ 12:34:56 /2023-01-01/
[INFO] testing connection to the target URL
[INFO] checking if the target is protected by some kind of WAF/IPS
[INFO] the back-end DBMS is MySQL. Do you want to skip test payloads specific for other DBMSs? [Y/n] Y
[INFO] for the URL 'http://localhost/index.php?id=1', parameter 'id' appears to be injectable. Do you want to keep testing others (if any)? [y/N] N
[INFO] GET parameter 'id' is vulnerable.
... (truncated output) ...

Анализ начального вывода сканирования на точки инъекций

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

Просмотрите вывод в вашем терминале. Ищите строки, указывающие на то, что sqlmap обнаружил уязвимый параметр. Ключевым индикатором является сообщение, похожее на:

[INFO] GET parameter 'id' is vulnerable.

Это сообщение подтверждает, что sqlmap успешно выявил уязвимость SQL-инъекции в GET-параметре id целевого URL. Вывод также обычно показывает тип обнаруженной инъекции (например, Boolean-based blind, Error-based, Time-based blind, Stacked queries и т. д.) и идентифицированную систему управления базами данных (DBMS) (например, MySQL, PostgreSQL и т. д.).

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

... (previous output) ...
[INFO] GET parameter 'id' is vulnerable.
[INFO] the back-end DBMS is MySQL.
[INFO] fetched data:
[INFO] retrieved: 'ID: 1'
[INFO] retrieved: 'ID: 2'
... (truncated output) ...

Поиск файла сессии в выходной директории

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

По умолчанию sqlmap хранит свои выходные данные в директории ~/.sqlmap/output/. Внутри этой директории вы найдете поддиректории с именами, соответствующими целевому хосту.

Перейдите в выходную директорию sqlmap:

cd ~/.sqlmap/output/localhost/

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

ls -l

Вы должны увидеть директорию, названную в честь конкретного URL или его хеша, а внутри нее — файлы, такие как session.sqlite, log и, возможно, директории dump, если данные были извлечены. Файл session.sqlite содержит данные сессии, которые позволяют sqlmap возобновлять сканирование или просматривать предыдущие результаты без повторного сканирования.

labex@labex-ubuntu:~/project$ cd ~/.sqlmap/output/localhost/
labex@labex-ubuntu:~/.sqlmap/output/localhost$ ls -l
total 12
drwxr-xr-x 2 labex labex 4096 Jan  1 12:35 http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1
labex@labex-ubuntu:~/.sqlmap/output/localhost$ cd http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1/
labex@labex-ubuntu:~/.sqlmap/output/localhost/http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1$ ls -l
total 12
-rw-r--r-- 1 labex labex 1234 Jan  1 12:35 log
-rw-r--r-- 1 labex labex 8192 Jan  1 12:35 session.sqlite

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

Сводка

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