Чтение произвольных файлов с сервера с помощью sqlmap

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

Введение

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

Подтверждение привилегий DBA и разрешений на чтение файлов

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

Сначала предположим, что у вас есть уязвимый URL. Для этой лабораторной работы мы будем использовать заполнитель URL. Замените http://example.com/vulnerable?id=1 на ваш фактический целевой URL, если вы выполняете это в реальной тестовой среде.

Для проверки привилегий DBA используйте флаг --is-dba с sqlmap:

sqlmap -u "http://example.com/vulnerable?id=1" --is-dba

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

Если вывод указывает [INFO] current user is DBA: True, значит, у пользователя есть привилегии DBA, что часто подразумевает возможность чтения файлов.

Далее, для проверки разрешений на чтение файлов вы можете использовать флаг --file-priv:

sqlmap -u "http://example.com/vulnerable?id=1" --file-priv

Эта команда попытается определить, имеет ли пользователь базы данных необходимые привилегии для чтения и записи файлов в файловой системе. Если вывод показывает [INFO] current user has FILE privilege: True, вы, вероятно, сможете продолжить чтение файлов.

Пример вывода (симуляция):

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | . | . |
      |___|_|___|_|_|_  |_|___| V
                       |_|   http://sqlmap.org

[INFO] starting @ 12:34:56 /2023-10-26/
[INFO] fetched data: 'True'
[INFO] current user is DBA: True
[INFO] fetched data: 'True'
[INFO] current user has FILE privilege: True
[INFO] shutting down @ 12:34:57 /2023-10-26/

Этот вывод подтверждает, что пользователь базы данных имеет привилегии DBA и FILE, что делает возможным чтение произвольных файлов.

Определение известного абсолютного пути к файлу (например, /etc/passwd)

На этом этапе вам необходимо определить целевой файл на удаленном сервере, который вы хотите прочитать. Распространенной целью для демонстрации уязвимостей произвольного чтения файлов является /etc/passwd в системах Linux, поскольку он содержит информацию об учетных записях пользователей и обычно доступен для чтения всем. Другими потенциальными целями могут быть файлы конфигурации, журналы веб-сервера или исходный код приложений, в зависимости от системы и ваших целей.

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

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

Примеры распространенных путей к файлам в Linux:

  • /etc/passwd (Информация об учетных записях пользователей)
  • /etc/shadow (Хэшированные пароли — обычно требуется привилегия root для чтения)
  • /etc/hosts (Сетевые имена хостов)
  • /etc/nginx/nginx.conf или /etc/apache2/apache2.conf (Конфигурация веб-сервера)
  • /var/log/auth.log или /var/log/syslog (Системные журналы)
  • /proc/self/cmdline (Командная строка текущего процесса)

Для этой лабораторной работы мы продолжим использовать /etc/passwd в качестве целевого файла.

Использование флага --file-read для указания удаленного файла

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

Синтаксис использования --file-read прост:

sqlmap -u "http://example.com/vulnerable?id=1" --file-read="/path/to/remote/file"

Замените http://example.com/vulnerable?id=1 на ваш целевой URL, а /path/to/remote/file — на абсолютный путь к файлу, который вы определили на предыдущем шаге.

Для нашей лабораторной работы мы попытаемся прочитать /etc/passwd. Полная команда будет выглядеть следующим образом:

sqlmap -u "http://example.com/vulnerable?id=1" --file-read="/etc/passwd"

Когда sqlmap успешно прочитает файл, он сохранит его содержимое локально в каталоге ~/.sqlmap/output/<target_host>/files/. Имя файла обычно будет совпадать с именем удаленного файла (например, passwd).

Примечание: sqlmap автоматически сгенерирует и выполнит полезную нагрузку SQL-инъекции. Ваша роль заключается в предоставлении уязвимого URL и пути к целевому файлу.

Выполнение команды для чтения удаленного файла

Теперь пришло время выполнить команду sqlmap, которую вы составили на предыдущем шаге, чтобы фактически прочитать удаленный файл. Откройте терминал в среде LabEx и выполните команду.

sqlmap -u "http://example.com/vulnerable?id=1" --file-read="/etc/passwd"

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

Пример вывода (симуляция):

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | . | . |
      |___|_|___|_|_|_  |_|___| V
                       |_|   http://sqlmap.org

[INFO] starting @ 12:35:00 /2023-10-26/
[INFO] fetched data: 'root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
... (сокращено для краткости) ...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/bash'
[INFO] file '/etc/passwd' saved to '/home/labex/.sqlmap/output/example.com/files/passwd'
[INFO] shutting down @ 12:35:05 /2023-10-26/

Ключевая строка, на которую следует обратить внимание: [INFO] file '/etc/passwd' saved to '/home/labex/.sqlmap/output/example.com/files/passwd'. Это означает, что sqlmap успешно "прочитал" файл и сохранил его содержимое на вашем локальном компьютере в каталоге вывода sqlmap.

Просмотр содержимого локально сохраненного файла

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

Путь обычно будет ~/.sqlmap/output/<target_host>/files/. В нашем симулированном примере целевым хостом является example.com, а файлом — passwd. Таким образом, полный путь к сохраненному файлу будет ~/.sqlmap/output/example.com/files/passwd.

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

cat ~/.sqlmap/output/example.com/files/passwd

Пример вывода (симуляция):

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
... (сокращено для краткости) ...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/bash

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

Резюме

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