Запись локального файла на сервер с помощью sqlmap

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

Введение

В этой лабораторной работе вы изучите мощную функцию sqlmap: возможность записи локальных файлов на удаленный сервер. Эта возможность имеет решающее значение в сценариях тестирования на проникновение, позволяя загружать веб-оболочки (web shells), файлы конфигурации или другие вредоносные полезные нагрузки на скомпрометированный сервер. Мы рассмотрим необходимые предварительные условия, такие как подтверждение привилегий DBA и определение записываемых каталогов, а затем пройдемся по процессу создания файла локально, использования sqlmap для его загрузки и, наконец, проверки его наличия на сервере.

Подтверждение привилегий DBA и прав на запись в каталоги

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

Сначала проверим наличие привилегий DBA. Это крайне важно, поскольку sqlmap часто требует высоких привилегий для выполнения операций с файловой системой.

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

Вы должны увидеть вывод, указывающий, является ли пользователь DBA. Ищите строку, похожую на [INFO] the back-end DBMS user is a DBA.

Далее нам нужно найти записываемый каталог на сервере. sqlmap может помочь в этом, пытаясь определить распространенные записываемые пути. Мы будем использовать опцию --file-write с фиктивным файлом и распространенным записываемым каталогом, таким как /tmp, для тестирования. Хотя мы еще не записываем файл, эта команда может помочь подтвердить возможности записи.

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write=/dev/null --file-dest=/tmp/test_write.txt --batch

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

Ожидаемый вывод для --is-dba:

...
[INFO] checking if the back-end DBMS user is a DBA
[INFO] the back-end DBMS user is a DBA
...

Ожидаемый вывод для тестирования прав на запись (может отличаться, но ищите сообщения об успехе или отсутствие ошибок разрешений):

...
[INFO] the file '/tmp/test_write.txt' has been successfully written on the back-end DBMS file system
...

Создание локального файла для загрузки (например, upload.txt)

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

Перейдите в папку project вашей домашней директории, которая является рабочей директорией по умолчанию в этой лабораторной среде.

cd ~/project

Теперь создайте файл с именем upload.txt с некоторым содержимым, используя команду echo и перенаправление.

echo "This file was uploaded from the LabEx environment!" > upload.txt

Вы можете проверить содержимое файла с помощью команды cat:

cat upload.txt

Ожидаемый вывод:

This file was uploaded from the LabEx environment!

Использование --file-write и --file-dest для указания источника и назначения

На этом шаге вы узнаете об опциях sqlmap, используемых для записи файлов: --file-write и --file-dest.

  • --file-write: Эта опция указывает локальный путь к файлу, который вы хотите загрузить. sqlmap прочитает содержимое этого файла.
  • --file-dest: Эта опция указывает абсолютный путь на удаленном сервере, куда sqlmap должен записать файл. Крайне важно указать путь к каталогу, к которому пользователь базы данных имеет права на запись. Исходя из предыдущего шага, /tmp/ является хорошим кандидатом.

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

Команда будет выглядеть следующим образом:

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write="/home/labex/project/upload.txt" --file-dest="/tmp/uploaded_file.txt" --batch

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

  • -u "http://localhost/vulnerable/index.php?id=1": Целевой URL с уязвимостью SQL-инъекции.
  • --file-write="/home/labex/project/upload.txt": Полный путь к локальному файлу, созданному на предыдущем шаге. Помните, что ~/project раскрывается в /home/labex/project.
  • --file-dest="/tmp/uploaded_file.txt": Полный путь, по которому файл будет записан на удаленном сервере. Мы используем /tmp/ в качестве каталога назначения и называем загруженный файл uploaded_file.txt.
  • --batch: Для автоматизации процесса и принятия значений по умолчанию.

Уделите время, чтобы просмотреть команду и убедиться в правильности путей.

Выполнение команды для загрузки файла в записываемый каталог

На этом шаге вы выполните команду sqlmap, подготовленную на предыдущем шаге, чтобы загрузить upload.txt с вашего локального компьютера в каталог /tmp/ на целевом сервере, назвав его uploaded_file.txt.

Выполните команду sqlmap:

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write="/home/labex/project/upload.txt" --file-dest="/tmp/uploaded_file.txt" --batch

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

Ожидаемый вывод (ищите сообщение об успехе):

...
[INFO] the file '/tmp/uploaded_file.txt' has been successfully written on the back-end DBMS file system
...

Это сообщение подтверждает, что sqlmap считает, что он успешно записал файл в указанное место на сервере.

Проверка успешной загрузки с помощью команды --file-read

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

Используйте опцию --file-read, указав путь к файлу, который вы только что загрузили на сервер:

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-read="/tmp/uploaded_file.txt" --batch

sqlmap попытается прочитать файл и отобразить его содержимое в терминале.

Ожидаемый вывод:

...
[INFO] retrieved file content:
This file was uploaded from the LabEx environment!
...

Если вы видите содержимое "This file was uploaded from the LabEx environment!", это означает, что ваш файл был успешно загружен и может быть прочитан с сервера. Это подтверждает весь процесс записи локального файла на сервер с помощью sqlmap.

Резюме

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